45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:如何创建logical standby?

如何创建logical standby?

2016-08-28 17:40:16 来源:www.45fan.com 【

如何创建logical standby?

1.试验环境

SQL> select * from v$version;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

主库名:ning

备库名:test

2.数据类型支持情况

支持的数据类型

CHAR

NCHAR

VARCHAR2 and VARCHAR

NVARCHAR2

NUMBER

DATE

TIMESTAMP

TIMESTAMP WITH TIMEZONE

TIMESTAMP WITH LOCAL TIMEZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

RAW

CLOB and NCLOB

BLOB

LONG

LONG RAW

BINARY_FLOAT

BINARY_DOUBLE

不支持的数据类型

BFILE

ROWID, UROWID

User-defined types

Collections (including VARRAYS and nested tables)

XML type

Encrypted columns

Multimedia data types (including Spatial, Image, and Context)

3.存储类型支持

支持的存储类型

堆表

索引组织表

簇表

不支持的存储类型

压缩段

4.PL/SQL包支持

支持的PL/SQL包

不修改系统元数据的包

不会产生redo的包

比如:DBMS_OUTPUT, DBMS_RANDOM,DBMS_PIPE, DBMS_DESCRIBE, DBMS_OBFUSCATION_TOOLKIT,

DBMS_TRACE, 和DBMS_METADATA.

不支持的PL/SQL包

修改系统元数据的包

DBMS_JAVA, DBMS_REGISTRY,DBMS_ALERT, DBMS_SPACE_ADMIN, DBMS_REFRESH, DBMS_REDEFINITION,

DBMS_SCHEDULER, 和DBMS_AQ

例外情况,dbms_job包是被支持的,在主库添加的job会复制到备库,但不会自动运行。

5.不支持的数据库对象

不支持的schema

SQL> SELECT OWNER FROM DBA_LOGSTDBY_SKIP WHERE STATEMENT_OPT = 'INTERNAL SCHEMA';

OWNER

----------

SYSTEM

SYS

DIP

OUTLN

WMSYS

DBSNMP

已选择6行。

不支持的表:

压缩表

使用了不支持的数据类型的表

列被加密过的表

下面的sql可以查询出不支持的数据库对象

SQL>SELECT DISTINCT OWNER,TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED ORDER BY

OWNER,TABLE_NAME;

未选定行

6.忽略的SQL语句

一般情况下,在主库执行的sql语句都会在备库执行,但以下除外:

ALTER DATABASE

ALTER SESSION

ALTER MATERIALIZED VIEW

ALTER MATERIALIZED VIEW LOG

ALTER SYSTEM

CREATE CONTROL FILE

CREATE DATABASE

CREATE DATABASE LINK

CREATE PFILE FROM SPFILE

CREATE SCHEMA AUTHORIZATION

CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW LOG

CREATE SPFILE FROM PFILE

DROP DATABASE LINK

DROP MATERIALIZED VIEW

DROP MATERIALIZED VIEW LOG

EXPLAIN

LOCK TABLE

SET CONSTRAINTS

SET ROLE

SET TRANSACTION

7.确保表都有唯一性约束

由于逻辑库的rowid和主库不一致。数据就需要唯一性标识:

如果有主键,则使用主键

如果没有主键,但有NOT NULL的唯一性约束,则使用该唯一性约束

如果两者都没有,则使用整个数据行

所有,为了更好的性能,确保每个table都有主键

查找没有主键或唯一性约束的表

SQL> select owner,table_name

2 from dba_logstdby_not_unique

3 where (owner,table_name) not in

4 (select distinct owner,table_name from dba_logstdby_unsupported)

5 and bad_column='Y';

未选定行

如果上面的查询发现有不符合条件的table,可以为其添加主键。如果应用能确保表中的数据是唯一的,

为了不影响性能,也可以使用rely constraints,关于rely,constraints,请参考Data Warehouse Guide文档笔记(三):RELY constraints

alter table test add constraints primary key(id) rely disable;

8.创建physical standby

具体过程可参考:

Oracle10G Physical Standby Database笔记

利用rman创建standby(一)

利用rman创建standby(二)

9.停止physical standby的恢复进程

SQL> alter database recover managed standby database cancel;

数据库已更改。

10.在主库redo中生成数据字典信息

logical standby使用了logminer技术,需要生成数据字典信息。

SQL> exec dbms_logstdby.build

PL/SQL 过程已成功完成。

执行该过程需要等到所有活动事务结束。所以,如果有条件的话,最好重启主库到restrict模式后再执行

。另外,还要利用flashback查询来获得一致性数据,所有请将undo_retention设置得足够大。

11.为备库生成spfile

SQL> create spfile from pfile;

文件已创建。

SQL> shutdown immediate;

ORA-01109: 数据库未打开

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup nomount

ORACLE 例程已经启动。

Total System Global Area 142606336 bytes

Fixed Size 1247732 bytes

Variable Size 83887628 bytes

Database Buffers 50331648 bytes

Redo Buffers 7139328 bytes

SQL> alter database mount standby database;

数据库已更改。

12.将physical standby转换成logical standby

SQL> alter database recover to logical standby test;

数据库已更改。

该操作同时会将参数db_name设置为test

13.打开logical standby

SQL> alter database open resetlogs;

数据库已更改。

14.启用日志应用

SQL> alter database start logical standby apply;

数据库已更改。

在alert日志中可以发现相关的恢复进程启用成功的信息。

15.验证

在主库上

SQL> insert into ning.test values(2,'a');

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

等待一段时间后,从逻辑备库上查询,得到结果

SQL> select * from ning.test;

ID NAME

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

2 a

说明逻辑备库已经运行正常。至此,逻辑备库创建成功。

16.Logical standby相关视图

v$logstdby

v$logstdby_process

v$logstdby_state

v$logstdby_stats

v$logstdby_transcation

dba_logstdby_events

dba_logstdby_history

dba_logstdby_log

dba_logstdby_not_unique

dba_logstdby_parameters

17.启用实时日志应用(real-time apply)

oracle10g加入了实时应用的新特性,需要使用lgwr来传送日志才能使用。

a.首先在备库添加standby redo logfile

SQL> alter database add standby logfile group 4 ('e:/oracle/ora10/oradata/test/standby

04.redo') size 10m;

Database altered.

SQL> alter database add standby logfile group 5 ('e:/oracle/ora10/oradata/test/standby

05.redo') size 10m;

Database altered.

SQL> alter database add standby logfile group 6 ('e:/oracle/ora10/oradata/test/standby

06.redo') size 10m;

Database altered.

SQL> alter database add standby logfile group 7 ('e:/oracle/ora10/oradata/test/standby

07.redo') size 10m;

Database altered.

b.在主库将日志传送方式改为lgwr

alter system set log_archive_dest_2='service=test lgwr async db_unique_name=test'

c.停止日志应用

SQL> alter database stop logical standby apply;

数据库已更改。

d.启用real-time apply

SQL> alter database start logical standby apply immediate;

数据库已更改。

e.在主库插入记录并commit

SQL> insert into ning.test values(3,'b');

已创建 1 行。

SQL> commit;

提交完成。

f.马上在备库就可以查到对应的数据了

SQL> select * from ning.test;

ID NAME

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

2 a

3 b

 

本文地址:http://www.45fan.com/a/question/68987.html
Tags: 创建 standby logical
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部