下午觉得无聊,听见一个经理再说db link ,一想,我不知道啊,到时是啥呢;
网上一查,db link,是数据库之间的链接;
以下,我总结了一下db link的创建过程和碰到bug的解析过程;
一、准备工作
以下操作必须在sysdba的用户权限下操作
1、要创建一个db link,必须要知道涉及的数据库都是正常运行的,也就是服务是开启的;
2、需要为每个涉及的数据库在本地建立链接字符串(tnsnames.ora)
例:
ZXTWSKP192.168.13.24 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.24)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = zxtwskp)
)
)
ZXTWSKP192.168.0.55 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.55)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zxtwskp)
)
)
3、环境:两个数据库均建立在XP上,ORACLE的版本均是Oracle9i;要注意关闭两台计算机上的Windows的防火墙,否则,会出现ping不通,oracle就连接不上了的情况;
4、如何返回数据库的global_name?
执行select * from global_name;
192.168.0.55的global_name为zxtwskp.us.oracle.com;
192.168.13.24的global_name为zxtwskp.us.oracle.com;
5.如何查看global_name参数是true还是false?
SQL>show parameter global_name;
执行的结果如下:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean false
表示该参数是false.
也可以通过查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;
简单功能,不管是否两个数据库的global_name的value不同也没有关系
6、查看Oracle的版本是否支持同步功能?
SQL>select * from v$option where PARAMETER='Advanced replication'语句,
如何返回值为True,那么就是支持,否则就是不支持。在两个数据库中都是检查是否支持才行。
建立步骤:
1、 链接字符串即服务名,首先在本地配置一个服务名,地址指向远程的数据库地址,服务名取为将来你要使用的数据库链名:
create database link databaseLinkName connect to userName identified by password using databaseServiceName
例:create database link ZXTWSKP.US.ORACLE.COM connect to bjwskp identified by bjwskp using 'ZXTWSKP192.168.0.55';
错误如下:
ORA-02082: a loopback database link must have a connection qualifier
这是因为:
本机的global_name和databaseLinkName相同,
把databaseLinkName该成和global_name不相同的名称就可以了。
应改是:create database link cszxtwskp connect to bjwskp identified by bjwskp using 'ZXTWSKP192.168.0.55';
2、测试连接是否成功:
select * from wskp_dj_nsrxx@cszxtwskp ;
如果查询有结果,就说明连接成功;
可以进行相关的DML,DDL操作了
3、如果你不要使用了,记得drop
SQL>drop database link cszxtwskp;