共计 10463 个字符,预计需要花费 27 分钟才能阅读完成。
要使用 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 避免了导入和导出元数据与传输元数据这也能节省了时间。
————————————– 推荐阅读 ————————————–
RMAN 备份时遭遇 ORA-19571 http://www.linuxidc.com/Linux/2015-07/120409.htm
RMAN 配置归档日志删除策略 http://www.linuxidc.com/Linux/2013-11/92670.htm
Oracle 基础教程之通过 RMAN 复制数据库 http://www.linuxidc.com/Linux/2013-07/87072.htm
RMAN 备份策略制定参考内容 http://www.linuxidc.com/Linux/2013-03/81695.htm
RMAN 备份学习笔记 http://www.linuxidc.com/Linux/2013-03/81892.htm
Oracle 数据库备份加密 RMAN 加密 http://www.linuxidc.com/Linux/2013-03/80729.htm
RMAN 备份时遇到 ORA-19588 http://www.linuxidc.com/Linux/2015-07/120410.htm
————————————– 分割线 ————————————–
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-04/130340.htm