准备工作:
主库装好oracle软件,并建库,备库只装软件
修改hosts文件
关闭防火墙
主库:
开启force强制日志模式:
SQL>
alter database force logging;
select force_logging from v$database;
开启归档
主备库都要建立归档日志目录:mkdir /u01/archivelog
SQL>
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
alter system set log_archive_dest_1='location=/u01/archivelog/';
archive log list ;
查询主库状态:
SQL>
select instance_name,status from v$instance;
查询主库参数:
SQL>
show parameter name
修改主库的tnsnames.ora文件:
#
cd $ORACLE_HOME/network/admin
cat tnsnames.ora
DG1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DG1)
)
)
DG2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DG2)
(UR = A)
)
)
将tnsname.ora传到备库
#
scp tnsname.ora dg2:$ORACLE_HOME/network/admin/
修改主库密码文件,并传到备库上:
#
cd $ORACLE_HOME/dbs
orapwd file=orapwdg password=redhat entries=3 force=y;
查询sid
env|grep ora
创建alert日志的软连接:
ln -s /u01/app/oracle/diag/rdbms/dg1/dg/trace/alert_dg.log /u01/alert.log
tailf /u01/alert.log
查询主库参数:
SQL> show parameter name;
修改主库参数,并传到备库:
alter system set log_archive_config='DG_CONFIG=(dg1,dg2)';
alter system set log_archive_dest_1="LOCATION=/u01/app/oracle/archivelog/ LGWR VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG1";
alter system set log_archive_dest_2="SERVICE=DG2 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DG2";
alter system set log_archive_dest_state_1=enable scope=both;
alter system set log_archive_dest_state_2=defer scope=both;
alter system set standby_file_management='AUTO';
alter system set fal_server=dg2 scope=both;
alter system set db_file_name_convert="/u01/app/oracle/oradata/dg1","/u01/app/oracle/oradata/dg1" scope=spfile;
alter system set log_file_name_convert="/u01/app/oracle/oradata/dg1","/u01/app/oracle/oradata/dg1" scope=spfile;
生成参数文件,并传给备库:
SQL>
create pfile from spfile;
#
scp $ORACLE_HOME/dbs/initdg.ora dg2:$ORACLE_HOME/dbs/
全量备份主库:
#
主备库都要建立备份目录mkdir /u01/rmanbak/
rman target /
run
{
allocate channel c0 device type disk;
allocate channel c1 device type disk;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/rmanbak/%F';
backup database format '/u01/rmanbak/ora11g_full_db_%d_%T_%u.bak';
BACKUP ARCHIVELOG ALL FORMAT '/u01/rmanbak/ora11g_arc_%s_%p_%t.bak';
}
查询是否有控制文件的备份:
list backup of controfile;
将备份文件传输的备库:
scp /u01/rmanbak/* dg2:/u01/rmanbak/
备库:
编辑备库参数文件:
此处应添加db_unique_name=DG2
其他几个按需要改。
备库启动监听:
lsnrctl start
链接alert日志:
ln -s /u01/app/oracle/diag/rdbms/dg1/dg/trace/alert_dg.log /u01/alert.log
开启备库到nomount
SQL>
startup nomout;
!lsnrctl status
主库操作:
rman target /
connect auxiliary sys/redhat@dg2
duplicate target database for standby nofilenamecheck;
过程中持续看alert日志,若报错,则是initdg.ora文件参数设置问题,修改后,重新开始,若还不行,则用下面的命令
duplicate target database for standby nofilenamecheck;
添加主备库的standby日志
alter database add standby logfile group 11 '/u01/app/oracle/oradata/dg1/standby11.log' size 300M;
alter database add standby logfile group 12 '/u01/app/oracle/oradata/dg1/standby12.log' size 300M;
alter database add standby logfile group 13 '/u01/app/oracle/oradata/dg1/standby13.log' size 300M;
alter database add standby logfile group 14 '/u01/app/oracle/oradata/dg1/standby14.log' size 300M;
alter database add standby logfile group 15 '/u01/app/oracle/oradata/dg1/standby15.log' size 300M;
查询:
SQL> select member from v$logfile ;
查询主备库:
select database_role from v$database;
主库开启日志:
SQL>
show parameter log_archive_dest_state_;
alter system set log_archive_dest_state_2=enable scope=both;
开启备库
SQL>
alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database cancel;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
测试:
主库添加
SQL>
create table t1 (id int);
insert into t1 values(2);
commit;
归档一份日志
alter system switch logfile;