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

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨

💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️

💖💖💖大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注💖💖💖

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

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

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

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


                  

目录

方式一: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@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磁盘组,那么数据文件会自动生成后缀

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

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

                              

方式二: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自动管理的,因为是自定义的后缀名

                                

方式三: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]$ ll

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

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

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

  • 31
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈斯DBA

打赏到账,我飘啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值