在Oracle运维工作中,我们时常需要面对各种挑战,其中之一就是把数据文件从ASM磁盘组复制到文件系统中,或者反过来,进行一些必要的维护操作。这就像是在玩一场复杂的数据转移游戏,需要精确的操作和细致的观察力。为了确保数据的完整性和安全性,我们必须小心翼翼,不容有失。
大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注。今天给大家带来三种方式实现拷贝文件的方式进行操作:
注意:上述的方式只做拷贝数据库,不会通知控制文件设置为新的路径。
虽然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文件为拷贝过来的新文件,自动生成后缀
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 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自动管理的,因为是自定义的后缀名