FAQ-Oracle11g2如何在ASM下进行数据文件迁移

发布时间:  2015-05-28 浏览次数:  315 下载次数:  0
问题描述

适用场景:

环境:

OS:Suse11

Version:Oracle11gR2

1、数据库表空间创建到了错误的磁盘组或者目录,需要调整到正确的磁盘组或者位置;

2、数据库迁移。

下面以第一个场景作为示例。

处理过程

1、执行脚本的时候,有一个INDEX的表空间建错了地方(正确的应该是+DG_INDEX而非+DG_DATA):
DROP TABLESPACE    ICD_BILLLOG_IND including    contents
/
create tablespace ICD_BILLLOG_IND
datafile '+DG_DATA(DATAFILE)/ipcc/rdata60' size 1900M reuse,
         '+DG_DATA(DATAFILE)/ipcc/rdata61' size 1900M reuse,
         '+DG_DATA(DATAFILE)/ipcc/rdata62' size 1900M reuse,
         '+DG_DATA(DATAFILE)/ipcc/rdata63' size 1900M reuse
  LOGGING
   ONLINE
   PERMANENT
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
/

2、登录数据库服务器,使用ASM拷贝这些文件到+DG_INDEX下:
BD-C01-DBFS-1:/dev # su - grid
grid@BD-C01-DBFS-1:~> asmcmd
ASMCMD> ls
DG_BACKUP/
DG_DATA/
DG_INDEX/
DG_OCR/
DG_ORA/
ASMCMD> cd DG_DATA
ASMCMD> ls
IPCC/
ASMCMD> cd ipcc
ASMCMD> ls
DATAFILE/
TEMPFILE/
ecc_dat001
ecc_dat002
ecc_dat003
ecc_dat004
ecc_temp001
ecc_temp002
rdata10
……
rdata60
rdata61
rdata62
rdata63
……
rmcidata4
(把数据文件拷贝到正确的目录下)
ASMCMD> cp +DG_DATA/ipcc/rdata60 +DG_INDEX/ipcc/rdata60      
copying +DG_DATA/ipcc/rdata60 -> +DG_INDEX/ipcc/rdata60
ASMCMD> cp +DG_DATA/ipcc/rdata61 +DG_INDEX/ipcc/rdata61      
copying +DG_DATA/ipcc/rdata61 -> +DG_INDEX/ipcc/rdata61
ASMCMD> cp +DG_DATA/ipcc/rdata62 +DG_INDEX/ipcc/rdata62      
copying +DG_DATA/ipcc/rdata62 -> +DG_INDEX/ipcc/rdata62
ASMCMD> cp +DG_DATA/ipcc/rdata63 +DG_INDEX/ipcc/rdata63      
copying +DG_DATA/ipcc/rdata63 -> +DG_INDEX/ipcc/rdata63

3、修改表空间的数据文件(如果是系统表空间,则需要先shutdown,在mount数据库后再操作):
SQL*Plus: Release 11.2.0.3.0 Production on Wed May 27 10:54:03 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> conn sys/Sys123! as sysdba
Connected.
SQL> alter tablespace ICD_BILLLOG_IND offline;

Tablespace altered.

SQL> alter tablespace ICD_BILLLOG_IND rename datafile '+DG_DATA/ipcc/rdata60' to '+DG_INDEX/ipcc/rdata60';

Tablespace altered.

SQL> alter tablespace ICD_BILLLOG_IND rename datafile '+DG_DATA/ipcc/rdata61' to '+DG_INDEX/ipcc/rdata61';

Tablespace altered.

SQL> alter tablespace ICD_BILLLOG_IND rename datafile '+DG_DATA/ipcc/rdata62' to '+DG_INDEX/ipcc/rdata62';

Tablespace altered.

SQL> alter tablespace ICD_BILLLOG_IND rename datafile '+DG_DATA/ipcc/rdata63' to '+DG_INDEX/ipcc/rdata63';

Tablespace altered.

SQL> recover datafile '+DG_INDEX/ipcc/rdata60';
Media recovery complete.
SQL> recover datafile '+DG_INDEX/ipcc/rdata61';
Media recovery complete.
SQL> recover datafile '+DG_INDEX/ipcc/rdata62';
Media recovery complete.
SQL> recover datafile '+DG_INDEX/ipcc/rdata63';
Media recovery complete.
SQL> alter tablespace ICD_BILLLOG_IND online;

Tablespace altered.

SQL>

4、检查验证是否正确(检查:a、表空间下的数据文件路径是否正确;b、表空间下的对象是否存在):
SQL> col tablespace_name format a18;
SQL> col file_name format a25;
SQL> select distinct a.tablespace_name,a.file_name,a.bytes/1024/1024 totalbytes_M
  2  from dba_data_files a,
  3  (select tablespace_name,file_id,sum(bytes) bytes from dba_free_space group by tablespace_name,file_id) b
  4  where a.tablespace_name=b.tablespace_name and a.file_id=b.file_id and a.tablespace_name='ICD_BILLLOG_IND';

TABLESPACE_NAME    FILE_NAME                 TOTALBYTES_M
------------------ ------------------------- ------------
ICD_BILLLOG_IND    +DG_INDEX/ipcc/rdata61            1900
ICD_BILLLOG_IND    +DG_INDEX/ipcc/rdata62            1900
ICD_BILLLOG_IND    +DG_INDEX/ipcc/rdata63            1900
ICD_BILLLOG_IND    +DG_INDEX/ipcc/rdata60            1900

SQL> select count(*) from all_indexes where tablespace_name='ICD_BILLLOG_IND';

  COUNT(*)
----------
       193

SQL>

5、删除+DG_DATA下原来的旧文件
ASMCMD> pwd    
+dg_data/ipcc
ASMCMD> rm rdata60
ASMCMD> rm rdata61
ASMCMD> rm rdata62
ASMCMD> rm rdata63

6、检查磁盘组的空间是否有变化(DG_DATA的占用率已经下降,DG_INDEX占用率已经上升)
SQL> col name format a10;
SQL> col state format a10;
SQL> SELECT NAME, STATE, TOTAL_MB, FREE_MB, round((TOTAL_MB-FREE_MB)/TOTAL_MB,2) use_rate
  2  FROM V$ASM_DISKGROUP;

NAME       STATE        TOTAL_MB    FREE_MB   USE_RATE
---------- ---------- ---------- ---------- ----------
DG_OCR     MOUNTED         10240       9844        .04
DG_BACKUP  MOUNTED        455680     455581          0
DG_DATA    CONNECTED      512000     417687        .18
DG_INDEX   CONNECTED      460800     432976        .06
DG_ORA     CONNECTED      204800     111219        .46

SQL>

结束。

END