ITPub博客

首页 > 数据库 > Oracle > Logical Standby Database的配置步骤.

Logical Standby Database的配置步骤.

原创 Oracle 作者:imlihj2007 时间:2008-08-26 16:42:18 0 删除 编辑

Logical Standby Database的配置步骤.

一:首先要确认主数据库处于归档模式

Archive log list

如果是没有归档的话要做如下操作

Shutdown immediate

Startup mount

Alter database archivelog;

Alter system archive log start

Archive log list

Alter database open

后:将主数据库置为FORCE LOGGING模式.在主数据库创建之后做如下操作:

ALTER DATABASE FORCE LOGGING;

确认主数据库是归档的并定义好本地归档.如下:

SQL >ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=e:oracleoradataorclarchive MANDATORY' SCOPE=BOTH;(路径根据实际的生产环境来确定)

二: 确认LOG_PARALLELISM初始化参数值

Logical Standby Database要求此参数的值为1,是个缺省值.如果查出来的参数值为1则不需要做修改,如果不是1值则要用ALTER SYSTEM SET命令做修改.具体操作如下:

SQL>SHOW PARAMETER LOG_PARALLELISM ------查看参数的当前值

SQL>ALTER SYSTEM SET LOG_PARALLELISM=1 SCOPE=BOTH;

修改完以后要关闭数据库并重新启动此参数才有效.

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP

三:确认支持的数据类型和表(略):

四:确认主数据库可以补足日志(Supplemental Logging)

SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;

SUP SUP

--- ---

NO NO (NO值表示此时主数据库是不支持补足日志的)

使主数据库可以补足日志

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;(这条语句将有关由主数据修改的行唯一信息可以通过日志传到备用数据库中并做Log Apply)

SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

确认一下主数据库此时支持补足日志

SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;

SUP SUP

--- ---

YES YES (YES值表示此时主数据库是支持补足日志的)

SUPPLEMENTAL_LOG_DATA_PK:支持补足日志,其信息是primary key

SUPPLEMENTAL_LOG_DATA_UI:支持补足日志,其信息是unique index

五:在主数据库创建一个交替的表空间.

并用DBMS_LOGMNR_D.SET_TABLESPACE将某些表放到这个表空间中.因为在逻辑备用数据库中有一些表是属于SYS和SYSTEM用户的,而这些是放在表空间的.这些表可能在一段时间后记录猛增.为了使SYSTEM表空间不会被用满而导致数据库DOWN机,建立这个交替的表空间来存放这些表.

SQL>CREATE TABLESPACE logmnrts DATAFILE '/disk1/oracle/dbs/logmnrts.dbf'

SIZE 25M AUTOEXTEND ON MAXSIZE 2048M

SEGMENT SPACE MANAGEMENT AUTO;(根据实际的生产环境具体修改)

SQL>EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');

(上面一步EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');可以在以后的维护中再做相应的维护)

六:创建逻辑备用数据库

确认主数据库的数据文件和日志文件(冷备数据库)

在主数据库中通过查询V$DATAFILE获得数据文件的位置

SQL> select name from v$datafile;

关闭数据库:SQL>SHUTDOWN IMMEDIATE

将前面得到的数据文件拷贝到一个临时的位置 F:ORACLE

启动数据库到MOUNT状态下:SQL>STARTUP MOUNT

为逻辑备用数据库创建一个备份的控制文件:

ALTER DATABASE BACKUP CONTROLFILE TO

f:oraclebkcontrol.ora';

七: 将主数据库放在restricted session模式下

ALTER SYSTEM ENABLE RESTRICTED SESSION;

建立Logminer字典(Logical Standby Database在分解REDO LOG为SQL语句时需要Logminer工具,而这个工具在使用之前需要建立Logminer字典):

SQL> ALTER DATABASE OPEN;

SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

取消主数据库的restricted session模式使用户可以执行DML和DDL语句:

SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

八:查看最近的归档日志(在后面的逻辑备用数据库的创建过程中需要用到)

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;(对当前日志做归档)

SQL> SELECT NAME FROM V$ARCHIVED_LOG

WHERE (SEQUENCE#=(SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG

WHERE DICTIONARY_BEGIN = 'YES' AND STANDBY_DEST= 'NO'));

NAME

-----------------------------------------------------------------

E:ORACLEORADATAORCLARCHIVE1_19.DBF

九:为备用数据库创建准备初始化参数:

SQL> CREATE PFILE='f:oracleinitstdby.ora' FROM SPFILE;

在备用数据库服务器修改初始化参数(刚拷贝过来的初始化参数文件)修改后的值大概如下:

在备用数据库一端创建一个新的实例.如下操作:

oradim –new –sid standby –startmode auto

在主数据配置qlnet.ora文件.配置完之后分别如下:

SQLNET.EXPIRE_TIME=2

db_name='bak'

log_archive_dest_1='LOCATION=E:oracleoradatabakarch MANDATORY'

standby_archive_dest='E:oracleoradatabakarch1'

log_archive_start=TRUE

lock_name_space=bak

这些的地方都是主要的地方!

在主数据库和备用数据库用lsnrctl start和lsnrctl stop启动和关闭监听器.然后在主数据库用tnsping standby和在备用数据库用tnsping orcl试看两个库是否是通的.

用初始化参数文件启动数据库到MOUNT状态下.

SQL> STARTUP MOUNT PFILE= f:oracleadminstandbypfileinitstdby.ora;

十:在备用数据库打开DATA GUARD

SQL> ALTER DATABASE GUARD ALL;

SQL> ALTER DATABASE OPEN RESETLOGS;(ALTER DATABASE OPEN)

十一:使用DBNEWID(nid)工具来重设数据库名.

要先关闭数据库并把数据库启动为MOUNT状态:

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT PFILE= f:oracleinitstdby.ora;

用DBNEWID工具,操作如下(这个是在命令行下操作):

nid TARGET=SYS/oracled@orcl DBNAME=standby

然后再关闭数据库:SQL>SHUTDOWN IMMEDIATE

改变初始化参数: db_name=standby

启动数据库为MOUNT状态:SQL>STARTUP MOUNT;

为备用数据库创建SERVER PARAMETER FILE:

SQL>CREATE SPFILE FROM PFILE= f:oracleinitstdby.ora;

关闭数据库然后用SPFILE重启动数据库:

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP MOUNT

SQL>ALTER DATABASE OPEN RESETLOGS;

十二:给备用数据库创建一个新的临时文件(属于临时表空间)

先查看备用库中是否有临时文件,如果没有就直接创建,如果有要删除重新创建.(因为从主库的冷备份拷贝过来的临时文件在备用库中是不能用的.所以得重建)相应操作如下:

SQL> SELECT * FROM V$TEMPFILE;-------查看是否有临时文件

no rows selected

SQL> ALTER DATABASE TEMPFILE 'tempfilename' DROP;------删除重建前的临时文件

SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE

2> CONTENTS ='TEMPORARY';--------查看临时文件所属的临时表空间名

TABLESPACE_NAME

--------------------------------

TEMP

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE

2> 'f:oraclestandbytemp01.dbf'

3> SIZE 40M REUSE;--------给这个临时表空间重建一个临时文件

十三:注册归档日志和启动SQL Apply Services

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE

2> ' e:oracleoradataorclarc0004.001';------将最近的归档日志注册到Logical Standby Database.这里的e:oracleoradatastdarch ARCH1069826922_21.DBF是在前面得到的.

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY INITIAL;-----启动redo logs apply,用执行SQL语句的方式来apply redo logs.就是SQL Apply Services.到于INITIAL是第一次启动SQL Apply Services时要写的.后面的可以直接用如下操作

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;----停止

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;----启动

十四:在主数据库配置远程归档.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=payroll3' SCOPE=BOTH;

--------配置远程归档目录

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=ENABLE SCOPE=BOTH;

--------配置这个归档目录的状态为可用

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;----对当前日志进行归档,启动远程归档.

十五:测试!

查日志是否已经被注册到Logical Standby Database中.连接到备用数据库并查询DBA_LOGSTDBY_LOG视图.

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';

Session altered.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END

FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC

---------- ------------------- ------------------- --- ---

22 23-11月-04 14:00:17 23-11月-04 14:26:58 NO NO

1 rows selected.

连接到主数据库并归档部分日志.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.

再查询一下DBA_LOGSTDBY_LOG视图.

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';

Session altered.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END

2 FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC

---------- ------------------- ------------------- --- ---

22 23-11月-04 14:00:17 23-11月-04 14:26:58 NO NO

23 23-11月-04 14:26:58 23-11月-04 14:33:33 NO NO

2 rows selected.

(可以看到多出来一个新的归档日志)

检查日志中的数据是否Apply到逻辑备用数据库中

在逻辑备用数据库中查询DBA_LOGSTDBY_STATS视图来检查日志中的数据是否正被正确地Appled.

SQL> COLUMN NAME FORMAT A30

SQL> COLUMN VALUE FORMAT A30

SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS WHERE NAME = 'coordinator state';

NAME VALUE

------------------------------ ------------------------------

coordinator state INITIALIZING

在上面的输出中,coordinator进程正在初始化,这表明Log Apply Service正准备Apply SQL.但是日志中的数据还没有开始被Applied到逻辑备用数据库中.

查V$LOGSTDBY看当前的SQL Apply活动状态.连接到逻辑备用数据库中,查询V$LOGSTDBY视图.

SQL> COLUMN STATUS FORMAT A50

SQL> COLUMN TYPE FORMAT A12

SQL> SELECT TYPE, HIGH_SCN, STATUS FROM V$LOGSTDBY;

TYPE HIGH_SCN STATUS

------------ ---------- --------------------------------------------------

COORDINATOR ORA-16115: loading Log Miner dictionary data

READER ORA-16127: stalled waiting for additional transact

ions to be applied

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9879835/viewspace-1009570/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-25

  • 博文量
    109
  • 访问量
    1577026