Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1428308
  • 博文数量: 556
  • 博客积分: 12626
  • 博客等级: 上将
  • 技术积分: 5799
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-11 15:56
个人简介

从事IT基础架构多年,发现自己原来更合适去当老师……喜欢关注新鲜事物,不仅限于IT领域。

文章分类

全部博文(556)

文章存档

2019年(6)

2018年(15)

2017年(17)

2016年(11)

2015年(2)

2014年(2)

2013年(36)

2012年(54)

2011年(100)

2010年(41)

2009年(72)

2008年(14)

2007年(82)

2006年(104)

分类: Oracle

2009-11-21 22:08:22

    今天开发提了一个需求,他们想在DG上做一些统计,但希望把DG库中的两个临时表的写权限放开,便于一些特殊的统计。这么干合理不合理就不说了,为了老板们还得先解决问题。
   首先发现应用那边执行insert报ORA-16224的错误,检查guard_status现实是all,因为没有搞定查询用的用户执行alter session disable guard的权限问题,因此选择使用skip来解决。
执行方法为:
alter database stop logical standby apply;
execute dbms_logstdby.skip('SCHEMA_DDL','OWNER1','TABLE1');
execute dbms_logstdby.skip('DML','OWNER1','TABLE1');
execute dbms_logstdby.skip('SCHEMA_DDL','OWNER2','TABLE2');
execute dbms_logstdby.skip('DML','OWNER2','TABLE2'); 
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
alter database guard standby;
 
再次尝试insert成功,其余update和delete也没有问题了。这里将guard_statusshe设置为standby的目的就是让sys以外的用户可以修改不被guard保护的对象。查看dba_logstdby_skip视图可以看到被skip的对象。
 
   此问题解决后,突然发生的新的问题,由于自己的“手欠”,呵呵。一直想搞清楚alter session disable guard权限的问题,在尝试给那个用户赋予了sysdba时导致apply进程中断了,日志里面报错:
Errors in file /home/db/oracle/app/admin/CISG/bdump/cisg2_lsp0_762210.trc:
ORA-12801: error signaled in parallel query server P004
ORA-01031: insufficient privileges
LOGSTDBY Analyzer process P003 pid=37 OS id=696830 stopped
LOGSTDBY Apply process P006 pid=40 OS id=471434 stopped
LOGSTDBY Apply process P005 pid=39 OS id=835976 stopped
LOGSTDBY Apply process P007 pid=41 OS id=332118 stopped
LOGSTDBY Apply process P008 pid=42 OS id=475588 stopped
 
由于是grant引起的问题,因此需要用exec DBMS_LOGSTDBY.SKIP('NON_SCHEMA_DDL');
把执行不过去的这个ddl跳开(这里比较怪异的是正常来讲会出现LOGSTDBY id的信息,然后可以根据
后面写xid号使用DBMS_LOGSTDBY.SKIP_TRANSACION来解决(16进制数转换为10进制),这次的问题
并没有出现),执行命令为:
alter database stop logical standby apply;
exec DBMS_LOGSTDBY.SKIP('NON_SCHEMA_DDL');
alter database start logical standby apply immediate;
 
日志中出现了ORA-16205: DDL skipped due to skip setting的相关信息,说明处理生效了。
之后要使用DBMS_LOGSTDBY.UNSKIP('NON_SCHEMA_DDL');命令,不然以后的ddl都不生效了。
 
感觉DG这东西虽然省钱了,但各种限制过多,莫名其妙的问题也不少,如果不缺资金还是用第三方的一些工具来的省事。呵呵。
阅读(3200) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~