1. Logical standby 主备库切换
1.1 确认主库是否能够切换
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
1.2 准备将主库切换为逻辑备库
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;
Database altered.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
PREPARING SWITCHOVER
--这时的状态已经变为准备切换
1.3 准备将逻辑备库切换为主库
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY;
Database altered.
--该语句将会在逻辑备库上开启重做日志传输服务。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
PREPARING SWITCHOVER
1.4 确认当前的主库已经准备好接收新主库的重做日志
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO LOGICAL STANDBY
1.5 将主库切换成逻辑备库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;
Database altered.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
NOT ALLOWED
1.6 将逻辑备库切换成主库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Database altered.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
1.7 在备库上开启SQL Apply
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
Database altered.
如果主备库的SID相同,对换主备库的IP,对换lisener.ora以及init.ora,tnsnames.ora重新启动lisener及数据库就可以了。如果主备库的SID不同,则要进行如下操作。
1.8 更换SID
以下更换过程中,主库的SID为IT,备库的SID为ITS
1.8.1 更换主库的SID(在原备库,新的主库上完成)
SQL> shutdown immediate;
数据库关闭.
数据库已卸载.
已关闭 ORACLE 执行处理.
SQL> startup mount;
ORACLE 执行处理已启动.
Total System Global Area 612368384 bytes
Fixed Size 1298160 bytes
Variable Size 167772432 bytes
Database Buffers 436207616 bytes
Redo Buffers 7090176 bytes
数据库已挂载.
SQL> host nid target=sys/oracle@its dbname=it
DBNEWID: Release 10.2.0.4.0 - Production on 星期二 10月 20 16:51:46 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已联机至数据库 ITS (DBID=2303471784)
联机至服务器版本 10.2.0
数据库中的控制文件:
D:\IT\CONTROLFILE\O1_MF_5FJ2KRKL_.CTL
D:\FLASHBACK\IT\CONTROLFILE\O1_MF_5FJ2KS3F_.CTL
要将数据库 ID 和数据库名称 ITS 变更成 IT? (Y/[N]) => y
继续作业
将数据库 ID 从 2303471784 变更成 3211721123
将数据库名称从 ITS 变更成 IT
控制檔 D:\IT\CONTROLFILE\O1_MF_5FJ2KRKL_.CTL - 已修改
控制檔 D:\FLASHBACK\IT\CONTROLFILE\O1_MF_5FJ2KS3F_.CTL - 已修改
资料文件 D:\IT\DATAFILE\O1_MF_SYSTEM_5FJ2HFH4_.DBF - dbid 已变更, 已写入新名称
资料文件 D:\IT\DATAFILE\O1_MF_UNDOTBS1_5FJ2HFN0_.DBF - dbid 已变更, 已写入新名
称
资料文件 D:\IT\DATAFILE\O1_MF_SYSAUX_5FJ2HFJ3_.DBF - dbid 已变更, 已写入新名称
资料文件 D:\IT\DATAFILE\O1_MF_USERS_5FJ2HFNZ_.DBF - dbid 已变更, 已写入新名称
资料文件 D:\IT\DATAFILE\O1_MF_TEMP_5FJ2LO5C_.TMP - dbid 已变更, 已写入新名称
控制檔 D:\IT\CONTROLFILE\O1_MF_5FJ2KRKL_.CTL - dbid 已变更, 已写入新名称
控制檔 D:\FLASHBACK\IT\CONTROLFILE\O1_MF_5FJ2KS3F_.CTL - dbid 已变更, 已写入
新名称
执行处理关闭
数据库名称已变更成 IT.
重新启动前请先修改参数文件并产生新的密码文件.
数据库 IT 的数据库 ID 已变更成 3211721123.
此数据库的所有先前备份和存盘重做日志均已无法使用.
数据库已经关闭, 请使用 RESETLOGS 选项开启数据库.
成功变更数据库名称和 ID.
DBNEWID - 成功完成.
C:\Documents and Settings\Administrator>oradim -del -sid its
执行处理已删除.
C:\Documents and Settings\Administrator>oradim -new -sid it -startmode auto -pfile C:\oracle\product\10.2.0\db_1\database\initit.ora
执行处理已建立.
备份原备库上的initits.ora,lisener.ora,tnsnames.ora,密码文件,将原主库,新备库上的initit.ora,lisener.ora,tnsnames.ora,密码文件复制的新主库相应的位置,修改新备库的IP为另一个,将新主库的IP改为原来主库的 IP,重新启动lisener.
C:\Documents and Settings\Administrator>set oracle_sid=it
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 10月 20 16:56:32 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> connect sys as sysdba
输入密码:
联机至闲置的执行处理.
SQL> startup
ORACLE 执行处理已启动.
Total System Global Area 612368384 bytes
Fixed Size 1298160 bytes
Variable Size 167772432 bytes
Database Buffers 436207616 bytes
Redo Buffers 7090176 bytes
数据库已挂载.
ORA-01589: 必须为要开启的数据库使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
已更改数据库.
SQL>
1.8.2 更换备库的SID(在原主库,新的备库上完成)
SQL> shutdown immediate;
数据库关闭.
数据库已卸载.
已关闭 ORACLE 执行处理.
SQL> startup mount;
ORACLE 执行处理已启动.
Total System Global Area 612368384 bytes
Fixed Size 1298160 bytes
Variable Size 167772432 bytes
Database Buffers 436207616 bytes
Redo Buffers 7090176 bytes
数据库已挂载.
SQL> host nid target=sys/oracle@it dbname=its
DBNEWID: Release 10.2.0.4.0 - Production on 星期二 10月 20 17:01:03 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已联机至数据库 IT (DBID=3211404984)
联机至服务器版本 10.2.0
数据库中的控制文件:
D:\IT\CONTROLFILE\O1_MF_5FJ2KRKL_.CTL
D:\FLASHBACK\IT\CONTROLFILE\O1_MF_5FJ2KS3F_.CTL
要将数据库 ID 和数据库名称 IT 变更成 ITS? (Y/[N]) => y
继续作业
将数据库 ID 从 3211404984 变更成 2303506065
将数据库名称从 IT 变更成 ITS
控制檔 D:\IT\CONTROLFILE\O1_MF_5FJ2KRKL_.CTL - 已修改
控制檔 D:\FLASHBACK\IT\CONTROLFILE\O1_MF_5FJ2KS3F_.CTL - 已修改
资料文件 D:\IT\DATAFILE\O1_MF_SYSTEM_5FJ2HFH4_.DBF - dbid 已变更, 已写入新名称
资料文件 D:\IT\DATAFILE\O1_MF_UNDOTBS1_5FJ2HFN0_.DBF - dbid 已变更, 已写入新名
称
资料文件 D:\IT\DATAFILE\O1_MF_SYSAUX_5FJ2HFJ3_.DBF - dbid 已变更, 已写入新名称
资料文件 D:\IT\DATAFILE\O1_MF_USERS_5FJ2HFNZ_.DBF - dbid 已变更, 已写入新名称
资料文件 D:\IT\DATAFILE\O1_MF_TEMP_5FJ2LO5C_.TMP - dbid 已变更, 已写入新名称
控制檔 D:\IT\CONTROLFILE\O1_MF_5FJ2KRKL_.CTL - dbid 已变更, 已写入新名称
控制檔 D:\FLASHBACK\IT\CONTROLFILE\O1_MF_5FJ2KS3F_.CTL - dbid 已变更, 已写入
新名称
执行处理关闭
数据库名称已变更成 ITS.
重新启动前请先修改参数文件并产生新的密码文件.
数据库 ITS 的数据库 ID 已变更成 2303506065.
此数据库的所有先前备份和存盘重做日志均已无法使用.
数据库已经关闭, 请使用 RESETLOGS 选项开启数据库.
成功变更数据库名称和 ID.
DBNEWID - 成功完成.
将原备库,新主库上备份的initits.ora,lisener.ora,tnsnames.ora,密码文件复制的新备库相应的位置,将新备库的IP改为原来备库的 IP,重新启动lisener.
C:\Documents and Settings\Administrator>oradim -del -sid it
执行处理已删除.
C:\Documents and Settings\Administrator>oradim -new -sid its -startmode auto -pfile C:\oracle\product\10.2.0\db_1\database\initits.ora
执行处理已建立.
C:\Documents and Settings\Administrator>set oracle_sid=its
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 10月 20 16:56:32 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> connect sys as sysdba
输入密码:
联机至闲置的执行处理.
SQL> startup
ORACLE 执行处理已启动.
Total System Global Area 612368384 bytes
Fixed Size 1298160 bytes
Variable Size 167772432 bytes
Database Buffers 436207616 bytes
Redo Buffers 7090176 bytes
数据库已挂载.
ORA-01589: 必须为要开启的数据库使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
已更改数据库.
SQL> Alter database start logical standby apply;
已更改数据库.
SQL>