具体需求:除了查询本地数据库的信息还要查询远程数据库的表信息。为了避免建立两个数据库。
Database Links:使用户可以通过一个数据库访问到另外一个远程数据库
Database Link有哪几种连接方式的Link:
Link类型 | 说明 |
Connected user link | 看这个类型的名称就可以判断出,用的是当前连接的用户的帐户及其密码来访问远程数据库的。所以这个类型就要求需要在远程数据库上有一个和本地帐户一样的username和password. |
Fixed user link | 这个类型是说使用指定的帐户和密码来访问远程数据库。所以只需指定的帐户能够有权限访问远程数据库就可以。 |
Current user link | 需要用户连接到本地数据库的时候是全局用户的身份连接的。这样这个全局用户就可以使用指定帐户的上下文,而无需存储密码信息到link中。 |
Database Link有以下类型:
类型 | 说明 |
Private | 来类型的Database Lin只能由这个Database Link的Owner才能使用它。 |
Public | 在这个数据库里的所有用户均可使用该Database Link |
Global | 网络中的数据库中的用户均可使用该database link. 因为当Oracle 使用目录服务器的时候,它会在该目录下的所有数据库里都创建这个 global database link,并且统一控制。因此所有在目录下的数据库里的用户均可使用。 |
语法:create [type] database link
语句 | 说明 | 访问方式类型 | 连接类型 |
Create database link dblinkName using ‘NSName’; | 创建一个database link ,通过使用网络服务名称创建。其中Database Link的名称为dbLinkName. 网络服务的名称为NSName. | Connected user link | Private |
Create public database link dblinkName connect to CURRENT_USER using ‘NSName’; | 创建一个database link ,通过使用网络服务名称创建。其中Database Link的名称为dbLinkName. 网络服务的名称为NSName. | Current user link | public |
Create database link dblinkName dblinkName connect to username identified by password using ‘NSName’; | 创建一个database link ,通过使用网络服务名称创建。其中Database Link的名称为dbLinkName. 网络服务的名称为NSName. 通过用户帐户username及其密码password来访问远程数据库。 | Fixed user link | private |
具体创建例子:
第一步:
create public database link linkname connect to user_name identified by user_pwd using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.33)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = INTRANET)
)
)';
第二步:
select * from remoteTableName@linkname;
附上删除命令:drop public database link linkName;