实施步骤: 1.主节点启用force logging,设置归档模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
alter database force logging;
取消:alter database no force logging; 2.如果没有密钥文件,需要用orapwd创建一下:
orapwd file= password= entries= force= nosysdba=
说明:
file 创建的密码文件
password 创建的口令(sys用户)
entries=MAX_USER 口令文件中可以存放的最大用户数。即拥有sysdba和sysoper身份登陆的用户数
force=(Y/N) 强制覆盖已存在的密码文件
nosysdba= sysdba用户不可以登陆
例如:
orapwd file=$ORACLE_HOME/dbs/testpwd.ora password=testoracle entries=1 force=y 3.主库创建standby controlfile和pfile
alter database create standby controlfile as 'controlfile.ctl';
create pfile='xxxx' from spfile; 4.热备
主库:
SQL> select 'alter tablespace '||name||' begin backup;' from v$tablespace;
'ALTERTABLESPACE'||NAME||'BEGINBACKUP;'
-------------------------------------------------------------
alter tablespace SYSTEM begin backup;
alter tablespace SYSAUX begin backup;
alter tablespace UNDOTBS1 begin backup;
alter tablespace TEMP begin backup; ---这个不需要copy文件
alter tablespace TBS_MRPMUSIC begin backup;
alter tablespace TBS_WAPMUSIC begin backup;
alter tablespace TBS_MUSICTEST begin backup;
alter tablespace TBS_MRPMUSIC_IDX begin backup;
记得copy完,end backup 5.复制数据文件,控制文件,参数文件,密码文件到备库。 6.配置standby数据库
配置监听
配置tnsnames.ora 7.启动standby
修改好参数文件后,启动到nomount
startup nomount pfile='xxxx'; --nomount
ALTER DATABASE MOUNT STANDBY DATABASE; --启动到mount
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; --启用redo应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; --启用redo实时应用 8.停止standby
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CALCEL;--停止redo应用
shutdown immediate;
8.failover和switchover
failover:主节点故障,激活从节点,替代服务。
switchover:主从角色互换,比如硬件升级。 物理switchover:
主节点:
select switchover_status from v$database; --如果是TO STANDBY,那么可以主节点可以转换为备节点。
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate;
startup mount;
备节点:
select switchover_status from v$database; --如果是to primary,那么可以切换为主节点。
alter database commit to switchover to primary; --注意转换的时候不能处于open read write模式。
alter database open; 物理failover:
检查归档日志是否连续:
备节点:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; --如果没有记录,那么正常,如果有记录,那么需要把归档日志从主节点复制到从节点。
select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;这个是检查归档是否完整。
alter database recover managed standby database finish force;--启动failover
alter database commit to switchover to primary; --转换为主节点。
alter database open;
做fialover其实说明主节点已经不可用,在最大保护和最高可用模式下,直接failover即可,不需要再检查归档,因为这时候主节点可能已经无法打开了。 9.以read only模式打开standby
alter database recover managed standby database cancel; --取消redo应用
alter database open; --打开
alter database recover managed standby database disconnect from session; --恢复到redo应用,不需要shutdown,启用redo应用即可。
<wbr style=""><div style=""><strong style="line-height:25px">10.模式切换:</strong></div><div style="">maximize protection ---> maximize availability ----> maximize performance</div><div style="">当在把dataguard的保护级别按这上面的顺序减低的时候,不需要primary库在mount状态,primary在open状态就可以直接执行保护模式更改命令</div><div style="">maximize protection <--- maximize availability <---- maximize performance</div><div style="">当在把dataguard的保护级别按这上面的顺序升高的时候,需要primary库在mount状态,如果在open更改会报错误</div><div style="">select DATABASE_ROLE,open_mode,PROTECTION_MODE,PROTECTION_LEVEL from v$database; --查看保护模式</div><div style="">切换主库保护模式的语法:</div><div style="">ALTER DATABASE SET STANDBY DATABASE</div><div style="">TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE }</div><div style=""><br style="line-height:25px"></div><div style="">SQL> alter database set standby database to maximize performance;</div><div style="">SQL> alter database set standby database to maximize availability;</div><div style="">SQL> alter database set standby database to maximize protection;</div><div style="">以上都是在主库操作,备库会随之改变。</div></wbr>