如果Oracle数据库是以read only模式打开的,则无法通过db link访问远程数据库。因为只要通过db link,即使只执行select,oracle也是要开启分布式事务支持的,事务需要分配回滚段,而read only模式下是没有online的回滚段的:
SQL>select id from auction_auctions@lnk_db1 where rownum=1;
select id from auction_auctions@lnk_db1 where rownum=1
*
ERROR at line 1:
ORA-16000: database open for read-only access
在一个read write的库上做个测试,可以看到通过db link的查询确实开启了事务,并且分配了回滚段。
SQL>select sid from v$mystat where rownum=1;
SID
----------
1270
SQL>select 1 from dual@lnk_db1;
1
----------
1
SQL>select s.sid,s.serial#,s.sql_hash_value,
2 r.segment_name,
3 t.xidusn,
4 t.xidslot,
5 t.xidsqn
6 from v$session s,
7 v$transaction t,
8 dba_rollback_segs r
9 where s.taddr = t.addr
10 and t.xidusn = r.segment_id(+);
SID SERIAL# SQL_HASH_VALUE SEGMENT_NA XIDUSN XIDSLOT XIDSQN
---------- ---------- -------------- ---------- ---------- ---------- ----------
1270 37655 0 _SYSSMU10$ 10 45 2042124
可以看到session 1270虽然只执行了一条select语句,但是由于使用了db link,确实开启了一个活动事务,并且分配了一个回滚段_SYSSMU10$。
Update:实际上还是有办法绕过这个问题的。Oracle提供了read only的事务,是无须用到回滚段的。
SQL>select 1 from dual@lnk_db1;
select 1 from dual@lnk_db1
*
ERROR at line 1:
ORA-16000: database open for read-only access
SQL>set transaction read only;
Transaction set.
SQL>select 1 from dual@lnk_db1;
1
----------
1
参考:Note:437254.1 Ora-16000 Generated Selecting DB Link On Read Only Database.
本文来自:http://rdc.taobao.com/blog/dba/html/206_ora-16000_on_read_only_database_using_dblink.html
分享到:
相关推荐
此错误通常发生在尝试启动或访问Oracle数据库时,系统提示“ORA-01033: Oracle初始化或关闭中”。该错误表明Oracle实例正处于启动或关闭的过程中,未能完成其正常的启动或关闭流程。 #### 二、问题现象 当遇到ora-...
在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$SESSION`时。该错误的出现意味着在查询结果中存在一些多字节字符(通常是...
在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...
在Oracle数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...
在Oracle数据库系统中,"ORA-01036:非法的变量名/编号"是一个常见的错误,通常出现在PL/SQL代码或者SQL查询语句中,当你尝试使用一个不正确或者未定义的变量时,Oracle数据库会抛出这个错误。这个错误可能是由于...
ORA-01033 错误通常出现在尝试启动或连接到Oracle数据库时,表明数据库正处于初始化或关闭过程中。该错误可能由多种原因引起,包括但不限于数据库服务尚未完全启动、系统资源不足或数据库文件损坏等。 #### 解决...
NULL 博文链接:https://springlin.iteye.com/blog/1520668
ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
ORA-12154: TNS: 无法解析指定的连接标识符的解决方法
#### ORA-00073: Value Used Only When 指定的值仅在特定情况下使用。这可能是由于配置错误或逻辑错误。 #### ORA-00074: Parameter Not Specified 未指定参数。这可能是由于DDL语句格式错误或逻辑错误。 #### ORA...
在Oracle数据库中,"ORA-00904"是一个常见的错误代码,它表示尝试引用一个不存在或无效的标识符。在这个场景下,错误信息提到的是"WM_CONCAT"函数,这表明在Oracle 19c数据库环境中,用户尝试使用WM_CONCAT函数,但...
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
### 远程登录并启动Oracle数据库及解决ORA-01031问题 #### 引言 在Oracle数据库管理过程中,远程登录与启动数据库是非常重要的操作之一。这不仅能够提高数据库管理员的工作效率,还能帮助他们更好地监控和维护...
- 检查`ORACLE_SID`键值是否与数据库的SID相匹配。如果不匹配,修改为正确的SID值。 - 如果`ORACLE_SID`不存在,创建相应的键值对,确保值为数据库的SID。 2. **设置环境变量**: - 在系统环境变量中添加或修改`...
然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-01704: 文字字符串过长”的错误。这个错误通常意味着你试图插入的字符串超过了Oracle数据库允许的最大长度,对于VARCHAR2类型...
### Oracle回收站功能详解与彻底删除表方法 #### 一、Oracle回收站功能概述 Oracle数据库自10g版本开始引入了回收站功能(Recycle Bin),这一特性为数据库管理员提供了一种简单而强大的方式来恢复误删的数据对象。...
### Oracle 12c ORA-01017 错误详解及解决方案 #### 错误概述 在Oracle数据库管理过程中,用户可能会遇到ORA-01017错误:“用户名/口令无效;登录被拒绝”。这一错误通常出现在尝试连接数据库时,提示提供的用户名...
oracle报错ora-12541:TNS无监听程序