[20170511]DBLINK跨库查询遇到ORA-16000

[20170511]DBLINK跨库查询遇到ORA-16000.txt

--//如果在备库通过dblink跨库查询,如果在一个事务查询涉及2个dblink,会遇到ora-16000错误,做一个记录:

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

--//建立dblink.
CREATE PUBLIC DATABASE LINK LOOPBACK USING 'localhost:1521/book';
CREATE PUBLIC DATABASE LINK LOOP USING 'localhost:1521/book';

2.测试:
--//重新启动数据库,设置只读.
SYS@book> startup open read only
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.
Database opened.

--//以scott用户:
SCOTT@book> select sysdate from dual@loopback;
SYSDATE
-------------------
2017-05-11 08:44:52

SCOTT@book> select sysdate from dual@loop;
select sysdate from dual@loop
                         *
ERROR at line 1:
ORA-16000: database open for read-only access

--//如果提交就不出现错误.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select sysdate from dual@loop;
SYSDATE
-------------------
2017-05-11 08:46:01

3.如果1条语句包含2个dblink连接,问题依旧无法避开.
SCOTT@book> select sysdate from dual@loopback,dual@loop;
select sysdate from dual@loopback,dual@loop
                         *
ERROR at line 1:
ORA-16000: database open for read-only access

SCOTT@book> host oerr ora 16000
16000, 00000, "database open for read-only access"
// *Cause:  The database was opened for read-only access.  Attempts to
//          modify the database using DML or DDL statements generate this
//          error.
// *Action: In order to modify the database, it must first be shut down and
//          reopened for read/write access.

--//我记忆里10g好像在只读的数据库,无法使用dblink查询的.仅仅做一个记录.

时间: 2024-10-04 01:14:51

[20170511]DBLINK跨库查询遇到ORA-16000的相关文章

oracle跨库查询dblink的用法实例详解_oracle

本文实例讲述了oracle跨库查询dblink的用法.分享给大家供大家参考,具体如下: 1.创建之前的工作 在创建dblink之前,首先要查看用户是否有相应的权限.针对特定的用户,使用 sqlplus user/pwd登录后,执行如下语句: 复制代码 代码如下: select * from user_sys_privs t where t.privilege like upper('%link%'); 在sys用户下,显示结果为: SYS CREATE DATABASE LINK NO SYS

php结合ACCESS的跨库查询功能

 问题说明: 有时需要在两个或三个数据库的表中,通过相关关键字,查询获取所需记录集,用一般的SQL查询语句是实现不了的,可通过ACCESS的跨库查询功能实现. 解决方法: 例如"装材类型"和"装材"两张表是在不同的数据库中的,具体查询方法,如下:   代码如下: @"Select * from 装材类型 as a INNER JOIN [;database=" AppDomain.CurrentDomain.BaseDirectory "

分库分表的几种常见玩法及如何解决跨库查询等问题

在谈论数据库架构和数据库优化的时候,我们经常会听到"分库分表"."分片"."Sharding"-这样的关键词.让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战.让人感到担忧的是,他们系统真的就需要"分库分表"了吗?"分库分表"有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议. 垂直分表 垂直分表在日常开

php结合ACCESS的跨库查询功能_php技巧

问题说明: 有时需要在两个或三个数据库的表中,通过相关关键字,查询获取所需记录集,用一般的SQL查询语句是实现不了的,可通过ACCESS的跨库查询功能实现. 解决方法: 例如"装材类型"和"装材"两张表是在不同的数据库中的,具体查询方法,如下: 复制代码 代码如下: @"Select * from 装材类型 as a INNER JOIN [;database=" AppDomain.CurrentDomain.BaseDirectory &qu

Access的跨库查询 (图)_漏洞研究

大家还记得mssql的跨库查询吧,其实在access中也可以实现2个数据之间的交叉查询.下面我就给大家介绍下access的跨库查询. 首先让我们看看在access里是怎样实现对mdb文件进行查询的,我们随便创建个空数据库,对数据库D:\daos\db\daidalos.mdb里的admin表的内容进行查询,SQL语句为: javascript:if(this.width>500)this.width=500" border=0> 查询后,成功返回目标数据库里表admin表里的内容:

Oracle 跨库 查询 复制表数据 分布式查询介绍_oracle

方法一: 在目前绝大部分数据库有分布式查询的需要.下面简单的介绍如何在oracle中配置实现跨库访问. 比如现在有2个数据库服务器,安装了2个数据库.数据库server A和B.现在来实现在A库中访问B的数据库. 第一步.配置A服务器端的tnsnames.ora文件(TNSNAMES.ORA Network Configuration File),该文件存放的位置为: $ORACLE_HOME/network/admin/tnsnames.ora 添加如下行,其中DBLINK为连接名(可自定义)

SQLServer 跨库查询实现方法_MsSql

本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限SQL Server 中 SQL 语句中对象的完整表达式是: [DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject] 本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限. 复制代码 代码如下: select * from CfteaDb1.dbo.CfteaTa

SQLServer 跨库查询实现方法

本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限 SQL Server 中 SQL 语句中对象的完整表达式是: [DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject] 本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限. 复制代码 代码如下: select * from CfteaDb1.dbo.CfteaT

SQL Server实现跨库查询(跨库select insert)

方法一: select  * from servername.dbo.tablename 方法二: select * from OPENDATASOURCE(          'SQLOLEDB',          'Data Source=远程ip;User ID=sa;Password=密码'          ).库名.dbo.表名 where 条件 select top 100 * from OPENDATASOURCE(          'SQLOLEDB',