wisdomone1的个人空间

提供基于oracle初学者及进阶者数据库培训

  • 博客访问: 10787406
  • 博文数量: 2183
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-04 23:58
  • 认证徽章:
个人简介

提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(2183)

文章存档

2017年(36)

2016年(7)

2015年(205)

2014年(27)

2013年(507)

2012年(373)

2011年(255)

2010年(535)

2009年(206)

2008年(30)

2007年(2)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: Oracle

测试结论
1,创建数据库db link有2种方式,一则为通过配置tnsnames.ora访问远端数据库
  二则为不配置tnsnames.ora访问远端数据库


2,通过配置tnsnames.ora访问远端数据库的创建DB LINK的语法如下


create database link target_user_zxy connect to user_zxy identified by system  using 'tns_esbdb';


(注:tns_esbdb为netmgr创建的net service name)




3,为不配置tnsnames.ora访问远端数据库 创建DB LINK的语法如下
SQL> create database link target_user_zxy connect to user_zxy identified by system 
  2  using '(DESCRIPTION = 
  3         (ADDRESS_LIST = 
  4         (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.39)(PORT = 1521)) 
  5         ) 
  6         (CONNECT_DATA = 
  7          (SERVICE_NAME = esbdb) 
  8         )';


Database link created.


(注:一定要注意格式,否则即使创建成功,DB LINK也使用不了)




4,db link有2种类型,一则为private,二则为public


5,private db link只能创建数据库用户使用这个db link


6,public db link可以所有数据库用户使用这个db link


7,删除db link的语法
drop database link target_user_zxy;


8,删除public db link语法


drop public database link target_user_zxy;




9,private db link即使通过授权其它数据库用户强大的权力或者通过同义词,其它的数据库用户仍旧不能使用访问private db link


10,通过tnsnames.ora配置创建db link,如下字典对应的host为net service name
SQL> select owner,db_link,username,host,created from dba_db_links;


OWNER                          DB_LINK                        USERNAME                                 HOST                                               CREATED
------------------------------ ------------------------------ ---------------------------------------- -------------------------------------------------- ---------
SYSTEM                         TARGET_USER_ZXY                USER_ZXY                                 tns_esbdb                                          12-JUN-17


11,不通过tnsnames.ora配置创建db link,如下字典对应的host为如下


SQL> set linesize 300
SQL> col username for a40
SQL> col db_link for a30
sql> col host for a50
SQL> select owner,db_link,username,host,created from dba_db_links;


OWNER                          DB_LINK                        USERNAME                                 HOST                                               CREATED
------------------------------ ------------------------------ ---------------------------------------- -------------------------------------------------- -------------------
SYSTEM                         TARGET_USER_ZXY                USER_ZXY                                 (DESCRIPTION =                                     2017-06-12 18:16:10
                                                                                                              (ADDRESS_LIST =
                                                                                                              (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.3
                                                                                                       9)(PORT = 1521))
                                                                                                              )
                                                                                                              (CONNECT_DATA =
                                                                                                               (SERVICE_NAME = esbdb)
                                                                                                              )




12,不通通过db link对远端数据库进行DDL操作,否则报错
SQL> grant select on syn_t_test to user_zxy;
grant select on syn_t_test to user_zxy
                *
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database




[oracle@mygirl admin]$ oerr ora 2021
02021, 00000, "DDL operations are not allowed on a remote database"
// *Cause: An attempt was made to use a DDL operation on a remote database.
//         For example, "CREATE TABLE tablename@remotedbname ...".
// *Action: To alter the remote database structure, you must connect to the
//          remote database with the appropriate privileges.








测试明细
1,db link使用方之数据库版本
SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


2,db link使用方之数据库实例名称以及IP地址
SQL> show parameter db_name


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      mygirl


[root@mygirl ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 08:00:27:E6:9A:3B  
          inet addr:10.0.0.5  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::a00:27ff:fee6:9a3b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:532 errors:0 dropped:0 overruns:0 frame:0
          TX packets:287 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:48493 (47.3 KiB)  TX bytes:38727 (37.8 KiB)




3,db link提供方之数据库版本以及数据库实例名称以及IP地址和数据库用户名称


SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production




SQL> show parameter db_name


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      esbdb


SQL> select username from dba_users where username='USER_ZXY';


USERNAME
------------------------------
USER_ZXY


SQL> select tname from tab;


no rows selected


SQL> create table t_test(a int);


Table created.


SQL> insert into t_test values(1);


1 row created.


SQL> commit;


Commit complete.




suse11:~ # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 08:00:27:81:B6:5A  
          inet addr:10.0.0.39  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe81:b65a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:774 errors:0 dropped:0 overruns:0 frame:0
          TX packets:449 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:69213 (67.5 Kb)  TX bytes:59159 (57.7 Kb)


4,db link提供方之数据库监听运行状态
oracle@suse11:~> lsnrctl status


LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 12-JUN-2017 18:01:52


Copyright (c) 1991, 2013, Oracle.  All rights reserved.


Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                12-JUN-2017 18:01:40
Uptime                    0 days 0 hr. 0 min. 12 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /oracle/diag/tnslsnr/suse11/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=suse11)(PORT=1521)))
Services Summary...
Service "esbdb" has 1 instance(s).
  Instance "esbdb", status READY, has 1 handler(s) for this service...
Service "esbdbXDB" has 1 instance(s).
  Instance "esbdb", status READY, has 1 handler(s) for this service...
The command completed successfully     




5,在db link使用方直接通过不配置数据库TNSNAMES.ORA访问远端数据库


SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';


Session altered.


SQL> select owner,db_link,username,host,created from dba_db_links;  


no rows selected


SQL> show user
USER is "SYSTEM"


SQL> create database link target_user_zxy connect to user_zxy identified by system 
  2  using '(DESCRIPTION = 
  3         (ADDRESS_LIST = 
  4         (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.39)(PORT = 1521)) 
  5         ) 
  6         (CONNECT_DATA = 
  7          (SERVICE_NAME = esbdb) 
  8         )';


Database link created.






SQL> conn /as sysdba
Connected.




SQL> set linesize 300
SQL> col username for a40
SQL> col db_link for a30
sql> col host for a50
SQL> select owner,db_link,username,host,created from dba_db_links;


OWNER                          DB_LINK                        USERNAME                                 HOST                                               CREATED
------------------------------ ------------------------------ ---------------------------------------- -------------------------------------------------- -------------------
SYSTEM                         TARGET_USER_ZXY                USER_ZXY                                 (DESCRIPTION =                                     2017-06-12 18:16:10
                                                                                                              (ADDRESS_LIST =
                                                                                                              (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.3
                                                                                                       9)(PORT = 1521))
                                                                                                              )
                                                                                                              (CONNECT_DATA =
                                                                                                               (SERVICE_NAME = esbdb)
                                                                                                              )




SQL> 








6,在DB LINK使用方验证DB LINK是否正常
SQL> select count(*) from t_test@target_user_zxy;
select count(*) from t_test@target_user_zxy
                            *
ERROR at line 1:
ORA-02019: connection description for remote database not found




SQL> select count(*) from user_zxy.t_test@target_user_zxy;
select count(*) from user_zxy.t_test@target_user_zxy
                                     *
ERROR at line 1:
ORA-12154: TNS:could not resolve the connect identifier specified




为了诊断上述的错误,尝试采用反推方式即通过图形化netgmr
[oracle@mygirl admin]$ more tnsnames.ora 
# tnsnames.ora Network Configuration File: /oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.


TNS_ESBDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.39)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = esbdb)
    )
  )


[oracle@mygirl admin]$ sqlplus user_zxy/system@tns_esbdb


SQL*Plus: Release 11.2.0.4.0 Production on Mon Jun 12 18:31:02 2017


Copyright (c) 1982, 2013, Oracle.  All rights reserved.










SQL> drop database link target_user_zxy;


Database link dropped.




SQL> create database link target_user_zxy connect to user_zxy identified by system 
  2  using '(DESCRIPTION =
  3      (ADDRESS_LIST =
  4        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.39)(PORT = 1521))
  5      )
  6      (CONNECT_DATA =
  7        (SERVICE_NAME = esbdb)
  8      )
  9    )';


Database link created.








SQL> select * from t_test@target_user_zxy;


         A
----------
         1








7,在db link使用方直接通过配置数据库TNSNAMES.ORA访问远端数据库


SQL> show user
USER is "SYSTEM"


SQL> drop database link target_user_zxy;


Database link dropped.




SQL> create database link target_user_zxy connect to user_zxy identified by system  using 'tns_esbdb';


Database link created.




SQL> select * from t_test@target_user_zxy;


         A
----------
         1






SQL> set linesize 300
SQL> col username for a40
SQL> col db_link for a30
SQL> col host for a50
SQL> select owner,db_link,username,host,created from dba_db_links;


OWNER                          DB_LINK                        USERNAME                                 HOST                                               CREATED
------------------------------ ------------------------------ ---------------------------------------- -------------------------------------------------- ---------
SYSTEM                         TARGET_USER_ZXY                USER_ZXY                                 tns_esbdb                                          12-JUN-17


SQL> 


8,可见在某个数据库用户创建的db link,其它数据库用户则不能使用它
SQL> conn /as sysdba 
Connected.
SQL> select * from t_test@target_user_zxy;
select * from t_test@target_user_zxy
                     *
ERROR at line 1:
ORA-02019: connection description for remote database not found


SQL> conn user_zxy/system
Connected.
SQL> select * from t_test@target_user_zxy;
select * from t_test@target_user_zxy
                     *
ERROR at line 1:
ORA-02019: connection description for remote database not found


SQL> select username from dba_users where account_status='OPEN';


USERNAME
----------------------------------------
SYSTEM
SYS
USER_MOTHER
USER_ZXY
USER_FATHER
USER_OBJ


6 rows selected.




9,可见创建public database db link,创建db link的数据库用户与非数据库用户皆可访问使用db link


SQL> conn system/system
Connected.
SQL> drop database link target_user_zxy;


Database link dropped.


SQL> create public database link target_user_zxy connect to user_zxy identified by system  using 'tns_esbdb';


Database link created.


SQL> show  user
USER is "SYSTEM"
SQL> select * from t_test@target_user_zxy;


         A
----------
         1


SQL> 
SQL> 
SQL> conn /as sysdba 
Connected.
SQL> select * from t_test@target_user_zxy;


         A
----------
         1


SQL> 
SQL> conn user_zxy/system
Connected.
SQL> select * from t_test@target_user_zxy;


         A
----------
         1




10,可见非public database db link只能创建自己的数据库用户访问,即使授权了其它数据库用户更强大的权利,还是不成功;
    通过同义词同上,亦不成功
SQL> conn system/system
Connected.
SQL> drop database link target_user_zxy;
drop database link target_user_zxy
                   *
ERROR at line 1:
ORA-02024: database link not found




SQL> drop public database link target_user_zxy;


Database link dropped.




SQL> create  database link target_user_zxy connect to user_zxy identified by system  using 'tns_esbdb';


Database link created.




SQL> select * from t_test@target_user_zxy;


         A
----------
         1


SQL> conn user_zxy/system
Connected.
SQL> select * from t_test@target_user_zxy;
select * from t_test@target_user_zxy
                     *
ERROR at line 1:
ORA-02019: connection description for remote database not found




SQL> conn /as sysdba
Connected.


SQL>  select distinct privilege from dba_sys_privs where lower(privilege) like '%link%';


PRIVILEGE
----------------------------------------
DROP PUBLIC DATABASE LINK
CREATE DATABASE LINK
CREATE PUBLIC DATABASE LINK




SQL> select distinct privilege from dba_tab_privs where lower(privilege) like '%link%';


no rows selected




SQL> conn system/system
Connected.




SQL> create synonym syn_t_test for t_test@target_user_zxy;


Synonym created.


SQL> select * from syn_t_test;


         A
----------
         1




SQL> grant select on syn_t_test to user_zxy;
grant select on syn_t_test to user_zxy
                *
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database




[oracle@mygirl admin]$ oerr ora 2021
02021, 00000, "DDL operations are not allowed on a remote database"
// *Cause: An attempt was made to use a DDL operation on a remote database.
//         For example, "CREATE TABLE tablename@remotedbname ...".
// *Action: To alter the remote database structure, you must connect to the
//          remote database with the appropriate privileges.




SQL> select distinct privilege from dba_sys_privs where lower(privilege) like '%syno%';


PRIVILEGE
----------------------------------------
CREATE SYNONYM
DROP ANY SYNONYM
CREATE ANY SYNONYM
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM




SQL> select distinct privilege from dba_tab_privs where lower(privilege) like '%syno%';


no rows selected






SQL> conn /as sysdba
Connected.


SQL> grant select any table to user_zxy;


Grant succeeded.




SQL> conn user_zxy/system
Connected.




SQL> select * from system.syn_t_test;
select * from system.syn_t_test
                     *
ERROR at line 1:
ORA-02019: connection description for remote database not found




SQL> conn /as sysdba
Connected.
SQL> grant dba to user_zxy;


Grant succeeded.


SQL> conn user_zxy/system
Connected.
SQL> select * from system.syn_t_test;
select * from system.syn_t_test
                     *
ERROR at line 1:
ORA-02019: connection description for remote database not found




阅读(1205) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册