Oracle 11 g2 版本下,duplicating a database 有两种方法:

1. Active database duplication

2. Backup-based duplication

通过duplicate 一个数据库的好处在于:

Test backup and recovery procedures

Test an upgrade to a new release of Oracle Database

Test the effect of applications on database performance

Create a standby database

Generate reports

先学习基于Backup-based duplication ,比较好理解一些,测试环境:异机同目录

环境准备前提:

现在有两台oracle server,一台:192.168.1.249  一台:192.168.1.248

192.168.1.249 作为primary A192.168.1.248上就作为auxiliary B

为了操作的便捷,我就以auxiliary B为主要操作点来完成duplicate操作

一:在primary A上操作

现在呢,就通过dbca来创建一个新的oracle database_nameSID,也是再通观的学习下oracle 创建表和插入数据

通过dbca,会默认创建一个表空间和临时表空间,测试的就不再创建表空间了,创建表空间的语法:

create tablespace 空间名称 datafile ' 数据文件的路径'  大小 size 200m ;  

创建一个表:

create table employees (employee_id number(6), first_name varchar2(20),last_name varchar2(25),phone_number varchar2(15),salary  number(8,2),department_id number(4), constraint emp_salary_min check (salary > 0) );

在创建表的过程中插入了一些约束

插入数据:

insert into  employees (employee_id,first_name,last_name,phone_number,salary,department_id) values (1189,'wang','ying',18920782475,4900,2);

insert into  employees (employee_id,first_name,last_name,phone_number,salary,department_id) values (1109,'zhang','ying',18920482475,4900,3);

随意插入两条数据就好了,证明表里有数据就好

二:启动监听和打开数据库:

分别执行:

Lsnrctl start

Sqlplus / as sysdba

Startup;

三:在B上通过netmgr实现远程库A的访问,也就是修改

/opt/oracle/product/11.2.0/dbhome_1/network/admin下的

Tnsnames.oralistener.ora 文件

Netmgr

配置listener

ORACLE 11G 之Rman Duplicating a database_第1张图片

ORACLE 11G 之Rman Duplicating a database_第2张图片



之后点击关闭窗口,保存退出

之后来尝试下是否在B server上能连接到Aserver上的test05

[oracle@test1 ~]$ rman

RMAN> connect target sys/biao_123@test05;

RMAN 连接的格式是:   username/password@监听名(就是上步netmgr建立的到A库上的监听名称)

connected to target database: TEST05 (DBID=4183336084 (表示连接成功)

注意:如果这一步,你不记得在安装database的时候,记录的syssystem的密码的话,解决办法:

在目标数据库上,在操作系统的级别登陆数据库是不需要密码的

所以可以使用sqlplus / as sysdba (登录)

更改user syssystem的密码

Alter user sys identified by 密码; 这个密码尽量不要含有‘点号’字符

四:对主库做备份,完整备份

备份脚本:

 run {

       ########backup databse datafile####

       allocate channel ch1 type disk

       maxpiecesize=4G;

       crosscheck backup;

       delete expired backup;

       backup

       incremental level 0 database

       tag 'full_weekly_backup' format '/opt/oracle/rman/backup/dbf_%n_%I_%U.bkp';

       delete obsolete;

       #########backup archive log #####

       sql " alter system archive log current";

       backup

       archivelog all

       format '/opt/oracle/rman/backup/arc_%n_%I_%U.arch'

       delete  all input;

       delete obsolete;

       release channel ch1 ;

       }

这个是大致写了一点的备份脚本,通过RMAN去执行RUN就可以了

在主库A上创建PFILE

Sqlplus登录

Create pfile from spfile (创建test05 库的PFILE文件 inittest05.ora ),之后将这个文件同步到auxiliary B上:路径?/dbs/下 (如果没有这个文件,auxiliary B上无法识别到test05 这个数据库)

问号?代表的是ORACLE_HOME

需要将备份后的文件同步到auxiliary B上,所以需要在B上创建和A一样的rman路径

注意:因为我们之前插入的数据很少,数据文件很少,通过scp copy就行了。如果是正式的数据库的话,你备份的文件可能是几十GB,甚至会上T,这样的话,基于RMAN-Based duplicate 一个数据库就会占用很多的资源,这个问题等下我们会讲述到,

五:配置auxiliary B

创建和primary A库一样的备份路径

Mkdir -p /opt/oracle/rman/backup

Mkdir -p /opt/oracle/oradata/test05 (数据库 文件的存放位置)

mkdir -p /opt/oracle/admin/test05/{pfile,adump,bdump}

primary A上刚才RMAN备份的文件全部copy过来(这一步是必须要的)

之后,就是要通过RMAN 来进行duplicate

在此之前,需要将auxiliary B 将数据库置于nomount状态

shutdown immediate

startup nomount pfile=?/dbs/inittest05.ora;

使用RMAN

RMAN> connect target sys/biao_123@test05; (连接到主库上)

connected to target database: TEST05 (DBID=4183336084)

RMAN> connect auxiliary / ;auxiliary 标记)

connected to auxiliary database: TEST05 (not mounted)

DUPLICATE CASE

duplicate target database to test05 nofilenamecheck

Logfile

/opt/oracle/oradata/test05/redo1.dbf size 50m,

/opt/oracle/oradata/test05/redo2.dbf size 50m;   (回车就会执行)

如果RMAN备份的文件很大的话,这个执行的时间是比较长的

duplicate 日志的输出过程中:

  Alter clone database open resetlogs;

说明在duplicate的过程中已经对database进行 resetlogs了,这里指的是archive log 都会清空

executing Memory Script

database opened  (数据库已经打开,通过SQL*PLUS 可以直接操作)

Finished Duplicate Db at 07-AUG-13

以上的日志输出表示我们的操作时正确的,成功的

下面就是在auxiliary B上使用SQL * PLUS操作 auxiliary test05 库了

这样,基于RMAN-based 操作就完成了

错误解决一:

[oracle@test1 ~]$ netmgr

Xlib: connection to ":0.0" refused by server

Xlib: No protocol specified

Exiting

java.lang.NullPointerException

解决办法:切换到root 账户下,执行命令

[ root@test1 rman]# export DISPLAY=:0.0

[root@test1 rman]# xhost  +

access control disabled, clients can connect from any host (提示这个是正确的)

之后再切换到oracle账户下,执行netmgr

错误解决二:

ORA-19504: failed to create file "/opt/oracle/oradata/test05/system01.dbf"

ORA-27040: file create error, unable to create file

Linux-x86_64 Error: 2: No such file or directory

failover to previous backup

这个错误表示,一要么是没有空间,要么是没有恰当的权限

没有权限的话呢

Mkdir -p /opt/oracle/oradata/test05

Chown -R oracle:oinstall /opt/oracle/test05

错误解决三:

ORA-09925: Unable to create audit trail file

解决办法:

mkdir -p /opt/oracle/admin/test05/{pfile,adump,bdump}

运维转DBA,新手学习交流群:329638713