要使用rman增量备份来更新传输表空间需要了解传输表空间与rman的增量备份。这里主要介绍使用增量备份来更新传输表空间,就不介绍传输表空间与rman增量备份。下面是使用rman增量备份来更新传输表空间的操作。目标主机是weblogic29,原主机是weblogic28。
1.在两台数据库服务器上配置NFS
配置/etc/exports
nfs允许挂载的目录及权限需在文件/etc/exports中进行定义。例如,我们要将数据文件所在目录
/u01/app/oracle/oradata/jytest/与/backup目录共享出来,那么我们需要编辑/etc/exports文件,追加两行
/u01/app/oracle/oradata/jytest/ *(rw,sync) /backup/ *(rw,sync)
[root@weblogic29 oracle]# vi /etc/exports /u01/app/oracle/oradata/jytest/ *(rw,sync) /backup/ *(rw,sync)
启动nfs服务
[root@weblogic29 oracle]# service portmap start Starting portmap: [ OK ] [root@weblogic29 oracle]# service nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ]
在客户端主机上挂载共享目录
[root@weblogic28 ~]# service portmap start Starting portmap: [ OK ] [root@weblogic28 ~]# service nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ]
在客户端使用showmount -e IP 查看nfs主机共享情况:
[root@weblogic28 ~]# showmount -e 10.138.130.29 Export list for 10.138.130.29: /backup * /u01/app/oracle/oradata/jytest *
在客户端建立NFS文件夹并执行mount挂载命令:
[root@weblogic28 ~]# mkdir /jytest_data [root@weblogic28 ~]# mkdir /backup [root@weblogic28 ~]# chown -R oracle:oinstall /jytest_data [root@weblogic28 ~]# chown -R oracle:oinstall /backup [root@weblogic28 ~]# chmod -R 777 /jytest_data [root@weblogic28 ~]# chmod -R 777 /backup [root@weblogic28 ~]# mount -t nfs 10.138.130.29:/u01/app/oracle/oradata/jytest /jytest_data [root@weblogic28 ~]# mount -t nfs 10.138.130.29:/backup /backup [root@weblogic28 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 240G 158G 71G 70% / /dev/sda1 190M 12M 169M 7% /boot tmpfs 16G 0 16G 0% /dev/shm 10.138.130.29:/u01/app/oracle/oradata/jytest 240G 22G 206G 10% /jytest_data 10.138.130.29:/backup 240G 22G 206G 10% /backup
2.在源数据库中创建一个表空间jytest与用户jytest
SQL> create tablespace jytest datafile '/u01/app/oracle/oradata/jytest/jytest01.dbf' size 5M autoextend off extent management local segment space management auto; Tablespace created. SQL> create user jytest identified by "jytest" default tablespace jytest temporary tablespace temp; User created. SQL> grant connect,dba,resource to jytest; Grant succeeded. SQL> conn jytest/jytest Connected. SQL> create table t1 as select * from dba_tables; Table created. SQL> select count(*) from t1; COUNT(*) ---------- 1607 SQL> insert into t1 select * from t1; 1607 rows created. SQL> insert into t1 select * from t1; 3214 rows created. SQL> insert into t1 select * from t1; 6428 rows created. SQL> commit; Commit complete.
3.将原数据库的jytest表空间设置为只读模式
SQL> alter tablespace jytest read only; Tablespace altered.
4.对原数据库中的表空间jytest使用rman生成镜像副本并存储在NFS所挂载的/jytest_data目录中
[oracle@weblogic28 ~]$ rman target/ Recovery Manager: Release 10.2.0.5.0 - Production on Wed Apr 13 12:36:05 2016 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: JYTEST (DBID=3911337604) RMAN> run 2> { 3> allocate channel c1 type disk format '/jytest_data/jytest01.dbf'; 4> backup incremental level 1 tag "INCR_JYTEST" for recover of copy with tag "INCR_JYTEST" tablespace jytest; 5> } using target database control file instead of recovery catalog allocated channel: c1 channel c1: sid=157 devtype=DISK Starting backup at 13-APR-16 WARNING: TAG INCR_JYTEST option is ignored; backups will be tagged with INCR_JYTEST no parent backup or copy of datafile 8 found channel c1: starting datafile copy input datafile fno=00008 name=/u01/app/oracle/oradata/jytest/jytest01.dbf output filename=/jytest_data/jytest01.dbf tag=INCR_JYTEST recid=2 stamp=909059896 channel c1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 13-APR-16 released channel: c1
虽然这里使用的是incremental level 1,因为这里不存在表空间数据文件jytest01.dbf的0级增量副本,因此会创建一个0级增量副本文件。
SQL> alter tablespace jytest read write; Tablespace altered.
5.将表空间jytest附加到目标数据库
SQL> create or replace directory test_dump as '/backup/'; Directory created. SQL> grant read,write on directory test_dump to public; Grant succeeded. ' SQL> create public database link dblink_jytest 2 connect to jytest identified by "jytest" 3 using '(DESCRIPTION = 4 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.138.130.28)(PORT = 1521)) 5 (CONNECT_DATA = 6 (SERVICE_NAME = jytest) 7 ) 8 )'; Database link created. SQL> select count(*) from t1@dblink_jytest; COUNT(*) ---------- 12856 [oracle@weblogic29 jytest]$ impdp jytest/jytest directory=test_dump network_link=dblink_jytest transport_tablespaces=jytest transport_full_check=n transport_datafiles=\'/u01/app/oracle/oradata/jytest/jytest01.dbf\' Import: Release 10.2.0.5.0 - 64bit Production on Wednesday, 13 April, 2016 14:47:43 Copyright (c) 2003, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Starting "JYTEST"."SYS_IMPORT_TRANSPORTABLE_01": jytest/******** directory=test_dump network_link=dblink_jytest transport_tablespaces=jytest transport_full_check=n transport_datafiles='/u01/app/oracle/oradata/jytest/jytest01.dbf' Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Job "JYTEST"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 14:47:48 SQL> show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ compatible string 10.2.0.3.0 SQL> select count(*) from jytest.t1; COUNT(*) ---------- 12856
6.将表空间jytest从目标数据库中删除,但保留数据文件
SQL> drop tablespace jytest including contents; Tablespace dropped.
7.将原数据库中的表空间jytest联机,继续向表t1插入记录
SQL> alter tablespace jytest read write; Tablespace altered. SQL> insert into t1 select * from t1; insert into t1 select * from t1 * ERROR at line 1: ORA-01653: unable to extend table JYTEST.T1 by 128 in tablespace JYTEST
由于表空间jytest没有空间了,如是向表这僮jytest增加一个数据文件jytest02.dbf来增加表空间
SQL> alter tablespace jytest add datafile '/u01/app/oracle/oradata/jytest/jytest02.dbf' size 5M; Tablespace altered. SQL> insert into t1 select * from t1; 12856 rows created. SQL> commit; Commit complete. SQL> select count(*) from t1; COUNT(*) ---------- 25712
8.如果自上次增量备份以后原数据库表空间jytest增加了新的数据文件,因此执行以下命令来为新增加的数据文件创建镜像副本。
SQL> alter tablespace jytest read only; Tablespace altered. SQL> select file#,name from v$datafile; FILE# NAME ---------- ------------------------------------------------------------------------- 1 /u01/app/oracle/oradata/jytest/system01.dbf 2 /u01/app/oracle/oradata/jytest/undotbs01.dbf 3 /u01/app/oracle/oradata/jytest/sysaux01.dbf 4 /u01/app/oracle/oradata/jytest/users01.dbf 5 /u01/app/oracle/oradata/jytest/example01.dbf 6 /u01/app/oracle/oradata/jytest/tspitr01.dbf 7 /u01/app/oracle/oradata/jytest/test01.dbf 8 /u01/app/oracle/oradata/jytest/jytest01.dbf 9 /u01/app/oracle/oradata/jytest/jytest02.dbf 9 rows selected. RMAN> run 2> { 3> allocate channel c1 type disk format '/jytest_data/jytest02.dbf'; 4> backup incremental level 1 tag "INCR_JYTEST" for recover of copy with tag "INCR_JYTEST" datafile 9; 5> } allocated channel: c1 channel c1: sid=141 devtype=DISK Starting backup at 13-APR-16 WARNING: TAG INCR_JYTEST option is ignored; backups will be tagged with INCR_JYTEST no parent backup or copy of datafile 9 found channel c1: starting datafile copy input datafile fno=00009 name=/u01/app/oracle/oradata/jytest/jytest02.dbf output filename=/jytest_data/jytest02.dbf tag=INCR_JYTEST recid=4 stamp=909069392 channel c1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 13-APR-16 released channel: c1
9.对原数据库执行RMAN增量备份并使用目标数据库文件目录中的数据文件与其合并,因些创建一组
新的数据文件
RMAN> run 2> { 3> allocate channel c1 type disk format '/jytest_data/jytest01_%t.dbf'; 4> allocate channel c2 type disk format '/jytest_data/jytest02_%t.dbf'; 5> backup incremental level 1 tag "INCR_JYTEST" for recover of copy with tag "INCR_JYTEST" tablespace jytest; 6> recover copy of tablespace jytest with tag "INCR_JYTEST"; 7> } allocated channel: c1 channel c1: sid=141 devtype=DISK allocated channel: c2 channel c2: sid=139 devtype=DISK Starting backup at 13-APR-16 WARNING: TAG INCR_JYTEST option is ignored; backups will be tagged with INCR_JYTEST channel c1: starting incremental level 1 datafile backupset channel c1: specifying datafile(s) in backupset input datafile fno=00008 name=/u01/app/oracle/oradata/jytest/jytest01.dbf channel c1: starting piece 1 at 13-APR-16 channel c2: starting incremental level 1 datafile backupset channel c2: specifying datafile(s) in backupset input datafile fno=00009 name=/u01/app/oracle/oradata/jytest/jytest02.dbf skipping datafile 00009 because it has not changed channel c2: backup cancelled because all files were skipped channel c1: finished piece 1 at 13-APR-16 piece handle=/jytest_data/jytest01_909069660.dbf tag=INCR_JYTEST comment=NONE channel c1: backup set complete, elapsed time: 00:00:01 Finished backup at 13-APR-16 Starting recover at 13-APR-16 channel c1: starting incremental datafile backupset restore channel c1: specifying datafile copies to recover recovering datafile copy fno=00008 name=/jytest_data/jytest01.dbf channel c1: reading from backup piece /jytest_data/jytest01_909069660.dbf channel c1: restored backup piece 1 piece handle=/jytest_data/jytest01_909069660.dbf tag=INCR_JYTEST channel c1: restore complete, elapsed time: 00:00:02 Finished recover at 13-APR-16 released channel: c1 released channel: c2
10.将表空间jytest重新附加到目标数据库中
[oracle@weblogic29 jytest]$ impdp jytest/jytest directory=test_dump network_link=dblink_jytest transport_tablespaces=jytest transport_full_check=n transport_datafiles=\'/u01/app/oracle/oradata/jytest/jytest01.dbf\',\'/u01/app/oracle/oradata/jytest/jytest02.dbf\' Import: Release 10.2.0.5.0 - 64bit Production on Wednesday, 13 April, 2016 15:50:37 Copyright (c) 2003, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Starting "JYTEST"."SYS_IMPORT_TRANSPORTABLE_01": jytest/******** directory=test_dump network_link=dblink_jytest transport_tablespaces=jytest transport_full_check=n transport_datafiles='/u01/app/oracle/oradata/jytest/jytest01.dbf','/u01/app/oracle/oradata/jytest/jytest02.dbf' Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Job "JYTEST"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 15:50:42 SQL> select count(*) from jytest.t1; COUNT(*) ---------- 25712 SQL> alter tablespace jytest read write; Tablespace altered.
与原数据库中表t1记录数一样,说明增量更新传输表空间成功。
总结:使用增量备份来前更新数据文件要比复制整个数据文件所花的时间少。这里使用了NFS来执行数据文件的传输避免了使用ftp等方式传输文件,使用impdp network_link避免了导入和导出元数据与传输元数据这也能节省了时间。