Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1114370
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Mysql/postgreSQL

2013-04-25 10:05:57

特殊事件的控制

时间紧任务急,呵呵,这里三思就只描述流程,过程就不做演示了,相信你的智力,你一定能看懂。

1、导入传输表空间

第一步:屏蔽guard保护,逻辑standby端操作

SQL> ALTER SESSION DISABLE GUARD;

第二步:导入传输表空间,逻辑standby端操作

具体操作步骤可参考三思之前的笔记:使用可传输表空间的特性复制数据!

第三步:恢复guard保护(或者直接退出本session也成),逻辑standby端操作

SQL> ALTER SESSION ENABLE GUARD;

第四步:导入传输表空间,primary端操作

同第二步。

2、使用物化视图

应用不支持下列对物化视图的ddl操作:

create/alter/drop materialized view

create/alter/drop materialized view log

因此,对于现有逻辑standby,primary端对物化视图的操作不会传播到standby端。不过,对于primary创建物化视图之后创建逻辑standby,则物理视图也会存在于逻辑standby端。

对于同时存在于primary和逻辑standby的ON-COMMIT物化视图,逻辑standby会在事务提交时自动刷新,而对于ON-DEMAND的物化视图不会自动刷新,需要手动调用dbms_mview.refresh过程刷新。

对于逻辑standby端建立的ON-COMMIT物化视图会自动维护,ON-DEMAND物化视图也还是需要手工调用dbms_mview.refresh过程刷新。

3、触发器及约束的运作方式

默认情况下,约束和触发器同样会在逻辑standby端正常工作。

对于有sql应用维护的约束和触发器:

约束:由于约束在primary已经检查过,因此standby端不需要再次检查

触发器:primary端操作时结果被记录,在standby端直接被应用。

没有sql应用维护的约束和触发器:

约束有效

触发器有效

优化逻辑standby

1、创建Primary Key RELY 约束

某些情况下能够有效提高sql应用效率,具体可参见第三部分第一章。

2、生成统计信息

这个很容易理解嘛,因为cbo要用,生成方式即可用analyze,也可以用dbms_stats包。看你个人喜好了。

3、调整进程数

A).调整APPLIER进程数

首先查看当前空闲的applier进程数:

JSSLDG2> SELECT COUNT(*) AS IDLE_APPLIER FROM V$LOGSTDBY_PROCESS

  2  WHERE TYPE = 'APPLIER' and status_code = 16166;

IDLE_APPLIER

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

           0

提示:

status_code = 16166 表示进程是空闲状态,可以看到"STATS"为"ORA-16116: no work available",当然空闲的applier进程数为0不一定代表应用应用非常繁忙,也有可能是因为当前没什么需要应用的日志,因此甚至应用进程都没启动:)

检查事务的应用情况:

JSSLDG2> select name,value from v$logstdby_stats where name like 'TRANSACTION%';

NAME                          VALUE

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

transactions ready             896

transactions applied           871

如果ready-applied的值比applier进程数的两倍还要大,则说明你有必要考虑增加applier进程的数目了,反之如果applied与ready的值差不多大,或者其差比applier进程数还小,则说明applier进程数偏多,你有必要考虑适当减小进程的数目。

如果确认当前applier进程都非常繁忙,要增加applier进程,可按如下步骤操作:

停止sql应用

ALTER DATABASE STOP LOGICAL STANDBY APPLY; 

调整applier进程数为20,默认是5个

EXECUTE DBMS_LOGSTDBY.APPLY_SET('APPLY_SERVERS', 20);

重启sql应用

ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

B).调整PREPARER进程数

需要调整preparer进程数的机会不多,通常只有一种情况:applier进程有空闲,transactions ready还很多,但没有空闲的preparer进程,这时候你可能需要增加一些preparer进程。

要检查系统是否存在这种情况,可以通过下列的sql语句:

首先检查空闲preparer进程数量:

SELECT COUNT(*) AS IDLE_PREPARER FROM V$LOGSTDBY_PROCESS WHERE TYPE = 'PREPARER' and status_code = 16166;

检查事务的应用情况:

select name,value from v$logstdby_stats where name like 'TRANSACTION%';

查看当前空闲的applier进程数:

SELECT COUNT(*) AS IDLE_APPLIER FROM V$LOGSTDBY_PROCESS WHERE TYPE = 'APPLIER' and status_code = 16166;

如果确实需要调整preparer进程数量,可以按照下列步骤,例如:

停止sql应用

ALTER DATABASE STOP LOGICAL STANDBY APPLY; 

调整preparer进程数量为4(默认只有1个preparer进程)

EXECUTE DBMS_LOGSTDBY.APPLY_SET('PREPARE_SERVERS', 4); 

重启sql应用

ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE; 

4、调整LCR使用的内存

执行下列语句,查询当前LCR可用的最大内存:

JSSLDG2> select * from v$logstdby_stats where name='maximum SGA for LCR cache';

NAME                                 VALUE

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

maximum SGA for LCR cache            30

要增加LCR可用的内存,按照下列步骤操作:

停止sql应用:

JSSLDG2> alter database stop logical standby apply;

已更改。

调整内存大小,注意默认单位是M:

JSSLDG2> execute dbms_logstdby.apply_set('MAX_SGA',100);

PL/SQL 过程已成功完成。

重启sql应用

JSSLDG2> alter database start logical standby apply immediate;

数据库已更改。

5、调整事务应用方式

默认情况下逻辑standby端事务应用顺序与primary端提交顺序相同。

如果你希望逻辑standby端的事务应用不要按照顺序的话,可以按照下列的步骤操作:

① 停止sql应用:

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

② 允许事务不按照primary的提交顺序应用

SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('PRESERVE_COMMIT_ORDER', 'FALSE');

③ 重新启动sql应用

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

恢复逻辑standby按照事务提交顺序应用的话,按照下列步骤:

① 还是先停止sql应用:

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

② 重置参数PRESERVE_COMMIT_ORDER的初始值:

SQL> EXECUTE DBMS_LOGSTDBY.APPLY_UNSET('PRESERVE_COMMIT_ORDER');

③ 重新启动sql应用:

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


阅读(417) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~