配置网络连通
vi /etc/hosts
主机创建/查看归档目录,创建备库在线日志目录
mkdir /u02/oradata/ann01/archive_log mkdir /u02/oradata/ann01/standby
在备机上创建相关目录(保证如下几项与主库一致)
mkdir $ORACLE_BASE/admin mkdir $ORACLE_BASE/admin/ann01 mkdir $ORACLE_BASE/admin/ann01/{a,b,c,u,dp}dump(此项11G有所不同) mkdir /u02/oradata/ann01 mkdir /u02/oradata/ann01/archive_log mkdir /u02/oradata/ann01/standby
修改主库为归档模式
shutdown immediate; startup mount; alter database archivelog; alter database open;
修改主库的force logging设置
alter database force logging;
在主库上添加standby log
alter database add standby logfile group 11('/u02/oradata/ann01/standby/sta_redo11.log') size 50M; alter database add standby logfile group 12('/u02/oradata/ann01/standby/sta_redo12.log') size 50M; alter database add standby logfile group 13('/u02/oradata/ann01/standby/sta_redo13.log') size 50M; alter database add standby logfile group 14('/u02/oradata/ann01/standby/sta_redo14.log') size 50M;
修改主库的参数文件
create pfile from spfile;
在pfile中添加:
db_unique_name=ann01_01 log_archive_config='DG_CONFIG=(ann01_01,ann01_02)' log_archive_dest_1='LOCATION=/u02/oradata/ann01/archive_log VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ann01_01' log_archive_dest_2='SERVICE=ann01_02 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ann01_02' fal_server=ann01_02 fal_client=ann01_01 standby_file_management='AUTO'
创建spfile
create spfile from pfile;
启动主库并创建备库的控制文件
alter database create standby controlfile as '/u02/oradata/ann01/standby/sta.ctl';
修改主库和备库的监听和服务名配置,关闭主库,停止主库监听
shutdown immediate; lsnrctl stop;
编辑listener.ora,改为:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = linux_v1.com)(port = 1521)) ) ) ADR_BASE_LISTENER = /u01/app/oracle
编辑tnsnames.ora,改为:
ANN01_01 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.159.2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ann01_01.com) ) ) ANN01_02 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.159.3)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ann01_02.com) ) )
启动主库监听
lsnrctl start
停止备库监听
lsnrctl stop
修改备库监听listener.ora和tnsnames.ora
listener.ora修改为:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = linux_v2.com)(port = 1521)) ) ) ADR_BASE_LISTENER = /u01/app/oracle
tnsnames.ora修改为:
ANN01_02 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = linux_v2.com)(port = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ann01_02.com) ) ) ANN01_01 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = linux_v1.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ann01_01.com) ) )
启动备库监听
lsnrctl start
启动主库,用netmgr在主机和备机上测试主库的orcl1服务是否正常,正常后关闭主库;
关闭主库,在主库上创建数据库密码文件并复制到备机的$ORACLE_HOME/dbs目录下,在备机上进行还原操作
shutdown immediate; orapwd file=$ORACLE_HOME/dbs/orapwann01 password=123456 entries=3; scp orapwann01 192.168.159.3:$ORACLE_HOME/dbs/
复制参数文件,控制文件(/u02/oradata/ann01/standby/sta.ctl),数据文件至备机;
添加standby log,此处因前面主库是先添加备库日志组再备份控制文件,故此处只需将主库的备库日志组拷贝到备库相关目录即可。
启动备库,修改备库到standby状态
startup nomount; alter database mount standby database;
打开备库至只读状态
alter database open read only;
应用或者取消应用日志
alter database recover managed standby database disconnect from session; alter database recover managed standby database cancel;
检查有效性
select open_mode,database_role,switchover_status,protection_mode,protection_level from v$database; select sequence#,name,applied from v$archived_log order by sequence#; select dest_id,status,destination,error from v$archive_dest; select status,type,database_mode,destination,db_unique_name,recovery_mode from v$archive_dest_status; select timestamp,message from v$dataguard_status; select process,status,thread#,sequence#,client_pid from v$managed_standby;