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 A, 192.168.1.248上就作为auxiliary B
为了操作的便捷,我就以auxiliary B为主要操作点来完成duplicate操作
一:在primary A上操作
现在呢,就通过dbca来创建一个新的oracle database_name和SID,也是再通观的学习下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.ora 和listener.ora 文件
Netmgr
配置listener
之后点击关闭窗口,保存退出
之后来尝试下是否在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的时候,记录的sys、system的密码的话,解决办法:
在目标数据库上,在操作系统的级别登陆数据库是不需要密码的
所以可以使用sqlplus / as sysdba (登录)
更改user sys和system的密码
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