大致有这三种方式创建standby库
方式一:用rman的方式生成standby. (用rman的duplice方式直接创建,无须先备份)
方式二:用rman的restore方式生成。(先用rman全备份主库后,再用rman通过restore的方式创建)
方式三:用cp的方式生成 (关闭主库后,复制控件文件,密码文件,数据文件到备库所在位置)
我主要在这用duplice方式,优点无须多说,假设你的 数据库上T,你会选哪种方法?
Oracle测试版本为11g;
1. 设置好主备库的环境变量,及创建好相关目录
主库:
su - oracle --归档日志存放目录 --例子放在/u01/app/oracle/archivelog/xcldb 下 mkdir -p $ORACLE_BASE/archivelog/$ORACLE_SID环境变量注意下面两个参数:
ORACLE_SID=xcldb
ORACLE_UNQNAME=xcldb
备库:
su - oracle
--生成相关的目录,还要注意下权限, 另11g就这几个,10G还有几个目录
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/{adump,bdump,cdump,dpdump,udump,pfile}
--数据库所在目录
mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID
--闪回
mkdir -p $ORACLE_BASE/flash_recovery_area/$ORACLE_SID
--归档日志存放目录
mkdir -p $ORACLE_BASE/archivelog/$ORACLE_SID环境变量注意下面两个参数:
ORACLE_SID=xcldbdg
ORACLE_UNQNAME=xcldbdg
2. 设置数据库为归档模式
--查看当前模式 archive log list --设定归档日志的路径,可以生成多份一样的日志,保存多个位置,以防丢失 --如果没设置,默认会设到$ORACLE_HOME/dbs下。 alter system set log_archive_dest_1='location=/u01/app/oracle/archivelog/xcldb'; shutdown immediate startup mount alter database archivelog; archive log list;
3.设置force logging 强制日志模式
alter database force logging select force_logging from v$database; --取消此模式:alter database no force logging; --手工切换日志,好生成归档日志 alter system switch logfile --执行个三次 select name from v$archived_log; --查看已有的日志文件 select * from v$logfile;
4.创建Standby redo log
创建个数建议公式:
(maximum number of logfiles for each thread + 1) * maximum number of threads
--找到最大的group#,因为group#不能重复 select max(group#) from v$log; --可用这两条查询看到组号及文件大小, 11g默认是52428800 SELECT GROUP#, BYTES FROM V$LOG; SELECT GROUP#, BYTES FROM V$STANDBY_LOG; --注意下大小一致,我是测试,没管size alter database add standby logfile thread 1 group 11 '/u01/app/oracle/oradata/xcldb/redo11.log' size 50m; alter database add standby logfile thread 1 group 12 '/u01/app/oracle/oradata/xcldb/redo12.log' size 50m; alter database add standby logfile thread 1 group 13 '/u01/app/oracle/oradata/xcldb/redo13.log' size 50m; alter database add standby logfile thread 1 group 14 '/u01/app/oracle/oradata/xcldb/redo14.log' size 50m;
注意:
在add standby logfile 时,如果是单实例数据库thread 1可以不加,但如果是RAC数据库,
则要分别为每个实例各增加相关的Standby log;
另外如果是用OMF管理的可用下面的命令创建:
alter database add standby logfile thread 1 group 11 size 500m;
验证下成果:
col member format a50
select group#, type, member from v$logfile where type = 'STANDBY';
5.在主库创建standby的控制文件,并复制过到备库所在服务器
startup mount;
alter database create standby controlfile as '/home/oracle/xcldbdg.ctl';
alter database open;
scp /home/oracle/xcldbdg.ctl 172.18.2.34:/home/oracle/
6.批量更改主库的参数,设置成dg方式。
a. vi /home/oracle/dgsetprimary.sql
--------------------------------------------------- set serveroutput on; --alter system set db_unique_name='xcldb' scope=spfile; alter system set log_archive_config='dg_config=(xcldb,xcldbdg)'; alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog/xcldb VALID_FOR=(all_logfiles,all_roles) db_unique_name=xcldb'; alter system set log_archive_dest_2='service=xcldbdg LGWR ASYNC NOAFFIRM valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=xcldbdg'; alter system set log_archive_dest_state_1='enable'; alter syst