ASM相关转换
ASM涉及到的几种转换
一 从非ASM文件转换到ASM文件,用RMAN
1 首先连接到RMAN
rman>connect target
2 首先将要转换的表空间离线或者READ ONLY
alter tablespace test offline;
3 复制数据文件到ASM磁盘组内
backup as copy tablespace test format '+TEST_ASM';
4 文件切换到ASM
switch datafile 6 to copy;
二、默认的ASM只有2个控制文件
SQL> /
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------------------------------------- --- ---------- --------------
+TEST_ASM/boson/controlfile/current.256.676757355 NO 16384 430
+TEST_ASM/boson/controlfile/current.257.676757357 YES 16384 430
添加控制文件的步骤如下:
1alter system set controfile_files=''
2 关闭数据库
shutdown immediate
3 启动到nomount状态
startup nomount
4 用RMAN恢复到指定的位置
restore controlfile to 'TEST_ASM/boson/controlfile/controlfile3.ctl' from
'TEST_ASM/boson/controlfile/current.257.676757357';
5 打开数据库
alter database mount;
alter database open;
三、数据库级转换和单个表空间差不多
步骤如下:
Step 1: 创建ASM 的init.ora
touch init+ASM.ora ;
*.instance_type='asm'
*.remote_login_passwordfile='SHARED'
*.large_pool_size=12M
*.asm_power_limit=10
*.background_dump_dest='/u01/app/oracle/admin/+ASM/bdump'
*.core_dump_dest='/u01/app/oracle/admin/+ASM/cdump'
*.user_dump_dest='/u01/app/oracle/admin/+ASM/udump'
*.asm_diskstring='/dev/raw/raw*
Step 2: 创建ASM的SPFILE
export ORACLE_SID=+ASM
sqlplus / as sysdba
create spfile from pfile='/tmp/init+ASM.ora';
Step 3: 启动ASM实例
startup nomount
Step 4: 创建需要的磁盘
Step 5: 更改磁盘文件的权限
chown oracle:oinstall /dev/rdisk*3
Step 6: 创建磁盘组
根据硬件和应用的要求选择合适的冗余度
create diskgroup test_asm normal redundancy failgroup fail_1 disk'/dev/raw/raw1*' name test_asm_0001,failgroup fail_2 disk'/dev/raw/raw2*' name test_asm_0002;
Step 7: 准备转换数据库到ASM
ALTER SYSTEM SET DB_CREATE_FILE_DEST='+TEST_ASM' SCOPE=BOTH;
Step 8: RMAN转换
RMAN> BACKUP BACKUPSET ALL DELETE INPUT;
RMAN> BACKUP AS COPY DATAFILECOPY ALL DELETE INPUT;
RMAN> BACKUP AS COPY ARCHIVELOG ALL DELETE INPUT;
RMAN> BACKUP DEVICE TYPE DISK INCREMENTAL LEVEL 0 AS COPY TAG 'ASM_Migration' DATABASE FORMAT '+DATA_AREA';
step 9:
转换REDO和TEMP 先DROP 在在DISKGROUP 添加REDO 和TEMP
step 10:
switch
四、使用DBMS_FILE_TRANSFER 也可以做以上转换
http://blue-prince.spaces.live.com/Blog/cns!12D6E6CCFACF4283!996.entry
从Oracle 10g开始,Oracle提供了DBMS_FILE_TRANSFER这么一个程序包,可以方便地在本地数据库和远程数据库,ASM和文件系统间传输数据库文件。这样数据库文件的传输就方便了许多,尤其是在传输基于ASM存储的数据文件时,不再局限于利用RMAN来进行传输。下面介绍一下这个包的用法。
DBMS_FILE_TRANSFER包一共包含了3个存储过程,分别提供本机之间、本机从远程主机抓取以及本机上传至远程主机三种传输数据库文件的功能。要求传输用户有对源目录读和对目标目录写的权限,单个数据库文件必须是512字节的整数倍并且文件大小必须小于或者等于2TB。
1、COPY_FILE。可以在数据库本机的文件系统之间,ASM磁盘组之间或者文件系统和ASM磁盘组之间方便地传输数据库文件。
DBMS_FILE_TRANSFER.COPY_FILE(
source_directory_object IN VARCHAR2,–源目录
source_file_name IN VARCHAR2,–源文件名
destination_directory_object IN VARCHAR2,–目标目录
destination_file_name IN VARCHAR2);–目标文件名
SQL> create directory data as ‘+DATA/HELLODB/DATAFILE’;
SQL> create directory test as ‘+TEST/HELLODB/DATAFILE’;
SQL> exec DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST’,’system.dbf’)
ASMCMD> ls -a
+TEST/HELLODB/DATAFILE/system.dbf => COPY_FILE.256.654701983
2、GET_FILE。从远程数据库读取数据库文件并在本机的文件系统或者ASM磁盘组上创建一份复制文件。
DBMS_FILE_TRANSFER.GET_FILE(
source_directory_object IN VARCHAR2,
source_file_name IN VARCHAR2,
source_database IN VARCHAR2, –到远程数据库的db link名
destination_directory_object IN VARCHAR2,
destination_file_name IN VARCHAR2);
begin
DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘lnk_test’,’TEST1′,’system.dbf’);
end;
/
3、PUT_FILE。在本地数据库将数据库文件传输至远程数据库的文件系统或者ASM磁盘组。
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object IN VARCHAR2,
source_file_name IN VARCHAR2,
destination_directory_object IN VARCHAR2,
destination_file_name IN VARCHAR2,
destination_database IN VARCHAR2); –到目标数据库的db link名
begin
DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST2′,’system.dbf’, ‘lnk_test’);
end;
一 从非ASM文件转换到ASM文件,用RMAN
1 首先连接到RMAN
rman>connect target
2 首先将要转换的表空间离线或者READ ONLY
alter tablespace test offline;
3 复制数据文件到ASM磁盘组内
backup as copy tablespace test format '+TEST_ASM';
4 文件切换到ASM
switch datafile 6 to copy;
二、默认的ASM只有2个控制文件
SQL> /
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------------------------------------- --- ---------- --------------
+TEST_ASM/boson/controlfile/current.256.676757355 NO 16384 430
+TEST_ASM/boson/controlfile/current.257.676757357 YES 16384 430
添加控制文件的步骤如下:
1alter system set controfile_files=''
2 关闭数据库
shutdown immediate
3 启动到nomount状态
startup nomount
4 用RMAN恢复到指定的位置
restore controlfile to 'TEST_ASM/boson/controlfile/controlfile3.ctl' from
'TEST_ASM/boson/controlfile/current.257.676757357';
5 打开数据库
alter database mount;
alter database open;
三、数据库级转换和单个表空间差不多
步骤如下:
Step 1: 创建ASM 的init.ora
touch init+ASM.ora ;
*.instance_type='asm'
*.remote_login_passwordfile='SHARED'
*.large_pool_size=12M
*.asm_power_limit=10
*.background_dump_dest='/u01/app/oracle/admin/+ASM/bdump'
*.core_dump_dest='/u01/app/oracle/admin/+ASM/cdump'
*.user_dump_dest='/u01/app/oracle/admin/+ASM/udump'
*.asm_diskstring='/dev/raw/raw*
Step 2: 创建ASM的SPFILE
export ORACLE_SID=+ASM
sqlplus / as sysdba
create spfile from pfile='/tmp/init+ASM.ora';
Step 3: 启动ASM实例
startup nomount
Step 4: 创建需要的磁盘
Step 5: 更改磁盘文件的权限
chown oracle:oinstall /dev/rdisk*3
Step 6: 创建磁盘组
根据硬件和应用的要求选择合适的冗余度
create diskgroup test_asm normal redundancy failgroup fail_1 disk'/dev/raw/raw1*' name test_asm_0001,failgroup fail_2 disk'/dev/raw/raw2*' name test_asm_0002;
Step 7: 准备转换数据库到ASM
ALTER SYSTEM SET DB_CREATE_FILE_DEST='+TEST_ASM' SCOPE=BOTH;
Step 8: RMAN转换
RMAN> BACKUP BACKUPSET ALL DELETE INPUT;
RMAN> BACKUP AS COPY DATAFILECOPY ALL DELETE INPUT;
RMAN> BACKUP AS COPY ARCHIVELOG ALL DELETE INPUT;
RMAN> BACKUP DEVICE TYPE DISK INCREMENTAL LEVEL 0 AS COPY TAG 'ASM_Migration' DATABASE FORMAT '+DATA_AREA';
step 9:
转换REDO和TEMP 先DROP 在在DISKGROUP 添加REDO 和TEMP
step 10:
switch
四、使用DBMS_FILE_TRANSFER 也可以做以上转换
http://blue-prince.spaces.live.com/Blog/cns!12D6E6CCFACF4283!996.entry
从Oracle 10g开始,Oracle提供了DBMS_FILE_TRANSFER这么一个程序包,可以方便地在本地数据库和远程数据库,ASM和文件系统间传输数据库文件。这样数据库文件的传输就方便了许多,尤其是在传输基于ASM存储的数据文件时,不再局限于利用RMAN来进行传输。下面介绍一下这个包的用法。
DBMS_FILE_TRANSFER包一共包含了3个存储过程,分别提供本机之间、本机从远程主机抓取以及本机上传至远程主机三种传输数据库文件的功能。要求传输用户有对源目录读和对目标目录写的权限,单个数据库文件必须是512字节的整数倍并且文件大小必须小于或者等于2TB。
1、COPY_FILE。可以在数据库本机的文件系统之间,ASM磁盘组之间或者文件系统和ASM磁盘组之间方便地传输数据库文件。
DBMS_FILE_TRANSFER.COPY_FILE(
source_directory_object IN VARCHAR2,–源目录
source_file_name IN VARCHAR2,–源文件名
destination_directory_object IN VARCHAR2,–目标目录
destination_file_name IN VARCHAR2);–目标文件名
SQL> create directory data as ‘+DATA/HELLODB/DATAFILE’;
SQL> create directory test as ‘+TEST/HELLODB/DATAFILE’;
SQL> exec DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST’,’system.dbf’)
ASMCMD> ls -a
+TEST/HELLODB/DATAFILE/system.dbf => COPY_FILE.256.654701983
2、GET_FILE。从远程数据库读取数据库文件并在本机的文件系统或者ASM磁盘组上创建一份复制文件。
DBMS_FILE_TRANSFER.GET_FILE(
source_directory_object IN VARCHAR2,
source_file_name IN VARCHAR2,
source_database IN VARCHAR2, –到远程数据库的db link名
destination_directory_object IN VARCHAR2,
destination_file_name IN VARCHAR2);
begin
DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘lnk_test’,’TEST1′,’system.dbf’);
end;
/
3、PUT_FILE。在本地数据库将数据库文件传输至远程数据库的文件系统或者ASM磁盘组。
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object IN VARCHAR2,
source_file_name IN VARCHAR2,
destination_directory_object IN VARCHAR2,
destination_file_name IN VARCHAR2,
destination_database IN VARCHAR2); –到目标数据库的db link名
begin
DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST2′,’system.dbf’, ‘lnk_test’);
end;
