创建用户供备库查询和ORA-04045 ORA-16000

背景和目的:
为不影响主库性能,创建一用户和视图只允许在备库访问。涉及视图中表较大,结构设计不合理,性能稍差。

过程:
创建视图、用户、授权、创建同义词、验证
1、produser 用户创建视图
切换到g_tab等用户下
alter session set current_schema = produser;

替换下面view的sql
--create or replace view v_test as select * from produser.g_tab where rownum <10;
--select * from v_test ;

2、sys 用户创建查询权限用户quser
create user quser identified by Zgy10jh_25
default tablespace TS_TET
temporary tablespace temp
quota unlimited on TS_TET;

--授权
grant connect to quser;
alter user quser default role none;
--登录权限
grant create session to quser;

--创建同义词,不加public后面不带用户不能查
create public synonym v_test for produser.v_test;

--授查询权限
grant select on v_test to quser;

3、quser 查询用户访问
--用quser登录后查询时候要在视图前加上 produser ,否则会报视图不存在, 这个视图属于produser,而用户quser不具备创建视图权限
alter session set current_schema = quser;
select name from v_test where rownum<10;

4、备库查询出现下面异常,但主库可查询,因为基表字段有修改

主库节点可以查询,是视图中基表字段被修改导致备库报这个错。备库内存信息没更新,查询时发现与基表结构有差异,重新编译下就可以了
ERROR at line 1:
ORA-04045: errors during recompilation/revalidation of PUBLIC.V1
ORA-16000: database open for read-only access
主库手动编译
alter view test.v1 compile;
或 主库查询下这个视图就可以自动触发视图的自动编译,进而同步到从库执行
select * from test.v1 where rownum<2;

posted @ 2023-10-27 17:07  ritchy  阅读(79)  评论(0编辑  收藏  举报