oracle 10g 建立logical standby

来源:互联网 发布:js事件代码 编辑:程序博客网 时间:2024/04/30 12:23

建立逻辑备库之前,应该先建立物理备库

(1)--确定逻辑备库所支持的方案,注意,sys、system用户不支持,所以在sys、system用户等方案中建立的对象无法传递到逻辑备库。
select username from dba_users where username not in (select owner from dba_logstdby_skip);
USERNAME
------------------------------
TTS
RMAN
TEST
HR
PERFSTAT
SCOTT
TSMSYS

(2)--确定不支持的对象,逻辑备库对一些类型不支持,如用户自定义类型,xml object、bfile等
select owner || '.' || table_name table_name, data_type,attributes from dba_logstdby_unsupported;

TABLE_NAME  DATA_TYPE ATTRIBUTES
-------------------------------------------------------------
HR.PARTNO NUMBER  Object Table

 

(3)--确定支持的对象中哪些无法被唯一标识,需要替这些对象加上主键或者unique约束。
select owner,table_name from dba_logstdby_not_unique
where table_name not in (select table_name from dba_logstdby_unsupported);

OWNER                          TABLE_NAME
------------------------------ ------------------------------
SCOTT                          BONUS
SCOTT                          SALGRADE
HR                             PARTS
HR                             COUNTRIES
HR                             PRODUCT
SCOTT                          TT1
HR                             TEST1
HR                             TEST
SCOTT                          CUSTOMERS
HR                             DIGITS
SCOTT                          TEST1
SCOTT                          SALES

 

为这些表加上主键或者唯一约束,因为逻辑备库的物理结构和主库不同,所以不能根据rowid定义备库的行,只能根据主键或者唯一约束来定位。

alter table scott.bonus add primary key(ename);

。。。

(3) 在主库和备库上均打开补充日志
 alter database add supplemental log data(primary key,unique index)columns;
select supplemental_log_data_pk pk_log,supplemental_log_data_ui ui_log from v$database;

PK_ UI_
--- ---
YES YES

 

(4) 在主库上创建logical standby controlfile

alter database create logical standby controlfile as '/opt/oracle/bak/control01.ctl' reuse;

 

(5)关闭备库,拷贝上面创建的控制文件,覆盖备库的控制文件

shutdown immediate;

cp /opt/oracle/bak/control01.ctl /opt/oracle/oradata/standby/

 

(6)启动备库到mount状态,应用日志

startup mount;

alter database recover managed standby database disconnect from session;

 

(7) 启动逻辑备库

alter database activate standby database;
若出现ORA-16228:
Insufficient recovery for logical standby
Cause:  Insufficient amount of recovery was run for logical standby instantiation.
Action:  Continue to recover the database using ALTER DATABASE RECOVER MANAGED STANDBY DATABASE.
继续执行 alterdatabase recovermanaged standby database;
然后再执行 alter database activate standby database;

 

(8)重新启动备库到mount状态,修改逻辑备库的数据库名,修改完后备库自动关闭
shutdown immediate
startup mount

nid target=sys/oracle@standby dbname=standby   --修改控制文件和数据文件中的数据库名
orapwd file=$ORACLE_HOME/dbs/pwdstandby.ora password=oracle  --创建对应于新数据库名的密码文件

--修改参数文件中的db_name

create pfile from spfile;
vim pfile
修改db_name='standby'

create spfile from pfile;

 

(9)启动改名后的备库

startup mount;
alter database open resetlogs;

 

(10)检查有没有临时文件,如果没有,为临时表空间添加临时文件
select * from v$tempfile;
alter tablespace temp add tempfile '/opt/oracle/oradata/standby/temp01.dbf' size 50M;

 

(11)应用日志

alter database start logical standby apply;

--关闭日志用如下命令:alter database stop logical standby apply;


(12)查看日志应用情况

select sequence#,applied from dba_logstdby_log;

select value from v$logstdby_stats where name='coordinator state'; --如果没有返回行,证明日志应用没有打开。

 

(13)在主库做修改提交,切换日志,到备库查询,判断是否已经应用修改。

 

 

原创粉丝点击