前面介绍了RAC环境物理STANDBY数据库的创建,这里在前面的基础上创建逻辑STANDBY数据库。
RAC数据库建立STANDBY(一):http://yangtingkun.itpub.net/post/468/484988
RAC数据库建立STANDBY(二):http://yangtingkun.itpub.net/post/468/485013
RAC数据库建立STANDBY(三):http://yangtingkun.itpub.net/post/468/485054
RAC数据库建立STANDBY(四):http://yangtingkun.itpub.net/post/468/485090
RAC数据库建立STANDBY(五):http://yangtingkun.itpub.net/post/468/485121
RAC数据库建立STANDBY(六):http://yangtingkun.itpub.net/post/468/485141
主数据库和目标数据库都采用11.1.0.6 FOR Solaris 10 sparc 64的RAC环境,PRIMARY数据库使用了VOLUMN CLUSTER MANAGER,而STANDBY数据库使用ASM。
备库的RAC环境已经安装完成,而且根据前面几篇文章中的步骤,已经将备库建立为主库的物理STANDBY,下面将物理STANDBY转化为逻辑STANDBY数据库。
首先检查主库中没有包含唯一约束的表:
SQL> SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
2 WHERE (OWNER, TABLE_NAME) NOT IN
3 (SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
4 AND BAD_COLUMN = 'Y';
OWNER TABLE_NAME
------------------------------ ------------------------------
NDMAIN PLAN_TABLE
NDMAIN QUEST_SX_PLAN1
NDMAIN SQLEXPERT_PLAN1
需要注意,这个SQL可能会执行相当长的时间。
找到这些不包括主键的表,可以人为的添加一个RELY主键:
SQL> CONN NDMAIN
输入口令:
已连接。
SQL> ALTER TABLE PLAN_TABLE ADD PRIMARY KEY (TIMESTAMP, ID) RELY DISABLE;
表已更改。
SQL> ALTER TABLE QUEST_SX_PLAN1 ADD PRIMARY KEY (TIMESTAMP, ID) RELY DISABLE;
表已更改。
SQL> ALTER TABLE SQLEXPERT_PLAN1 ADD PRIMARY KEY (TIMESTAMP, ID) RELY DISABLE;
表已更改。
为这些表添加一个RELY主键,使得Oracle确信表中的主键约束,而真正的数据由用户来保证。
由于物理STANDBY已经创建成功,下面直接进行下一步,停止应用日志:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
数据库已更改。
修改主库的初始化参数,将ONLINE_LOGFILES状态和STANDBY_LOGIFLES状态区分开,需要注意,在修改参赛前,应该在RAC的两个节点上执行添加新目录的命令:
SQL> ALTER SYSTEM SET
2 LOG_ARCHIVE_DEST_1 =
3 'LOCATION=/data/oracle/oradata/rac11g/archivelog/
4 VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
5 DB_UNIQUE_NAME=rac11g';
系统已更改。
SQL> HOST mkdir /data/oracle/oradata/rac11g/archivelog2/
SQL> ALTER SYSTEM SET
2 LOG_ARCHIVE_DEST_3 =
3 'LOCATION=/data/oracle/oradata/rac11g/archivelog2/
4 VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
5 DB_UNIQUE_NAME=rac11g';
系统已更改。
然后创建LOGMNR使用的数据字典:
SQL> EXEC DBMS_LOGSTDBY.BUILD
PL/SQL 过程已成功完成。
接着就可以将物理STANDBY数据库转化为逻辑STANDBY数据库了:
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY RAC11G_L;
ALTER DATABASE RECOVER TO LOGICAL STANDBY RAC11G_L
*
第 1 行出现错误:
ORA-19952: 应以独占方式装载数据库
执行报错,这里就是RAC环境与普通环境的区别所在了。虽然这个错误号在metalink上都找不到对应的文章,不过幸好错误信息的描述还比较清楚,只需要将数据库的CLUSTER_DATABASE初始化参数置于FALSE,就可以执行上面的操作:
SQL> ALTER SYSTEM SET CLUSTER_DATABASE = FALSE SCOPE = SPFILE;
系统已更改。
SQL> SHUTDOWN IMMEDIATE
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP MOUNT
ORACLE 例程已经启动。
Total System Global Area 1.7108E+10 bytes
Fixed Size 2101632 bytes
Variable Size 3344420480 bytes
Database Buffers 1.3757E+10 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY RAC11G_L;
ALTER DATABASE RECOVER TO LOGICAL STANDBY RAC11G_L
*
第 1 行出现错误:
ORA-20000: File +DATA/rac11g/rac11g_temp_2_16g has wrong dbid or dbname, remove or restore the offending file.
SQL> ALTER DATABASE TEMPFILE '+DATA/rac11g/rac11g_temp_2_16g' DROP;
数据库已更改。
SQL> ALTER DATABASE TEMPFILE '+DATA/rac11g/rac11g_temp_1_4g' DROP;
数据库已更改。
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY RAC11G_L;
数据库已更改。
由于创建的物理STANDBY后,没有重置TEMP表空间,导致临时表空间文件状态不正确,这里可以先删除临时文件,等到数据库打开后再手工添加。
SQL> SHUTDOWN IMMEDIATE
ORA-01507: 未装载数据库
ORACLE 例程已经关闭。
SQL> STARTUP MOUNT
ORACLE 例程已经启动。
Total System Global Area 1.7108E+10 bytes
Fixed Size 2101632 bytes
Variable Size 3344420480 bytes
Database Buffers 1.3757E+10 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。
SQL> ALTER SYSTEM SET
2 LOG_ARCHIVE_DEST_1 =
3 'LOCATION=+DATA/RAC11G/
4 VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
5 DB_UNIQUE_NAME=rac11g_s';
系统已更改。
SQL> ALTER SYSTEM SET
2 LOG_ARCHIVE_DEST_3 =
3 'LOCATION=+DATA/RAC11G/DATAFILE/
4 VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
5 DB_UNIQUE_NAME=rac11g_s';
系统已更改。
和PRIMARY数据库一样,STANDBY数据库也需要将ONLINE_LOGFILES和STANDBY_LOGFILES分开。
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改。
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
数据库已更改。
打开数据库后,开始逻辑应用。
下面添加临时文件:
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/rac11g/rac11g_temp_1_4g' SIZE 4G REUSE;
表空间已更改。
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/rac11g/rac11g_temp_2_16g' SIZE 16G REUSE;
表空间已更改。
物理STANDBY数据库没有创建STANDBY LOGFILE,下面创建STANDBY数据库的STANDBY LOGFILE文件:
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 '+DATA/rac11g/rac11g_standby_redo1_1_1_1g' SIZE 1G;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 '+DATA/rac11g/rac11g_standby_redo1_2_1_1g' SIZE 1G;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 '+DATA/rac11g/rac11g_standby_redo1_3_1_1g' SIZE 1G;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 8 '+DATA/rac11g/rac11g_standby_redo2_1_1_1g' SIZE 1G;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 9 '+DATA/rac11g/rac11g_standby_redo2_2_1_1g' SIZE 1G;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 10 '+DATA/rac11g/rac11g_standby_redo2_3_1_1g' SIZE 1G;
数据库已更改。
创建完STANDBY LOGFILE之后,可以用IMMEDIATE方式应用日志:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
数据库已更改。
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
数据库已更改。
SQL> SELECT * FROM V$LOGSTDBY_STATE;
PRIMARY_DBID SESSION_ID REALTIME_APPLY STATE
------------ ---------- --------------- ----------------------------------------
1712482917 1 Y APPLYING
数据库已经处于应用状态。
更改数据库的CLUSTER_DATABASE初始化参数,并在节点1打开数据库:
SQL> ALTER SYSTEM SET CLUSTER_DATABASE = TRUE SCOPE = SPFILE;
系统已更改。
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
数据库已更改。
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP
ORACLE 例程已经启动。
Total System Global Area 1.7108E+10 bytes
Fixed Size 2101632 bytes
Variable Size 3344420480 bytes
Database Buffers 1.3757E+10 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。
数据库已经打开。
SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;
INSTANCE_NAME STATUS
---------------- ------------
rac11g1 OPEN
SQL> SELECT NAME, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;
NAME OPEN_MODE DATABASE_ROLE
------------------------------------------------------------ ---------- ----------------
RAC11G_L READ WRITE LOGICAL STANDBY
在节点2打开数据库:
$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on 星期三 9月 17 19:34:07 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已连接到空闲例程。
SQL> STARTUP
ORACLE 例程已经启动。
Total System Global Area 1.7108E+10 bytes
Fixed Size 2101632 bytes
Variable Size 3478638208 bytes
Database Buffers 1.3623E+10 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。
数据库已经打开。
SQL> SELECT INSTANCE_NAME, STATUS FROM GV$INSTANCE;
INSTANCE_NAME STATUS
---------------- ------------
rac11g2 OPEN
rac11g1 OPEN
SQL> SELECT NAME, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;
NAME OPEN_MODE DATABASE_ROLE
--------- ---------- ----------------
RAC11G_L READ WRITE LOGICAL STANDBY
两个节点都处于打开状态。
在节点1:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
数据库已更改。
SQL> SELECT * FROM V$LOGSTDBY_STATE;
PRIMARY_DBID SESSION_ID REALTIME_APPLY STATE
------------ ---------- --------------- ----------------------------------------
1712482917 1 Y IDLE
和物理STANDBY不同,逻辑STANDBY可以在两个节点同时启动的时候应用日志。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-613588/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-613588/