Oracle篇—数据文件在ASM磁盘和本地系统之间的互相拷贝

    在Oracle运维工作中,我们时常需要面对各种挑战,其中之一就是把数据文件从ASM磁盘组复制到文件系统中,或者反过来,进行一些必要的维护操作。这就像是在玩一场复杂的数据转移游戏,需要精确的操作和细致的观察力。为了确保数据的完整性和安全性,我们必须小心翼翼,不容有失。

    大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注。今天给大家带来三种方式实现拷贝文件的方式进行操作:

  • rman的convert datafile
  • ASMCMD工具中的cp命令(11g)
  • dbms_file_transfer包

注意:上述的方式只做拷贝数据库,不会通知控制文件设置为新的路径。

方式一:rman的convert datafile

    虽然convert这个命令主要用于跨平台传输表空间,但它也可以完成ASM和本地文件系统间拷贝文件,并且是不会通知控制文件设置为新的路径,只做拷贝。

1)从ASM数据文件拷贝到本地文件系统

[root@rac1 ~]# cd /home/oracle/

[root@rac1 oracle]# mkdir bbed

[root@rac1 oracle]# chown oracle:oinstall bbed      ---convert datafile属于rman的命令,rman是在oracle用户下的,所以对应的权限需要时oracle的,oracle:oinstall

RMAN> report schema;   ---显示目标实例的信息

RMAN> convert datafile '+DATA/orcl/datafile/liu.370.1153723063' format '/home/oracle/bbed/liu.370.1153723063';

Oracle篇—数据文件在ASM磁盘和本地系统之间的互相拷贝_第1张图片

[oracle@rac1 bbed]$ cd /home/oracle/bbed/

[oracle@rac1 bbed]$ ll

 

2)从本地文件系统的数据文件拷贝到ASM磁盘组 

RMAN> convert datafile '/home/oracle/bbed/liu.370.1153723063' format '+data';     ---指定为+data ASM磁盘组,那么数据文件会自动生成后缀

Oracle篇—数据文件在ASM磁盘和本地系统之间的互相拷贝_第2张图片

 RMAN> report schema;     ---只做拷贝,不会通知控制文件设置为新的路径

Oracle篇—数据文件在ASM磁盘和本地系统之间的互相拷贝_第3张图片

ASMCMD> cd +data/orcl/datafile

ASMCMD> ls -l            ---liu.298.1153748215文件为拷贝过来的新文件,自动生成后缀

Oracle篇—数据文件在ASM磁盘和本地系统之间的互相拷贝_第4张图片

方式二:ASMCMD工具中的cp命令(11g)

    10gR2在ASM实例中,存储于ASM磁盘组的文件对于操作系统命令而言是不可访问的,可以使用asmcmd工具来替代操作系统命令来更好的完成ASM实例的管理工作。11g之后才能直接将asm管理的所有文件直接copy到文件系统中。

1)从ASM数据文件拷贝到本地文件系统

[root@rac1 ~]# cd /home/oracle/

[root@rac1 oracle]# mkdir bbed

[root@rac1 oracle]# chown grid:oinstall bbed      ---cp属于asmcmd的命令,asmcmd是在grid用户下的,所以对应的权限需要是grid的,grid:oinstall

[grid@rac1 ~]$ asmcmd

ASMCMD> cd +data/orcl/datafile

ASMCMD> cp +data/orcl/datafile/LIU.370.1153723063 /home/oracle/bbed/LIU.370.1153723063

[root@rac1 bbed]# cd /home/oracle/bbed/

[root@rac1 bbed]# ll

2)从本地文件系统的数据文件拷贝到ASM磁盘组

ASMCMD> cp /home/oracle/bbed/LIU.370.1153723063 +data/orcl/datafile/LIU.370.dbf    --通过cp的方式拷贝到ASM时,必须需要指定后缀名,不指定后缀名是不能进行拷贝的,就是下面的操作都会报错:is not in single-file creation form。

     ASMCMD> cp /home/oracle/bbed/LIU.370.1153723063 +data  

     ASMCMD> cp /home/oracle/bbed/LIU.370.1153723063 +data/orcl/

     ASMCMD> cp /home/oracle/bbed/LIU.370.1153723063 +data/orcl/datafile/   

ASMCMD> ls -l         ---不是ASM自动管理的,因为是自定义的后缀名

Oracle篇—数据文件在ASM磁盘和本地系统之间的互相拷贝_第5张图片

方式三:dbms_file_transfer包

    从Oracle 9i开始提供的,利用这个包可以在两个位置之间传输文件,这两个位置可以是同一台计算机或者网络上的两台计算机。Oracle 10g扩展了这个包的功能,可以完成从一个ASM Diskgroup拷贝到另一个ASM Diskgroup、从ASM Diskgroup拷贝到普通文件系统、从普通文件系统拷贝到ASM Diskgroup、从文件系统拷贝到文件系统或者RAW Device。这个包提供了3个方法,可以完成不同的任务。

功能说明

copy_file

完成文件从本地一个目录拷贝到本地的另一个目录,这个方法不能完成远程传输

get_file

这个方法完成把远程的文件拷贝到本地的目录中,类似于下载

put_file

这个方法完成本地文件传送到远程的目的,类似于上传

1)从ASM数据文件拷贝到本地文件系统

[root@rac1 ~]# cd /home/oracle/

[root@rac1 oracle]# mkdir bbed

[root@rac1 oracle]# chown oracle:oinstall bbed      ---dbms_file_transfer包属于SQL命令,SQL执行是在oracle用户下的,所以对应的权限需要时oracle的,oracle:oinstall

SQL> create or replace directory asm_dir as '+data/orcl/datafile/';      ---ASM磁盘组目录

SQL> create or replace directory os_dir as '/home/oracle/bbed/';       ---文件系统目录

SQL> exec dbms_file_transfer.copy_file('asm_dir','LIU.370.1153723063','os_dir','LIU.370.1153723063');

---括号中的分别是('源目录','文件名称','复制到哪个目录,就是目的目录','复制后的名称')

[oracle@rac1 bbed]$ cd /home/oracle/bbed/

[oracle@rac1 bbed]$ l

2)从本地文件系统的数据文件拷贝到ASM磁盘组

SQL> exec dbms_file_transfer.copy_file('os_dir','LIU.370.1153723063','asm_dir','LIU.370.dbf');             ---括号中的分别是('源目录','文件名称','复制到哪个目录,就是目的目录','复制后的名称')

ASMCMD> ls -l         ---不是ASM自动管理的,因为是自定义的后缀名

 Oracle篇—数据文件在ASM磁盘和本地系统之间的互相拷贝_第6张图片

你可能感兴趣的:(Oracle,oracle,数据库)