使用DBMS_FILE_TRANSFER迁移ASM中的表空间和数据文件
2013-02-26 06:24
525 查看
这是一个存储过程包,是除了RMAN之外又一个用于执行迁移任务的工具包,可以完成如下的迁移:ASM->ASM、ASM->OS Flie、OS File->ASM、OS File->OS File。
使用DBMS_FILE_TRANSFER迁移表空间和数据文件
从文件系统到ASM
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions02.dbf
6 rows selected.
SQL> alter tablespace gtlions offline;
Tablespace altered.
SQL> begin dbms_file_transfer.copy_file('dir1','gtlions01.dbf','dir2','gtlions01.dbf'); end;
2 /
PL/SQL procedure successfully completed.
SQL> begin dbms_file_transfer.copy_file('dir1','gtlions02.dbf','dir2','gtlions02.dbf'); end;
2 /
PL/SQL procedure successfully completed.
SQL> alter database rename file'/u01/oracle/10g/oradata/gt10g/gtlions01.dbf' to'+DATA01/gt10g/datafile/gtlions01.dbf';
Database altered.
SQL> alter database rename file'/u01/oracle/10g/oradata/gt10g/gtlions02.dbf' to'+DATA01/gt10g/datafile/gtlions02.dbf';
Database altered.
SQL> alter tablespace gtlions online;
Tablespace altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
+DATA01/gt10g/datafile/gtlions01.dbf
+DATA01/gt10g/datafile/gtlions02.dbf
6 rows selected.
SQL>
从ASM到文件系统
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
+DATA01/gt10g/datafile/gtlions.263.808393465
+DATA01/gt10g/datafile/gtlions.262.808393513
6 rows selected.
--我们将迁移表空间gtlions的两个数据文件
--创建源和目标目录
SQL> create or replace directory dir1 as'/u01/oracle/10g/oradata/gt10g/';
Directory created.
SQL> create or replace directory dir2 as'+DATA01/gt10g/datafile/';
Directory created.
SQL> desc dbms_file_transfer;
PROCEDURE COPY_FILE
ArgumentName Type In/Out Default?
----------------------------------------------------- ------ --------
SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
SOURCE_FILE_NAME VARCHAR2 IN
DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
DESTINATION_FILE_NAME VARCHAR2 IN
PROCEDURE GET_FILE
ArgumentName Type In/Out Default?
----------------------------------------------------- ------ --------
SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
SOURCE_FILE_NAME VARCHAR2 IN
SOURCE_DATABASE VARCHAR2 IN
DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
DESTINATION_FILE_NAME VARCHAR2 IN
PROCEDURE PUT_FILE
ArgumentName Type In/Out Default?
----------------------------------------------------- ------ --------
SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
SOURCE_FILE_NAME VARCHAR2 IN
DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
DESTINATION_FILE_NAME VARCHAR2 IN
DESTINATION_DATABASE VARCHAR2 IN
--开始传输文件
SQL> begin
2 dbms_file_transfer.copy_file('dir2','gtlions.263.808393465','dir1','gtlions01.dbf');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_file_transfer.copy_file('dir2','gtlions.262.808393513','dir1','gtlions02.dbf');
3 end;
4 /
PL/SQL procedure successfully completed.
--重新定位文件位置
SQL> alter database rename file'+DATA01/gt10g/datafile/gtlions.263.808393465' to'/u01/oracle/10g/oradata/gt10g/gtlions01.dbf';
Database altered.
SQL> alter database rename file'+DATA01/gt10g/datafile/gtlions.262.808393513' to '/u01/oracle/10g/oradata/gt10g/gtlions02.dbf';
Database altered.
SQL> alter tablespace gtlions online;
Tablespace altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions02.dbf
6 rows selected.
需要注意的目标文件如果是存放在ASM中,那么指定生成的文件是alias,实际还是会生成固定格式的文件:
[oracle@gtser1 ~]$ asmcmd ls -l data01/gt10g/datafile
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE FEB 26 13:00:00 Y COPY_FILE.262.808407481
DATAFILE UNPROT COARSE FEB 26 13:00:00 Y COPY_FILE.263.808407501
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y GTLIONS.256.808328331
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y GTLIONS.258.808326729
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y GTLIONS.265.808326737
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y GTLIONS.281.808328327
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y SYSAUX.272.808328281
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y SYSTEM.271.808328265
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y UNDOTBS1.273.808328327
N gtlions01.dbf =>+DATA01/GT10G/DATAFILE/COPY_FILE.262.808407481
N gtlions02.dbf =>+DATA01/GT10G/DATAFILE/COPY_FILE.263.808407501
-The End-
使用DBMS_FILE_TRANSFER迁移表空间和数据文件
从文件系统到ASM
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions02.dbf
6 rows selected.
SQL> alter tablespace gtlions offline;
Tablespace altered.
SQL> begin dbms_file_transfer.copy_file('dir1','gtlions01.dbf','dir2','gtlions01.dbf'); end;
2 /
PL/SQL procedure successfully completed.
SQL> begin dbms_file_transfer.copy_file('dir1','gtlions02.dbf','dir2','gtlions02.dbf'); end;
2 /
PL/SQL procedure successfully completed.
SQL> alter database rename file'/u01/oracle/10g/oradata/gt10g/gtlions01.dbf' to'+DATA01/gt10g/datafile/gtlions01.dbf';
Database altered.
SQL> alter database rename file'/u01/oracle/10g/oradata/gt10g/gtlions02.dbf' to'+DATA01/gt10g/datafile/gtlions02.dbf';
Database altered.
SQL> alter tablespace gtlions online;
Tablespace altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
+DATA01/gt10g/datafile/gtlions01.dbf
+DATA01/gt10g/datafile/gtlions02.dbf
6 rows selected.
SQL>
从ASM到文件系统
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
+DATA01/gt10g/datafile/gtlions.263.808393465
+DATA01/gt10g/datafile/gtlions.262.808393513
6 rows selected.
--我们将迁移表空间gtlions的两个数据文件
--创建源和目标目录
SQL> create or replace directory dir1 as'/u01/oracle/10g/oradata/gt10g/';
Directory created.
SQL> create or replace directory dir2 as'+DATA01/gt10g/datafile/';
Directory created.
SQL> desc dbms_file_transfer;
PROCEDURE COPY_FILE
ArgumentName Type In/Out Default?
----------------------------------------------------- ------ --------
SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
SOURCE_FILE_NAME VARCHAR2 IN
DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
DESTINATION_FILE_NAME VARCHAR2 IN
PROCEDURE GET_FILE
ArgumentName Type In/Out Default?
----------------------------------------------------- ------ --------
SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
SOURCE_FILE_NAME VARCHAR2 IN
SOURCE_DATABASE VARCHAR2 IN
DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
DESTINATION_FILE_NAME VARCHAR2 IN
PROCEDURE PUT_FILE
ArgumentName Type In/Out Default?
----------------------------------------------------- ------ --------
SOURCE_DIRECTORY_OBJECT VARCHAR2 IN
SOURCE_FILE_NAME VARCHAR2 IN
DESTINATION_DIRECTORY_OBJECT VARCHAR2 IN
DESTINATION_FILE_NAME VARCHAR2 IN
DESTINATION_DATABASE VARCHAR2 IN
--开始传输文件
SQL> begin
2 dbms_file_transfer.copy_file('dir2','gtlions.263.808393465','dir1','gtlions01.dbf');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_file_transfer.copy_file('dir2','gtlions.262.808393513','dir1','gtlions02.dbf');
3 end;
4 /
PL/SQL procedure successfully completed.
--重新定位文件位置
SQL> alter database rename file'+DATA01/gt10g/datafile/gtlions.263.808393465' to'/u01/oracle/10g/oradata/gt10g/gtlions01.dbf';
Database altered.
SQL> alter database rename file'+DATA01/gt10g/datafile/gtlions.262.808393513' to '/u01/oracle/10g/oradata/gt10g/gtlions02.dbf';
Database altered.
SQL> alter tablespace gtlions online;
Tablespace altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oracle/10g/oradata/gt10g/system01.dbf
/u01/oracle/10g/oradata/gt10g/undotbs1.dbf
/u01/oracle/10g/oradata/gt10g/sysaux01.dbf
/u01/oracle/10g/oradata/gt10g/users01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions01.dbf
/u01/oracle/10g/oradata/gt10g/gtlions02.dbf
6 rows selected.
需要注意的目标文件如果是存放在ASM中,那么指定生成的文件是alias,实际还是会生成固定格式的文件:
[oracle@gtser1 ~]$ asmcmd ls -l data01/gt10g/datafile
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE FEB 26 13:00:00 Y COPY_FILE.262.808407481
DATAFILE UNPROT COARSE FEB 26 13:00:00 Y COPY_FILE.263.808407501
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y GTLIONS.256.808328331
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y GTLIONS.258.808326729
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y GTLIONS.265.808326737
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y GTLIONS.281.808328327
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y SYSAUX.272.808328281
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y SYSTEM.271.808328265
DATAFILE UNPROT COARSE FEB 25 16:00:00 Y UNDOTBS1.273.808328327
N gtlions01.dbf =>+DATA01/GT10G/DATAFILE/COPY_FILE.262.808407481
N gtlions02.dbf =>+DATA01/GT10G/DATAFILE/COPY_FILE.263.808407501
-The End-
相关文章推荐
- ORACLE 使用dbms_file_transfer 包迁移表空间或文件
- 使用 dbms_file_transfer 包在asm 和文件系统间拷贝文件
- Oracle 11g单实例使用asm,并测试数据文件的迁移到其他磁盘组
- 将表空间、数据文件从文件系统迁移到ASM
- ASM时的OFM特性对影的建数据文件名的影响及为SYSTEM表空间的数据文件使用别名
- 将表空间、数据文件从ASM迁移到文件系统
- ASM时的OFM特性对影的建数据文件名称的影响及为SYSTEM表空间的数据文件使用别名
- 使用dbms_file_transfer传输ASM file出现ORA-15001
- 使用DBMS_FILE_TRANSFER包拷贝文件
- ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
- 使用create datafile... as ...迁移数据文件到裸设备
- 使用rman迁移数据文件操作步骤(RAC-ASM环境)
- 【oracle11g,14】表空间管理3:临时表空间,表空间的脱机和只读,数据文件迁移,更改表空间数据文件的大小,表空间数据文件的迁移,使用非标准块的表空间,bigfile 表空间
- DBMS_FILE_TRANSFER用法取asm下文件
- 使用Oracle包DBMS_FILE_TRANSFER进行copy文件
- asm数据文件迁移(os–>asm)
- mysql innodb引擎 长时间使用后,数据文件远大于实际数据量,导致空间不足。
- 使用FileResult导出txtl数据文件
- Asp.Net MVC 使用FileResult导出Excel数据文件
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件