参考文档:<br />
http://www.oracle.com/technetwork/database/features/availability/maa-wp-11g-transientlogicalrollingu-1-131927.pdf<br />
<br />
以下对文档中的实例进行说明:<br />
PROD:primary <br />
PSTBY:物理standby<br />
LSTBY:逻辑standby<br />
<table style="width:70%;" class="" border="1" bordercolor="#000000" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td align="center" height="34" width="138">
<strong>源主库当前角色</strong>
</td>
<td align="center" width="352">
<strong>操作及说明</strong>
</td>
<td align="center" width="132">
<strong>源从库当前角色</strong>
</td>
<td align="center" width="455">
<strong>操作及说明</strong>
</td>
</tr>
<tr align="center">
<td colspan="4" height="24">
<strong>PREPARATION
STEPS(准备项)</strong>
</td>
</tr>
<tr>
<td height="41">
PROD
</td>
<td width="352">
DGMGRL> disable
configuration;<br />
如果有配置dg broker,停掉
</td>
<td>
PSTBY
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="54">
PROD
</td>
<td width="352">
ALTER SYSTEM SET<br />
DG_BROKER_START=FALSE SCOPE=BOTH;<br />
如果有配置dg broker,停掉
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER SYSTEM SET<br />
DG_BROKER_START=FALSE SCOPE=BOTH;
</td>
</tr>
<tr>
<td height="72">
PROD
</td>
<td width="352">
exec
dbms_capture_adm.stop_capture<br />
(capture_name<br />
=>'STRMADMIN_CAPTURE');<br />
如果有用oracle stream,停掉
</td>
<td>
PSTBY
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="72">
PROD
</td>
<td width="352">
ALTER DATABASE ADD STANDBY
LOGFILE<br />
(’+PROD’) SIZE 50M;<br />
…<br />
添加standby logfile
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER DATABASE ADD STANDBY
LOGFILE<br />
(’+PSTBY’) SIZE 50M;<br />
…
</td>
</tr>
<tr>
<td height="54">
PROD
</td>
<td width="352">
SELECT PROTECTION_MODE
FROM<br />
V$DATABASE;<br />
确定dg保护模式,必须为最高可用或最大性能.
</td>
<td>
PSTBY
</td>
<td width="455">
SELECT PROTECTION_MODE
FROM<br />
V$DATABASE;
</td>
</tr>
<tr>
<td height="540">
PROD
</td>
<td width="352">
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_1='<br />
LOCATION=USE_DB_RECOVERY_FILE_DEST<br />
VALID_FOR=(ONLINE_LOGFILES,<br />
ALL_ROLES) DB_UNIQUE_NAME=prod'<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_2=<br />
'SERVICE=pstby LGWR ASYNC<br />
NOAFFIRM DELAY=0 OPTIONAL<br />
REOPEN=15 MAX_FAILURE=10<br />
VALID_FOR=(ONLINE_LOGFILES,<br />
PRIMARY_ROLE)<br />
DB_UNIQUE_NAME=pstby' SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_3=<br />
'LOCATION=USE_DB_RECOVERY_FILE_DES<br />
T VALID_FOR=(STANDBY_LOGFILES,<br />
STANDBY_ROLE)<br />
DB_UNIQUE_NAME=prod' SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_1=ENABLE<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_2=ENABLE<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_3=ENABLE<br />
SCOPE=BOTH;<br />
修改主库日志传输
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_1='<br />
LOCATION=USE_DB_RECOVERY_FILE_DEST<br />
VALID_FOR=(ONLINE_LOGFILES,<br />
ALL_ROLES) DB_UNIQUE_NAME=pstby'<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_2=<br />
'SERVICE=prod LGWR ASYNC NOAFFIRM<br />
DELAY=0 OPTIONAL REOPEN=15<br />
MAX_FAILURE=10<br />
VALID_FOR=(ONLINE_LOGFILES,<br />
PRIMARY_ROLE)<br />
DB_UNIQUE_NAME=prod' SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_3=<br />
'LOCATION=USE_DB_RECOVERY_FILE_DES<br />
T VALID_FOR=(STANDBY_LOGFILES,<br />
STANDBY_ROLE)<br />
DB_UNIQUE_NAME=pstby' SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_1=ENABLE<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_2=ENABLE<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_3=ENABLE<br />
SCOPE=BOTH;
</td>
</tr>
<tr>
<td height="198">
PROD
</td>
<td width="352">
ALTER SYSTEM SET<br />
FAL_SERVER=’pstby’ SCOPE=BOTH;<br />
ALTER SYSTEM SET FAL_CLIENT=’prod’<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_CONFIG=’dg_config=<br />
(prod,pstby)’ SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
STANDBY_FILE_MANAGEMENT=’AUTO’<br />
SCOPE=BOTH;<br />
配置归档standby参数
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER SYSTEM SET
FAL_SERVER=’prod’<br />
SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
FAL_CLIENT=’pstby’ SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
LOG_ARCHIVE_CONFIG=’dg_config=<br />
(prod,pstby)’ SCOPE=BOTH;<br />
ALTER SYSTEM SET<br />
STANDBY_FILE_MANAGEMENT=’AUTO’<br />
SCOPE=BOTH;
</td>
</tr>
<tr>
<td height="72">
PROD
</td>
<td width="352">
ALTER SYSTEM SET<br />
LOG_FILE_NAME_CONVERT= ’+PSTBY/’,<br />
’+PROD/’ SCOPE=SPFILE;<br />
日志转换
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER SYSTEM SET<br />
LOG_FILE_NAME_CONVERT= ’+PROD/’,<br />
’+PSTBY/’ SCOPE=SPFILE;
</td>
</tr>
<tr>
<td height="126">
PROD
</td>
<td width="352">
SHUTDOWN IMMEDIATE<br />
(In an Oracle RAC environment for all instances)<br />
STARTUP MOUNT<br />
ALTER DATABASE FLASHBACK ON;<br />
ALTER DATABASE OPEN;<br />
开启闪回数据库.如果只是测试,可以不开
</td>
<td>
PSTBY
</td>
<td width="455">
Optional:<br />
SHUTDOWN IMMEDIATE<br />
STARTUP MOUNT<br />
ALTER DATABASE FLASHBACK ON;
</td>
</tr>
<tr>
<td height="90">
PROD
</td>
<td width="352">
CREATE RESTORE POINT
PRE_UPGRADE_1<br />
GUARANTEE FLASHBACK DATABASE;<br />
建还原点,这个是必须的
</td>
<td>
PSTBY
</td>
<td width="455">
Optional:<br />
CREATE RESTORE POINT PRE_UPGRADE_2<br />
GUARANTEE FLASHBACK DATABASE;<br />
RECOVER MANAGED STANDBY DATABASE<br />
USING CURRENT LOGFILE DISCONNECT;
</td>
</tr>
<tr align="center">
<td colspan="4" height="18">
<strong>CONVERSION TO
LOGICAL STANDBY STEPS物理standby转换为逻辑standby</strong>
</td>
</tr>
<tr>
<td height="54">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER DATABASE RECOVER
MANAGED<br />
STANDBY DATABASE CANCEL;<br />
取消日志应用
</td>
</tr>
<tr>
<td height="66">
PROD
</td>
<td width="352">
EXECUTE
DBMS_LOGSTDBY.BUILD;<br />
建立logminer字典
</td>
<td>
PSTBY
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="142">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
If Oracle RAC then must be
mounted exclusive.<br />
ALTER SYSTEM SET<br />
CLUSTER_DATABASE=FALSE<br />
SCOPE=SPFILE;<br />
SHUTDOWN IMMEDIATE<br />
STARTUP MOUNT<br />
如果是rac,CLUSTER_DATABASE设为false
</td>
</tr>
<tr>
<td height="68">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER DATABASE RECOVER TO
LOGICAL<br />
STANDBY KEEP IDENTITY;<br />
从库转换为临时逻辑standby
</td>
</tr>
<tr>
<td height="126">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
If Oracle RAC then reset
CLUSTER_DATABASE.<br />
ALTER SYSTEM SET<br />
CLUSTER_DATABASE=TRUE<br />
SCOPE=SPFILE;<br />
SHUTDOWN IMMEDIATE<br />
STARTUP MOUNT<br />
如果是rac,CLUSTER_DATABASE设为true
</td>
</tr>
<tr>
<td height="18">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER DATABASE OPEN;
</td>
</tr>
<tr>
<td height="158">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
Note: If using EDS, skip this
step. Do not start<br />
SQL Apply until after the logical standby upgrade and after<br />
the steps for “Configuring EDS Logging Table Triggers” in<br />
Appendix B are run.<br />
ALTER DATABASE START LOGICAL<br />
STANDBY APPLY IMMEDIATE;<br />
逻辑standby应用sql apply
</td>
</tr>
<tr>
<td height="59">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
EXECUTE
DBMS_LOGSTDBY.APPLY_SET(<br />
'LOG_AUTO_DELETE', 'FALSE');<br />
禁用自动归档日志自动删除
</td>
</tr>
<tr>
<td height="84">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
Wait for this query to display
“IDLE”:<br />
SELECT SESSION_ID, STATE FROM<br />
V$LOGSTDBY_STATE;<br />
等待逻辑standby状态为idle
</td>
</tr>
<tr align="center">
<td colspan="4" height="18">
<strong>CREATE AN ARCHIVED
REDO LOG REPOSITORY建重做日志存储库(可选)</strong>
</td>
</tr>
<tr align="center">
<td colspan="4" height="18">
<strong>PERFORM PATCH APPLY
OR UPGRADE STEPS升级从库</strong>
</td>
</tr>
<tr>
<td height="72">
PROD
</td>
<td width="352">
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_2=DEFER<br />
SCOPE=MEMORY;<br />
停止日志传输
</td>
<td>
LSTBY
</td>
<td width="455">
ALTER DATABASE STOP
LOGICAL<br />
STANDBY APPLY;<br />
停止逻辑standby sql apply
</td>
</tr>
<tr>
<td height="88">
PROD
</td>
<td>
<br />
</td>
<td>
LSTBY
</td>
<td width="455">
CREATE RESTORE POINT
PRE_UPGRADE_3<br />
GUARANTEE FLASHBACK DATABASE;<br />
SHUTDOWN IMMEDIATE<br />
建还原点,用于失败回退.测试可不用
</td>
</tr>
<tr>
<td height="54">
PROD
</td>
<td>
<br />
</td>
<td>
PSTBY
</td>
<td width="455">
RMAN> CATALOG START
WITH<br />
'+PSTBY/ALOGREP/ARCHIVELOG/’;<br />
与重做日志存储库相关
</td>
</tr>
<tr>
<td height="77">
PROD
</td>
<td width="352">
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_2=ENABLE<br />
SCOPE=MEMORY;<br />
开户日志传输
</td>
<td>
LSTBY
</td>
<td width="455">
STARTUP
</td>
</tr>
<tr>
<td height="127">
PROD
</td>
<td>
<br />
</td>
<td>
LSTBY
</td>
<td width="455">
Note: If using EDS, perform the
steps in “Configuring<br />
EDS Logging Table Triggers” in Appendix B before starting<br />
SQL Apply.<br />
ALTER DATABASE START LOGICAL<br />
STANDBY APPLY IMMEDIATE;<br />
开启逻辑standby sql apply
</td>
</tr>
<tr align="center">
<td colspan="4" height="18">
<strong>CREATE AN ARCHIVED
REDO LOG REPOSITORY建重做日志存储库(可选)</strong>
</td>
</tr>
<tr align="center">
<td colspan="4" height="18">
<strong>SWITCHOVER(主从切换)</strong>
</td>
</tr>
<tr>
<td height="116">
PROD
</td>
<td width="352">
Wait for this query to display
“TO STANDBY” or proceed<br />
to switchover with session disconnect<br />
SELECT SWITCHOVER_STATUS FROM<br />
V$DATABASE;<br />
查看switchover_status的状态
</td>
<td>
LSTBY->PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="64">
PROD
</td>
<td width="352">
ALTER DATABASE COMMIT TO<br />
SWITCHOVER TO LOGICAL STANDBY;<br />
源主库切换到逻辑standby
</td>
<td>
LSTBY->PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="80">
PROD
</td>
<td>
<br />
</td>
<td>
LSTBY->PROD
</td>
<td width="455">
Wait for this query to display
“TO PRIMARY” or proceed<br />
to switchover with session disconnect:<br />
SELECT SWITCHOVER_STATUS FROM<br />
V$DATABASE;
</td>
</tr>
<tr>
<td height="54">
PROD
</td>
<td>
<br />
</td>
<td>
LSTBY->PROD
</td>
<td width="455">
ALTER DATABASE COMMIT TO<br />
SWITCHOVER TO LOGICAL PRIMARY;<br />
源从库切换为从库
</td>
</tr>
<tr>
<td height="167">
PROD
</td>
<td>
<br />
</td>
<td>
LSTBY->PROD
</td>
<td width="455">
If using Oracle Streams then
start Streams capture. Note<br />
capture will go back in time and mine the redo logs that got<br />
generated while it was down.<br />
exec<br />
dbms_capture_adm.start_capture<br />
('STRMADMIN_CAPTURE');<br />
如果有oracle stream,开启之前停用的
</td>
</tr>
<tr align="center">
<td colspan="4" height="18">
<strong>RETRANSFORMATION
INTO A PHYSICAL STANDBY DATABASE逻辑standby回到物理standby</strong>
</td>
</tr>
<tr>
<td height="72">
LSTBY->PSTBY
</td>
<td>
<br />
</td>
<td>
PROD
</td>
<td width="455">
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_2=DEFER<br />
SCOPE=MEMORY;<br />
停用日志传输
</td>
</tr>
<tr>
<td height="90">
LSTBY->PSTBY
</td>
<td width="352">
SHUTDOWN IMMEDIATE;<br />
STARTUP MOUNT;<br />
FLASHBACK DATABASE TO RESTORE<br />
POINT PRE_UPGRADE_1;<br />
通过还原点,闪回到还原点.
</td>
<td>
PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="18">
LSTBY->PSTBY
</td>
<td>
SHUTDOWN IMMEDIATE;
</td>
<td>
PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="40">
LSTBY->PSTBY
</td>
<td width="352">
Switch to the new
ORACLE_HOME<br />
切换到软件升级后的ORACLE_HOM
</td>
<td>
PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="72">
LSTBY->PSTBY
</td>
<td width="352">
STARTUP MOUNT;<br />
ALTER DATABASE CONVERT TO PHYSICAL<br />
STANDBY;<br />
切换逻辑standby为物理standby
</td>
<td>
PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="36">
PSTBY
</td>
<td width="352">
SHUTDOWN IMMEDIATE<br />
STARTUP MOUNT;
</td>
<td>
PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="89">
PSTBY
</td>
<td width="352">
ALTER SYSTEM SET
COMPATIBLE=’...’<br />
SCOPE=SPFILE;<br />
SHUTDOWN IMMEDIATE<br />
STARTUP MOUNT;<br />
修改兼容性参数
</td>
<td>
PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="46">
PSTBY
</td>
<td width="352">
RMAN> CATALOG START
WITH<br />
'+PROD/ALOGREP/ARCHIVELOG/’;<br />
与重做日志存储库相关
</td>
<td>
PROD
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="61">
PSTBY
</td>
<td width="352">
RECOVER MANAGED STANDBY
DATABASE<br />
USING CURRENT LOGFILE DISCONNECT;<br />
开启物理standby实时应用
</td>
<td>
PROD
</td>
<td width="455">
ALTER SYSTEM SET<br />
LOG_ARCHIVE_DEST_STATE_2=ENABLE;<br />
开启日志传输
</td>
</tr>
<tr align="center">
<td colspan="4" height="18">
<strong>SWITCHBACK
STEPS(主从切回)</strong>
</td>
</tr>
<tr>
<td height="75">
PSTBY->PROD
</td>
<td>
<br />
</td>
<td>
PROD->PSTBY
</td>
<td width="455">
Wait for this query to display
“TO STANDBY” or proceed<br />
to switchover with session disconnect:<br />
SELECT SWITCHOVER_STATUS<br />
FROM V$DATABASE;
</td>
</tr>
<tr>
<td height="70">
PSTBY->PROD
</td>
<td>
<br />
</td>
<td>
PROD->PSTBY
</td>
<td width="455">
ALTER DATABASE COMMIT TO<br />
SWITCHOVER TO STANDBY WITH SESSION<br />
SHUTDOWN;<br />
切换回物理standby
</td>
</tr>
<tr>
<td height="90">
PSTBY->PROD
</td>
<td width="352">
Wait for this query to display
“TO PRIMARY” or proceed<br />
to switchover with session disconnect:<br />
SELECT SWITCHOVER_STATUS FROM<br />
V$DATABASE;
</td>
<td>
PROD->PSTBY
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="54">
PSTBY->PROD
</td>
<td width="352">
ALTER DATABASE COMMIT TO<br />
SWITCHOVER TO PRIMARY;<br />
切换回主库
</td>
<td>
PROD->PSTBY
</td>
<td>
<br />
</td>
</tr>
<tr>
<td height="44">
PSTBY->PROD
</td>
<td width="352">
ALTER DATABASE OPEN;
</td>
<td>
PROD->PSTBY
</td>
<td width="455">
SHUTDOWN IMMEDIATE;<br />
STARTUP MOUNT;
</td>
</tr>
<tr>
<td height="51">
PSTBY->PROD
</td>
<td>
<br />
</td>
<td>
PROD->PSTBY
</td>
<td width="455">
RECOVER MANAGED STANDBY
DATABASE<br />
USING CURRENT LOGFILE DISCONNECT;<br />
开启物理standby 实时应用
</td>
</tr>
<tr>
<td height="54">
PROD
</td>
<td width="352">
SELECT NAME FROM
V$RESTORE_POINT<br />
WHERE GUARANTEE_FLASHBACK_DATABASE<br />
=’YES’;
</td>
<td>
PSTBY
</td>
<td width="455">
SELECT NAME FROM
V$RESTORE_POINT<br />
WHERE GUARANTEE_FLASHBACK_DATABASE<br />
=’YES’;
</td>
</tr>
<tr>
<td height="45">
PROD
</td>
<td width="352">
DROP RESTORE POINT
PRE_UPGRADE_1;<br />
删除之前建的还原点
</td>
<td>
PSTBY
</td>
<td width="455">
DROP RESTORE POINT <name>;
</td>
</tr>
<tr>
<td height="49">
PROD
</td>
<td width="352">
ALTER SYSTEM SET<br />
DG_BROKER_START=TRUE SCOPE=BOTH;<br />
开启之前关闭的dg broker
</td>
<td>
PSTBY
</td>
<td width="455">
ALTER SYSTEM SET<br />
DG_BROKER_START=TRUE SCOPE=BOTH;
</td>
</tr>
<tr>
<td height="18">
PROD
</td>
<td width="352">
DGMGRL> enable configuration;
</td>
<td>
<br />
</td>
<td>
<br />
</td>
</tr>
</tbody>
</table>
<br />
<br />
注意:<br />
1.转换为逻辑standby时,要关注不被支持的数据类型,通过dba_logstdby_unsupported视图.<br />
2.这种物理standby借助临时逻辑standby滚动升级,源从库升级软件和数据库,源主库升级软件.源主库的数据库升级是通过物理standby以日志的方式传过去的.而正常的逻辑standby滚动升级是主从都要进行软件和数据库升级的.<br />
3.在测试环境,主库的还原点是必须的,就是通过这个还原点把逻辑standby返回到物理standby的.<br />
4.滚动升级还要考虑主从切换时,客户端的连接方案.<br />
5.源从库升级后,考虑通过database replay,sql performance analyzer,sql plan management进行升级后的性能测试. <br />
<br />
<br />
<br />
<br />
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28211342/viewspace-2130721/
,如需转载,请注明出处,否则将追究法律责任。