dblink
来源:互联网 发布:vb颜色代码大全 编辑:程序博客网 时间:2024/05/16 01:24
需求:
要从146上能查询111的数据并将111的数据直接Insert进146.
方法:
1.在146上创建到111的dblink
2.不用在146本机的tnsnames.ora文件中,配置一个指向111的服务,直接146上(其中SERVICE_NAME要在111中select name from v$database;):
create database link link146_111 connect to user_name identified by "pwd" using '
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCLYXKJ)
)
)';
3.上面执行成功后,即可在146上查询111的数据了。
select * from table_name@link146_111;
-------这个记录比较乱,可以不看。
1、已经配置本地服务:
CREATE DATABASE LINK 数据库链接名(即你要使用的名字) CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’(远程tnsnames.ora中的名字);
--注意数字开头的密码要用英文双引号括起!!密码不用引号(字母开头)或者使用双引号(数字开头)。如:ydsoft_test密码是123,那么就是connect to ydsoft_test identified by "123" 。下面的link146_112是以后使用的link的名称,如,select * from dual@link146_112
如(146连112,那么在146上创建dblink):
create database link link146_112 connect to ydsoft_test identified by "123" using 'ORCL112';
这个orcl112是数据库连接服务名,每台机器可能都不一样,可以自己在client数据库本机net manager配置。
数据库连接字符串'BEJING'是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称.可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.
2、未配置本地服务(人感觉还是第二种方法比较好,这样不受本地服务的影响,不受tnsnames.ora文件的限制。)
使用:
create database link link146_112_notns connect to ydsoft_test identified by "123" using ' (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orclyxkj) ) )';
这个其实就是把orcl112具体化了,具体化之后,不用到client数据本机库配置tns,比较简单。
修改host和service_name.
create database link centerdb connect to prowlan identified by prowlan using '
DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.54.198)(PORT = 1581)) )(CONNECT_DATA = (SERVICE_NAME =dev))'
这个一个很通用的方法,与tnsname.ora文件就无关了。不然使用create database link centerdb connect to prowlan identified by prowlan using 'ZJHC_134.98.1.19';需要读取tnsname.ora文件中'ZJHC_134.98.1.19'这条记录。
另外,开不开global_name都可以创建dblink。
如果global_names=true,那么db link的命名要和远程数据库的global_name相同;
如果global_names=false,那么你可以随便命名db link。
SQL> SELECT * FROM GLOBAL_NAME;GLOBAL_NAME--------------------------------------------------------------------------------ORCLYXKJ.REGRESS.RDBMS.DEV.US.ORACLE.COMSQL> show parameter global_namesNAME TYPE VALUE------------------------------------ ----------- ------------------------------global_names boolean FALSESQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';OWNER OBJECT_NAME------------------------------ --------------------------------------------------------------------------------SQL>
我的实例(不用看)(我的global_name是false,但是我在146上创建了2个dblink,实质是一个,但是两个link的名字不一样,一个名字使用的是112的global_name,另一个是我自己起的名字link146_112):
create database link ORCLYXKJ.REGRESS.RDBMS.DEV.US.ORACLE.COM connect to ydsoft_test identified by "12345678" using 'orclyxkj';
create database link link146_112 connect to ydsoft_test identified by "12345678" using 'ORCLYXKJ';
然后,查询146上创建了哪些连其他数据库的link,会发现:
SQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';OWNER OBJECT_NAME------------------------------ --------------------------------------------------------------------------------YDSOFT_TEST LINK146_112.REGRESS.RDBMS.DEV.US.ORACLE.COMYDSOFT_TEST ORCLYXKJ.REGRESS.RDBMS.DEV.US.ORACLE.COMSQL>
发现,link146_112后面也跟了一大串的........所以,创建dblink写名字时,只写第一个点前面的就可以了,不用写那么长,它自己会加上。
然后,我测试dblink是否可用,在146上:
SQL> select * from dual@link146_112;select * from dual@link146_112ORA-12541: TNS: 无监听程序SQL>
发现,报错了,无监听。由于146上的这个dblink是连接的112库,于是我远程上112看了一下112的状态:
c:\>lsnrctl status
发现它的监听是开启的,那,怎么办呢?一般人都用第二种创建dblink的方式,那么,我决定用第二种试一下:
SQL> create database link link146_112_1 connect to ydsoft_test identified by "123" using ' 2 DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521)) )(CONNECT_DATA = (SERVICE_NAME =ORCLYXKJ))';Database link createdSQL> SELECT * FROM DUAL@LINK146_112_1; --测试dblinkSELECT * FROM DUAL@LINK146_112_1ORA-12154: TNS: 无法解析指定的连接标识符
找了点资料:
“假设你的DB_LINK是想从DB1连接到DB2,你需要配置DB1机器上的tnsnames正确指向DB2。如果你确认DB1上的tnsnames中配置正确;那么再确认你正确的tnsnames被使用了,也就是说DB1机器上系统的环境变量指向哪个oracle的bin目录,使用的是不是你配置正确的那个tnsnames文件。”
“确信你在A数据库中建的dblink使用的服务名是A机器上的,不是非数据库服务器的client上的。如果是在某个client登陆上A数据库创建的,千万别使用该client上的服务名。”
我又在112上创建了一个dblink(112):
SQL> create database link link146_to112_at112 2 connect to ydsoft_test identified by "123" 3 using 'ORCLYXKJ';Database link created
然后还是试图从146上访问112的表(146):
SQL> select * from dual@link146_to112_at112;select * from dual@link146_to112_at112ORA-02019: 未找到远程数据库的连接说明
146无法访问112,然而我在112上使用这个dblink又可以访问112(112,下面查出的count确实是112的count而不是146的):
SQL> select count(1) from t_busi_main_presend2@link146_to112_at112; COUNT(1)---------- 170079SQL>
那,为什么在112上执行连接到112的dblink又可以连接了呢?(其实就是112访问112,但是后面加了@link146_to112_at112,我想实质还是不一样的。)
然后,我又删掉了112上的dblink,重新用第二种方式在112上创建了dblink:
SQL> DROP DATABASE LINK link146_to112_at112;Database link droppedSQL> SQL> create database link link146_112_at112 connect to ydsoft_test identified by "123" using ' 2 DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521)) )(CONNECT_DATA = (SERVICE_NAME =ORCLYXKJ))';Database link createdSQL>
再次上146试图查询112(146):
SQL> select * from dual@link146_112_at112;select * from dual@link146_112_at112ORA-02019: 未找到远程数据库的连接说明SQL>
……各种尝试……终于:
结论(重要):
1.146连124的话,dblink要创建在146上,如果使用方法2创建,那么不用在146本机去修改tnsnames.ora文件,直接在146上操作即可(最简单):
create database link link146_112_notns connect to ydsoft_test identified by "123" using ' (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orclyxkj) ) )';
如果用方法1创建:
146本机的tnsnames.ora文件中,要配置一个指向112的服务(即要在146本机配置指向112的net manager,也可以手动更改tnsnames.ora)。建好之后,在146的tnsnames.ora文件中,应该有这样一段:
(观点:A数据库要连B数据库,首先在A数据库的tnsnames.ora文件里面应该配有B数据库的host,port,service_name等等,这样A数据库连的时候才知道连的谁)
ORCL112 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orclyxkj) ) )
其中:
ORCL112是146本机连接112使用的名字(如果我的136要连112,名字可以随便取),orclyxkj是112的数据库名(如果我的136要连112,这里也应该是orclyxkj。查看数据库名:select name from v$database;)
1>.查看112数据库名:
SQL> select name from v$database;NAME---------ORCLYXKJSQL>
2>.146上配好112的tns之后,就可以在146创建dblink连接112了(146):
SQL> create database link link146_112 2 connect to ydsoft_test identified by "123" 3 using 'ORCL112'; --112数据库名Database link createdSQL> select count(1) from t_busi_main_presend2@link146_112; COUNT(1)---------- 170749 --这是查询的112上的表SQL>
所以,针对第一种创建方法(第二种不受这种限制):
1.查看client客户本机tnsnames.ora文件中是否配置了server服务器的各种。要自己在server db查dbname。
在A数据库创建连接到B库的dblink,首先要在A库本机的tnsnames.ora文件中配置B库(可以手动更改文件,也可以在A上net manager),然后再建。至于dblink的名字,不用带那很多点的,删除时也一样。
- DBLINK
- Dblink
- dblink
- dblink
- DBLINK
- DBLink
- dblink
- dblink
- dblink
- DBLINK
- dblink
- DBlink
- DBLINK
- DBLink
- dblink
- dblink
- dblink
- dblink
- html的onload事件不触发问题
- iPhone控件自定义控件开发:重绘还是组合
- 多线程的原子操作和线程数据共享
- linux进程监控与自动重启实现
- Unknown column 'rownum' in 'where clause'解决方案
- dblink
- sip服务器kamailio的问题
- 选中某项
- 技术人员 应该有点基本的想法。。。AD。。。
- VC++6.0 MSDN下载地址
- Android开发者必须深入学习的10个应用开源项目
- android 64 bit ubuntu
- MYSQL面试题
- 发布MFC ActiveX控件并实现自动更新