当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

利用dbms_file_transfer实现文件系统和ASM间拷贝数据文件及从ASM到远端ASM文件传输

最近在学习两台使用ASM文件系统的数据库DG的搭建,由于目标数据库数据量比较大(25TB),并且没有足够存放备份的空间,这就需要借助于ORACLE 10g推出的DBMS_FILE_TRANSFER包来传输数据文件,本文参考老杨(杨廷昆老师)的BLOG上找到DBMS_FILE_TRANSFER包的相关文章。
大家都知道要实现文件系统和ASM间拷贝数据文件使用RMAN可以实现,但是可能还有部分人不知道使用DBMS_FILE_TRANSFER包也可以实现,不过DBMS_FILE_TRANSFER包只可以拷贝二进制文件,并且单个文件大小不能超过2TB,以下为从ASM拷贝数据文件到文件系统的实验过程:
1.查询数据文件位置

SQL> select name from v$datafile;
NAME
--------------------------------------------
+DATA/fhacdb/datafile/system.260.787157273
+DATA/fhacdb/datafile/sysaux.259.787157277
+DATA/fhacdb/datafile/undotbs1.258.787157281
+DATA/fhacdb/datafile/users.256.787157289

2.创建所需的DIRECTOTY

SQL> create directory filesystem as '/home/oracle';

Directory created.
SQL> create directory asm_dir as '+DATA/fhacdb/datafile';

Directory created.

3.将USERS表空间热备

SQL> alter tablespace USERS begin backup;

Tablespace altered.

4.将ASM里的USER表空间对应的数据文件拷贝到文件系统

SQL> exec dbms_file_transfer.copy_file('ASM_DIR','users.256.787157289','FILESYSTEM','users01.dbf');

PL/SQL procedure successfully completed.

以上DBMS_FILE_TRANSFER包用到了4个参数,分别为:源文件的路径、源文件名称、目标文件路径、目标文件名称。
5.关闭USERS表空间热备

SQL> alter tablespace HANLONG end backup;

Tablespace altered.

6.验证文件是否拷贝成功

SQL> ! ls -l /home/oracle
总计 22668
drwxr-xr-x 10 oracle oinstall     4096 06-29 10:26 AutoCheck
-rw-r--r--  1 oracle oinstall 14064061 03-06 14:17 AutoCheck.exe
drwxr-xr-x  2 oracle oinstall     4096 06-20 14:11 Desktop
drwxr-xr-x  3 oracle oinstall     4096 06-20 13:20 install
-rw-r-----  1 oracle oinstall      354 06-28 15:21 LOG_cat_owb.TXT
-rw-r--r--  1 oracle oinstall  3537885 06-18 16:32 tiftojpg.jar
-rw-r-----  1 oracle oinstall  5259264 07-09 14:16 users01.dbf

7.从文件系统拷贝数据文件到ASM从文件系统拷贝文件到ASM只需要将DBMS_FILE_TRANSFER包的参数位置调换即可,比如:

SQL> exec dbms_file_transfer.copy_file('FILESYSTEM','users01.dbf','ASM_DIR','test01.dbf');

PL/SQL procedure successfully completed.

8.验证文件是否正确拷贝

[grid@dbserver1 ~]$ asmcmd
ASMCMD> cd DATA/FHACDB/DATAFILE
ASMCMD> ls test*
test01.dbf

相比RMAN来说,RMAN只能在本机上实现文件系统和ASM间文件的拷贝,DBMS_FILE_TRANSFER包不但可以实现在本机拷贝,还可以通过DBLINK在不同服务器间数据文件的传输,下面简单演示下利用DBMS_FILE_TRANSFER包的PUT_FILE从本地ASM将数据文件传输到远端ASM上:
1.查看数据文件位置

SQL> conn dbdream/dbdream
Connected.
SQL> select name from v$datafile;
NAME
--------------------------------------------
+DATA/fhacdb/datafile/system.261.784217547
+DATA/fhacdb/datafile/sysaux.262.784217553
+DATA/fhacdb/datafile/undotbs1.263.784217557
+DATA/fhacdb/datafile/users.265.784217587
+DATA/fhacdb/datafile/arrangements01.dbf
+DATA/fhacdb/datafile/digital01.dbf
+DATA/fhacdb/datafile/early_data01.dbf
+PIC01/fhacdb/datafile/pic01.dbf
+PIC03/fhacdb/datafile/pic03.dbf
+PIC02/fhacdb/datafile/pic02.dbf
+PIC08/fhacdb/datafile/pic08.dbf
+DATA/fhacdb/datafile/resourcedb01.dbf
+PIC06/fhacdb/datafile/pic06.dbf
+PIC07/fhacdb/datafile/pic07.dbf
+PIC05/fhacdb/datafile/pic05.dbf
+PIC04/fhacdb/datafile/pic04.dbf
+DATA/fhacdb/datafile/application01.dbf
+DATA/fhacdb/datafile/authsystem01.dbf
+DATA/fhacdb/datafile/compose01.dbf
+DATA/fhacdb/datafile/ces01.dbf
+DATA/fhacdb/datafile/hanwang01.dbf
+DATA/fhacdb/datafile/hanlong01.dbf
+DATA/fhacdb/datafile/xingzhen01.dbf

2.创建DIRECTORY

SQL> create directory from_asm as '+DATA/fhacdb/datafile';

Directory created.

3.创建及测试DBLINK

SQL> create database link fhac connect to dbdream identified by dbdream using '192.168.20.101/fhacdb';

Database link created.
SQL> select * from tab@fhac;

no rows selected

4.利用DBMS_FILE_TRANSFER的PUT_FILE传输数据文件

SQL> exec dbms_file_transfer.put_file('FROM_ASM','authsystem01.dbf','ASM_DIR','authsystem01.dbf','FHAC');

PL/SQL procedure successfully completed.

DBMS_FILE_TRANSFER的PUT_FILE和GET_FILE比COPY_FILE多了一个参数(DBLINK NAME),以上参数依次为:本地DIRECTORY_NAME、要传输的本地文件名、目标DIRECTORY_NAME、传输到目标服务器上保留的文件名、数据链名。
5.验证文件是否正确传输

[oracle@dbserver1 ~]$ su - grid
Passwd:
[grid@dbserver1 ~]$
[grid@dbserver1 ~]$ asmcmd
ASMCMD> cd DATA/FHACDB/DATAFILE
ASMCMD> ls auth*
authsystem01.dbf

DBMS_FILE_TRANSFER的PUT_FILE和GET_FILE和FTP有些类似,PUT_FILE是将本地文件上传到远端服务器,GET_FILE是将远端服务器的文件下载到本地服务器,下面演示下GET_FILE的用法:
1.建议DIRECTORY由于之前的实验已经建立了DIRECTORY,这里仍使用之前的DIRECTORY,不再单独建立。
2.创建DBLINK

SQL> create database link fhac_105 connect to dbdream identified by dbdream using 'fhacdb';

Database link created.

3.下载文件

SQL> exec dbms_file_transfer.get_file('FROM_ASM','ces01.dbf','fhac_105','ASM_DIR','ces01.dbf');

PL/SQL procedure successfully completed.

GET_FILE的参数顺序和PUT_FILE不同,这里的参数依次为:远端DIRECTORY_NAME、要下载的远端文件名、数据链名、本地DIRECTORY_NAME、下载到本地保留的文件名。
4.验证文件是否下载

[oracle@dbserver1 admin]$ su - grid
Passwd:
[grid@dbserver1 ~]$ asmcmd
ASMCMD> cd data/fhacdb/datafile
ASMCMD> ls ces*
ces01.dbf

 

本文固定链接: http://www.dbdream.com.cn/2012/07/%e5%88%a9%e7%94%a8dbms_file_transfer%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e5%92%8casm%e9%97%b4%e6%8b%b7%e8%b4%9d%e6%95%b0%e6%8d%ae%e6%96%87%e4%bb%b6/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2012年07月12日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 利用dbms_file_transfer实现文件系统和ASM间拷贝数据文件及从ASM到远端ASM文件传输 | 信春哥,系统稳,闭眼上线不回滚!
关键字: , , ,

利用dbms_file_transfer实现文件系统和ASM间拷贝数据文件及从ASM到远端ASM文件传输:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter