[20150907]关于db link.txt

[20150907]关于db link.txt

--有时候学习的需要,要测试db link的sql语句,需要使用到db link,而实际的情况仅仅1台机器,1个数据库。

--即使你什么都不建立。也可以使用global_name作为db link。

SCOTT@test> select global_name c10 from global_name;
C10
----------
TEST.COM

--另外说明以下实际上访问的是sys.props$ 表。现在执行计划就可以知道。
SCOTT@test> @dpcz ''
PLAN_TABLE_OUTPUT
--------------------------------------
SQL_ID  451hbxv8pc8p2, child number 0
-------------------------------------
select global_name c10 from global_name
Plan hash value: 415205717
-----------------------------------------------------------------------------
| Id  | Operation         | Name   | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        |        |       |     2 (100)|          |
|*  1 |  TABLE ACCESS FULL| PROPS$ |      1 |    28 |     2   (0)| 00:00:01 |
-----------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$F5BB74E1 / PROPS$@SEL$2
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("NAME"='GLOBAL_DB_NAME')

SCOTT@test> column value$ format a20
SCOTT@test> select * from sys.props$ where name='GLOBAL_DB_NAME';
NAME                 VALUE$               COMMENT$
-------------------- -------------------- ---------------------
GLOBAL_DB_NAME       TEST.COM             Global database name

SCOTT@test> select * from dept@test ;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
...

SCOTT@test> select * from dept@test.com ;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
...

SCOTT@test> @dpcz ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  dzump5hmtucsa, child number 0
-------------------------------------
select * from dept@test.com
Plan hash value: 3383998547
---------------------------------------------------------------------------
| Id  | Operation         | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |        |       |     4 (100)|          |
|   1 |  TABLE ACCESS FULL| DEPT |      5 |   100 |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / DEPT@SEL$1

--不过这个并不是真正的db link,可以发现显示执行计划是访问的是本地的表。没有出现remote关键字。
--并且本机是不能建立这样的db link指向外部的数据库。

SCOTT@test> create database link "test.com" connect to SCOTT identified by "btbtms" using '192.168.100.89:1521/TEST';
create database link "test.com" connect to SCOTT identified by "btbtms" using '192.168.100.89:1521/TEST'
                                *
ERROR at line 1:
ORA-02082: a loopback database link must have a connection qualifier

--实际上即使指向本机也不行:
SCOTT@test> create database link "test.com" connect to SCOTT identified by "btbtms" using '40';
create database link "test.com" connect to SCOTT identified by "btbtms" using '40'
                                *
ERROR at line 1:
ORA-02082: a loopback database link must have a connection qualifier

--但是我们可以使用另外的名字:
CREATE PUBLIC DATABASE LINK "LOOPBACK.COM" USING 'localhost:1521/test.com';

SCOTT@test> select * from dept@loopback.com where rownum<=1;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SCOTT@test> @dpc '' ''
PLAN_TABLE_OUTPUT
--------------------------------------
SQL_ID  frb221p0yatnu, child number 0

select * from dept@loopback.com where rownum<=1

NOTE: cannot fetch plan for SQL_ID: frb221p0yatnu, CHILD_NUMBER: 0
      Please verify value of SQL_ID and CHILD_NUMBER;
      It could also be that the plan is no longer in cursor cache (check v$sql_plan)

--这样就对了。

SCOTT@test> select * from dept@LOOPBACK ,emp where dept.deptno=emp.deptno;

SCOTT@test> @dpcz '' ''
PLAN_TABLE_OUTPUT
--------------------------------------
SQL_ID  d6pqq0q2zp054, child number 0
-------------------------------------
select * from dept@LOOPBACK ,emp where dept.deptno=emp.deptno
Plan hash value: 2412741621
-----------------------------------------------------------------------------------------------------------------------
| Id  | Operation          | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | Inst   |IN-OUT|  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |        |       |     8 (100)|          |        |      |       |       |          |
|*  1 |  HASH JOIN         |      |     14 |   812 |     8  (13)| 00:00:01 |        |      |  1000K|  1000K|  748K (0)|
|   2 |   REMOTE           | DEPT |      5 |   100 |     4   (0)| 00:00:01 | LOOPB~ | R->S |       |       |          |
|   3 |   TABLE ACCESS FULL| EMP  |     14 |   532 |     3   (0)| 00:00:01 |        |      |       |       |          |
-----------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1
   2 - SEL$1 / DEPT@SEL$1
   3 - SEL$1 / EMP@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("DEPT"."DEPTNO"="EMP"."DEPTNO")
Remote SQL Information (identified by operation id):
----------------------------------------------------
   2 - SELECT "DEPTNO","DNAME","LOC" FROM "DEPT" "DEPT" (accessing 'LOOPBACK.COM' )

--建立这样的db link 方便以后的测试工作。另外注意以下小细节,使用db link 即使select,也会产生redo。大家可以测试最前面的情
--况,不会产生redo。

时间: 2024-08-02 17:46:57

[20150907]关于db link.txt的相关文章

[20130415]数据泵与db link.txt

[20130415]数据泵与db link.txt 数据泵是10g以后采用的新特性,按照一些介绍速度比exp/imp快.以前我总是成对的使用它,也就是先expdp导出数据,然后再传输到新的服务器,然后在impdp导入数据,这样的过程明显不是很快,特别是导出文件很大的情况下,速度并没有感觉快到哪里,如果数据泵加上db link,这样仅仅使用impdp导入就可以,省去了前面的步骤. 自己做一个测试: 测试数据从10g服务器到11g的测试机的导入情况: 1.测试环境与配置如下: --测试机器A(11g

[20130701]db link与事务.txt

[20130701]db link与事务.txt 昨天帮别人修复数据库,安全起见,我先启动read only模式,叫他们检查一些相关数据是否正常,但是在程序界面上出现:ORA-16000: database open for read-only access. 我跟踪发现执行的实际上通过db_link访问远程数据库的语句,不是dml语句(注:实际上执行dml,发生的事务也在远端,不在本地).按照这个道理如果数据库在只读的情况下,是不能访问远端的数据库的. google 发现如下链接: 我回来后在

[20140408]db link 口令安全问题.txt

[20140408]db link 口令安全问题.txt 测试在11GR2 ,如果以sys用户登录,查询sys.link$基表,通过简单的函数很容易知道db link的口令. 例子: SYS@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3

Oracle的DB Link

数据库之间的链接建立在DATABASE LINK上.要创建一个DB LINK,必须先在每个数据库服务器上设置链接字符串. 1. 配置TNS , $ORACLE_HOME/NETWORK/ADMIN/tnsname.ora 10gstandby = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HFCC-KF-3068)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NA

Oracle global database name与db link的纠缠关系

  ORACLE数据库中Global Database Name与DB LINKS的关系还真是有点纠缠不清,在说清楚这个关系前,我们先来了解一下Global Database Name的概念   Global DataBase Name 概念 1. What is a global database name? ------------------------------------------------------------------------------- The global da

关于db link权限分配的苦旅(二)

在几天前说过关于db link分配权限的问题,当时也折磨了我好一会儿 http://blog.itpub.net/23718752/viewspace-1869425/ 大体的情况还是在118的服务器中去访问128中的某个表的时候存在一些访问的问题,最后是重建了一个public的db link得以修复,当时对于这个问题的临时处理也是一波三折,还触发了一个oracle的bug,也算是有惊无险. 但是对于之前操作中的疑问在解释之后统一进行解答. 第二天的时候,开发的同事反馈说线上进行测试提dblin

关于db link权限分配的苦旅(一)

昨天接到一个开发的需求,内容看起来非常简单. 申请数据库192.168.1.118:1522:TEST下用户APP_TE_FLOW_128赋予对表testore_log的查询权限... 貌似这个语句也就几秒钟就可以搞定,直接赋予对象权限,或者角色都可以, 类似grant select on test.testore_log to APP_TE_FLOW_128; 但是这个看似简单的案例,我想用两篇日志来总结,因为里面有许多的内容量,中间的过程也是异常曲折,而且最开始的推论很可能是错误的,然后还可

link下如何实现11位的流水码转换为8位的,思路还是有点模糊?

问题描述 link下如何实现11位的流水码转换为8位的,思路还是有点模糊? link下如何实现11位的流水码转换为8位的,思路还是有点模糊? 解决方案 思路告诉你了,如果要代码,请先采纳,谢谢

[20170210]关于dblink.txt

[20170210]关于dblink.txt --昨天朋友要求建立的数据库关闭全部dblink.实际上很简单设置open_links,open_links_per_instance为0就ok了. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----------------------