利用PLSQL客户端界面创建databaselink,提示ORA-12154,
出现这种提示一般有两种原因: 1是本地的TNSNAMES.ORA文件中内容格式不对,2没有找到TNSNAMES.ORA文件
但我利用PLSQL直接登录数据库是没问题的。
后来,在创建databaselink时没有采用本地TNSNAMES.ORA中配置的数据库服务名,而是在创建脚本中直接添加原始地址。创建完成后,dblink生效
create database link linkfwq
connect to fzept identified by neu
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fjept)
)
)';
-------------------------------------------------------------------------------------------------------------
两台不同的数据库服务器,从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户的数据,这个时候可以使用dblink。
例如:数据库服务器A,数据库服务器B,数据库客户端C;通过客户端C连到A,在A上操作访问B。
1、在数据库客户端C的tnsnames中配置数据库服务器A的服务
LMISDX_LOCAL=
(DEscrīptION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = LMISdx)
)
)
2、这样就可以通过客户端访问到数据库A的用户
3、在数据库服务器A的tnsnames中配置数据库服务器B的服务
LMISSD=
(DEscrīptION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.123)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = LMIS)
)
)
4.通过客户端C访问到数据库A的用户,在A上创建数据库链接
createpublicdatabaselinkLMIS_SDTEST
connecttoLMIS_SDTESTidentifiedby***
using'LMISSD';
Create DATABASE LINK数据库链接名CONNECT TO用户名 IDENTIFIED BY密码 USING ‘本地配置的数据的实例名’;
5、查询远端数据库里的表(通过客户端C登陆到数据库服务器A访问数据库B)
Select …… FROM表名@数据库链接名;
SELECT*FROMSPKFK@LMIS_SDTEST
注意:创建是很简单,但是在使用中后台却出现锁,查看这个锁的方法可以去console中看到或者查询数据库。每次使用dblink查询的时候,均会与远程数据库创建一个连接,dblink应该不会自动释放这个连接,如果是大量使用dblink查询,会造成web项目的连接数不够,导致系统无法正常运行,导致系统无正常运行。
--------------------------------------------------------------------------------------------
另外,数据库链接名称不能已数字开头,要已字母开头,否则会提示”缺少数据库链接名称“