yangtingkun
===========================================================
DATA GURAD在同一台服务器上建立物理STANDBY
===========================================================

前两天记录了一下建立物理STANDBY的过程。这里打算记录一下将物理STANDBY和主库部署在同一台服务器上的过程。


物理STANDBY如果和主库部署在同一台服务器上,它的冗灾功能基本上就失去意义了。不过,仍然可以提供提高可用性,减少停机时间等功能。一般将物理STANDBY和主库部署在同一台机器上,主要是处于测试的目的。这种部署,将测试DATA GUARD的功能的硬件需求压缩到最小。

在同一台服务器上部署主库和物理STANDBY,不需要太多的准备工作,由于主库和ORACLE软件都是已经安装好的,所以只需要检查主库的归档状态就可以了。需要将主库置于FORCE LOGGING状态,并处于归档模式下:

SQL> SELECT DBID, NAME, LOG_MODE, FORCE_LOGGING FROM V$DATABASE;

DBID NAME LOG_MODE FOR
---------- --------- ------------ ---
1834427478 TEST ARCHIVELOG NO

SQL> ALTER DATABASE FORCE LOGGING;

数据库已更改。

SQL> SELECT DBID, NAME, LOG_MODE, FORCE_LOGGING FROM V$DATABASE;

DBID NAME LOG_MODE FOR
---------- --------- ------------ ---
1834427478 TEST ARCHIVELOG YES

由于主库已经是归档模式,这里不需要在进行设置,设置FORCE LOGGING就可以了。

下面进行STANDBY的建立,首先检查数据库中所有的数据文件和日志文件:

SQL> SELECT NAME FROM V$DATAFILE
2 UNION ALL
3 SELECT NAME FROM V$TEMPFILE
4 UNION ALL
5 SELECT MEMBER FROM V$LOGFILE;

NAME
------------------------------------------------
F:ORACLEORADATATESTSYSTEM01.DBF
F:ORACLEORADATATESTUNDOTBS01.DBF
F:ORACLEORADATATESTINDX01.DBF
F:ORACLEORADATATESTTOOLS01.DBF
F:ORACLEORADATATESTUSERS01.DBF
F:ORACLEORADATATESTYANGTK01.DBF
F:ORACLEORADATATESTTEMP01.DBF
F:ORACLEORADATATESTREDO02.LOG
F:ORACLEORADATATESTREDO01.LOG
F:ORACLEORADATATESTREDO03.LOG

已选择10行。

然后关闭数据库,将上面查询的所有数据文件和日志文件拷贝到STANDBY数据库所在目录下:

SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> HOST MD F:ORACLEORADATATEST_STANDBY

SQL> HOST COPY F:ORACLEORADATATEST*.* F:ORACLEORADATATEST_STANDBY

启动数据库后建立从库所需的PFILE和CONTROLFILE:

SQL> STARTUP
ORACLE 例程已经启动。

Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'F:ORACLEORADATATEST_STANDBYCONTROL01.CTL' REUSE;

数据库已更改。

SQL> HOST COPY F:ORACLEORADATATEST_STANDBYCONTROL01.CTL F:ORACLEORADATATEST_STANDBYCONTROL02.CTL

SQL> HOST COPY F:ORACLEORADATATEST_STANDBYCONTROL01.CTL F:ORACLEORADATATEST_STANDBYCONTROL03.CTL

SQL> HOST MD F:ORACLEADMINTEST_STANDBY

SQL> HOST MD F:ORACLEADMINTEST_STANDBYBDUMP

SQL> HOST MD F:ORACLEADMINTEST_STANDBYCDUMP

SQL> HOST MD F:ORACLEADMINTEST_STANDBYUDUMP

SQL> HOST MD F:ORACLEADMINTEST_STANDBYPFILE

SQL> CREATE PFILE = 'F:ORACLEADMINTEST_STANDBYPFILEINITTESTST.ORA' FROM SPFILE;

文件已创建。

建立主库归档日志的目的地:

SQL> HOST MD F:ORACLEORADATATEST_STANDBYSTANDBYARCHIVE

SQL> HOST MD F:ORACLEORADATATEST_STANDBYARCHIVE

修改从库的初始化参数,需要修改或添加下面的记录:

*.background_dump_dest='F:ORACLEADMINTEST_STANDBYBDUMP'
*.control_files='F:ORACLEORADATATEST_STANDBYCONTROL01.CTL','F:ORACLEORADATATEST_STANDBYCONTROL02.CTL','F:ORACLEORADATATEST_STANDBYCONTROL03.CTL'
*.core_dump_dest='F:ORACLEADMINTEST_STANDBYCDUMP'
*.db_name='test'
*.instance_name='testst'
*.log_archive_dest_1='LOCATION=F:ORACLEORADATATEST_STANDBYARCHIVE'
*.log_archive_start=TRUE
*.user_dump_dest='F:ORACLEADMINTEST_STANDBYUDUMP'
standby_archive_dest='F:ORACLEORADATATEST_STANDBYSTANDBYARCHIVE’
db_file_name_convert=('F:ORACLEORADATATEST', 'F:ORACLEORADATATEST_STANDBY')
log_file_name_convert=('F:ORACLEORADATATEST', 'F:ORACLEORADATATEST_STANDBY')
standby_file_management=AUTO
remote_archive_enable=TRUE
lock_name_space=testst

如果STANDBY数据库的数据文件、日志文件所在目录和主库不同,那么就需要在从库的初始化参数中设置DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数。这个例子由于主库和STANDBY在同一个服务器上,所以必须设置这两个参数。

当主库和STANDBY在一个服务器上,LOCK_NAME_SPACE参数是必须要设置的。这个参数的值和INSTANCE_NAME保持一致,但是要和主库的INSTANCE_NAME有所区别。

由于是Windows环境,还需要新建立一个服务:

SQL> HOST ORADIM -NEW -SID TESTST -STARTMODE MANUAL

修改$ORACLE_HOME/network/admin目录下的listener.ora文件,在SID_LIST中添加下列信息,并重启监听:

(SID_DESC =
(ORACLE_HOME = F:oracleoracle920)
(SID_NAME = testst)
)

SQL> HOST LSNRCTL STOP

SQL> HOST LSNRCTL START

修改从库中的$ORACLE_HOME/network/admin目录下的sqlnet.ora文件,添加下列参数,用以检测死连接:

SQLNET.EXPIRE_TIME=2

修改主库和从库中的$ORACLE_HOME/network/admin目录下的tnsnames.ora文件,添加下面的配置:

TEST_STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = yangtingkun)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = testst)
)
)

在从库中建立SPFILE,然后启动从库:

SQL> CONN SYS@TEST_STANDBY AS SYSDBA
请输入口令:
已连接到空闲例程。
SQL> CREATE SPFILE FROM PFILE = 'F:ORACLEADMINTEST_STANDBYPFILEINITTESTST.ORA';

文件已创建。

SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。

Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;

数据库已更改。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

数据库已更改。

从库现在已经启动为应用归档模式,下面还需要设置一下主库参数:

SQL> CONN YANGTK/YANGTK@TEST
已连接。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'SERVICE=TEST_STANDBY';

系统已更改。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2 = ENABLE;

系统已更改。

参数修改完毕,尝试归档当前的日志:

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

系统已更改。

最后,验证一下物理STANDBY是否已经成功建立:

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

会话已更改。

SQL> SELECT SEQUENCE#, DEST_ID, FIRST_TIME, NEXT_TIME
2 FROM V$ARCHIVED_LOG
3 WHERE FIRST_TIME > SYSDATE - 1
4 ORDER BY SEQUENCE#;

SEQUENCE# DEST_ID FIRST_TIME NEXT_TIME
---------- ---------- ------------------- -------------------
430 1 2007-03-04 10:37:59 2007-03-04 14:00:38
430 2 2007-03-04 10:37:59 2007-03-04 14:00:38

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

系统已更改。

SQL> SELECT SEQUENCE#, DEST_ID, FIRST_TIME, NEXT_TIME
2 FROM V$ARCHIVED_LOG
3 WHERE FIRST_TIME > SYSDATE - 1
4 ORDER BY SEQUENCE#;

SEQUENCE# DEST_ID FIRST_TIME NEXT_TIME
---------- ---------- ------------------- -------------------
430 1 2007-03-04 10:37:59 2007-03-04 14:00:38
430 2 2007-03-04 10:37:59 2007-03-04 14:00:38
431 1 2007-03-04 14:00:38 2007-03-04 14:02:19
431 2 2007-03-04 14:00:38 2007-03-04 14:02:19

登陆从库检查:

SQL> CONN /@TEST_STANDBY AS SYSDBA
已连接。
SQL> SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# APP
---------- ---
430 YES
431 YES

至此物理STANDBY已经成功建立。

yangtingkun 发表于:2007.03.04 14:13 ::分类: ( ORACLE ) ::阅读:(5282次) :: 评论 (16)
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

您好,小弟是一个ORACLE初学者,请教一下您的这篇文章中,
“启动数据库后建立从库所需的PFILE和CONTROLFILE:”一步中SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'F:ORACLEORADATATEST_STANDBYCONTROL01.CTL' REUSE;
这里指定的路径是STANDBY库的CONTROLFILE么?如果重做这个控制文件岂不是没有任何意义?在运行这一步时之前STARTUP的是主库还是STANDBY库?创建CONGTROLFILE时STANDBY库需要SHUTDOWN么?
望大师不吝赐教:)

guzhengming 评论于: 2007.03.06 11:44
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

这个路径是STANDBY数据库的控制文件路径
启动的是主库,创建控制文件的时候从库还没有启动。

yangtingkun 评论于: 2007.03.07 10:03
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

谢谢!但是我按照您的方法进行到“在从库中建立SPFILE”一步时,出现错误:
SQL> CREATE SPFILE FROM PFILE='DtonguerogramoracleadminIRRBBK_STANDBYpfileinitirrbbk_standby.ora';
CREATE SPFILE FROM PFILE='DtonguerogramoracleadminIRRBBK_STANDBYpfileinitirrbbk_standby.ora'
*
ERROR 位于第 1 行:
ORA-00600: internal error code, arguments:[kspsetpao1], [1497], [1433], [*],
[user_dump_dest], [44], [], []
请问这是为什么?我查了一下user_dump_dest应该是没有问题的。(irrbbk_standby是我的从库名,irrbbkst是我的从库instance名)谢谢大师:)

guzhengming 评论于: 2007.03.16 10:31
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

ORA-600 [kspsetpao1] is reported when Oracle fails to write to a spfile. Error can be reported when running create spfile from pfile or when modifying/adding a parameter to spfile.

错误不一定是user_dump_dest参数引起的,仔细检查所有的参数。

BTW:这一步不是必须的,如果短时间内无法定位问题。你可以考虑利用pfile启动,而从跳过这一步。

yangtingkun 评论于: 2007.03.16 11:19
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

我试过用PFILE启动出现错误:
SQL> startup pfile='DtonguerogramoracleadminIRRBBK_STANDBYpfileinitirrbbk_standby.ora';
ORA-00439: feature not enabled: Managed Standby

路径是没错的.我的PFILE内容如下:

*.aq_tm_processes=1
*.background_dump_dest=Dtonguerogramoracleadminirrbbk_standbybdump
*.compatible='9.2.0.0.0'
*.control_files=("Etonguerogramoracleoradatairrbbk_standbyCONTROL01.CTL","Etonguerogramoracleoradatairrbbk_standbyCONTROL02.CTL","Etonguerogramoracleoradatairrbbk_standbyCONTROL03.CTL")
*.core_dump_dest=Dtonguerogramoracleadminirrbbk_standbycdump
*.db_block_size=8192
*.db_cache_size=25165824
*.db_domain='cattsoft.com'
*.db_file_multiblock_read_count=16
*.db_name='irrbbk'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=irrbbkXDB)'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name='irrbbkst'
*.java_pool_size=33554432
*.job_queue_processes=10
*.large_pool_size=8388608
*.log_archive_start=TRUE
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=50331648
*.sort_area_size=524288
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest=DtonguerogramoracleadminIRRBBK_STANDBYudump
*.log_archive_dest_1='Etonguerogramoracleoradatairrbbk_standbyARCHIVE'
standby_archive_dest='Etonguerogramoracleoradatairrbbk_standbySTANDBYARCHIVE’
db_file_name_convert='EtonguerogramORACLEORADATAIRRBBK', 'EtonguerogramORACLEORADATAIRRBBK_STANDBY'
log_file_name_convert='EtonguerogramORACLEORADATAIRRBBK', 'EtonguerogramORACLEORADATAIRRBBK_STANDBY'
standby_file_management=AUTO
remote_archive_enable=TRUE
lock_name_space=irrbbkst
其中irrbbk是我的主库名,irrbbk_standby是我的从库名,irrbbkst是我的从库instance名,是否是因为这两者不统一,造成ORACLE无法辨别呢?而且其中*.db_name='irrbbk'一项我填的是主库名,后来我试着填入从库名,错误依旧.
希望大师能替我解答,万分感谢smile

guzhengming 评论于: 2007.03.16 17:02
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

这里很难描述清楚
你去ITPUB上发一个帖子,然后将所有的步骤和最终错误信息完整的贴出来。

yangtingkun 评论于: 2007.03.16 17:53
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

are you using enterprise edition

standby 评论于: 2007.03.18 01:53
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

what version are you using

standby 评论于: 2007.03.18 01:55
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

9204

yangtingkun 评论于: 2007.03.18 10:01
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

I was asking guzhengming, I think he's not using enterprise edition. He can check with "select * from v$option;" to see if data guard is available.

standby 评论于: 2007.03.19 08:15
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

ORA-00439: feature not enabled: Managed Standby

standby 评论于: 2007.03.19 08:52
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

smile

standby 评论于: 2007.03.25 06:22
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

好,晚上继续回去试一下,搞了一次没有成功sad.gif

bq_wang 评论于: 2007.10.18 17:36
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

其实在一台机器上和两台机器上区别不大。
注意一些初始化参数的设置就可以了

yangtingkun 评论于: 2007.10.22 10:53
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

我在linux服务器上试验的,但是我没法进standby库,用户名密码是不是要换过呢,它总抱错说

ORA-01031: insufficient privileges

sunsir 评论于: 2007.11.15 17:47
re: DATA GURAD在同一台服务器上建立物理STANDBY [回复]

SET ORACLE_SID

yangtingkun 评论于: 2007.11.16 01:15

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...