dblink

本文详细介绍了Oracle数据库中如何建立dblink、创建数据库链接、建立同义词,以及如何查看所有数据库链接的方法,包括具体步骤和示例。
oracle建立dblink

易混淆术语介绍:

Db_name:对一个数据库(Oracle database)的唯一标识,该数据库为第一章讲到的Oracle database。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和Db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和Db_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。Db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。

Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。

Global_name:对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain>命令进行修改,然后修改相应参数。

Service_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。

Net service name:网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。

 实例 就是管理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成)

  数据库 就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来操作它的数据

  服务名 就是对外公布的名称,为网络监听服务

  其实,在我们传统的概念里,数据库是一个统称的名字,在Oracle中,你可以把“数据库”理解成一个大概念,也要把它理解成一个小概念

  

  1、一个Oracle数据库系统中可以同时安装几个数据库,每一个数据库对应一个唯

  一的实例,但是OPS系统除外,可以多个实例同时对一个数据库操作,称为并行服务

  器

  2、只是一个名字,SID即是INSTANCE_NAME,SERVICE_NAMES主要用在监听器中,

  为了方便吧,有些是为了传统习惯的延续,有些是为了更方便的使用

  3、NET EASY CONFIG操纵的应该是主机字符串,是为客户端服务的

  一个数据库可以对外公布多个服务名(SERVICE_NAMES)

  一个客户端也可以用多个主机字符串连接到同一个数据库服务器上

  4、一个OS上可以装多个Oracle数据库(小的概念),每个库可以对外公布多个服

  务名,都通过init.ora和listener.ora来实现
-----------------------------------------------------
1建立net 服务名
linux下 进入
cd $ORACLE_HOME/network/admin
vi tnsnames.ora
添加
CCPBS_19 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.130.38.19)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CCPBS)
)
)
保存 退出 然后测试下
>tnsping ccpbs_19

TNS Ping Utility for Linux: Version 9.2.0.7.0 - Production on 02-JUL-2009 15:16:52
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.130.38.19)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = CCPBS)))
OK (20 msec)
测试成功
Windows下的参见 http://article.pchome.net/content-340501.html

2、创建数据库链接,

/home/oracle/>sqlplus /nolog
SQL*Plus: Release 9.2.0.7.0 - Production on Thu Jul 2 16:01:00 2009
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn /as sysdba
Connected.
进入系统管理员SQL>操作符下,运行命令:
>create public database link ecbm_19 connect to ecbm_userName identified by ecbm_pwd using 'CCPBS_19';
Database link created.
格式:
[b]create public database link [color=red]link_name[/color] connect to [color=darkred]user[/color] identified by [color=red]password[/color] using [color=red]'SID'[/color];[/b]
  则创建了一个连接到10.130.38.19 ccpbs上以ecbm_userName 用户的连接
查询数据时带上@ecbm_19 就ok了 如select * from emp@ecbm_19;
删除 DROP PUBLIC DATABASE LINK ecbm_19;


 3、建立同义词,为了使有关分布式操作更透明,ORACLE数据库里有同义词的对象synonym
  
  SQL>create synonym bjscottemp for emp@beijing;
  
  于是就可以用bjscottemp来替代带@符号的分布式链接操作emp@beijing。
  
create public synonym poh for po_headers_all@erp_danzheng_test;
create public synonym papf for per_all_people@erp_danzheng_test;
create public synonym pv for po_vendors@erp_danzheng_test;


 4、查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:
  
  SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';
### DBLink 使用方法及配置示例 DBLink数据库链接)是一种允许跨数据库进行数据访问的机制,广泛应用于 Oracle、PostgreSQL、人大金仓 Kingbase、达梦数据库等系统中。通过 DBLink,用户可以在本地数据库中访问远程数据库中的数据,实现数据共享与交互。 #### DBLink 的基本使用方法 在 PostgreSQL 中,使用 `dblink` 扩展可以实现跨数据库查询。首先需要在数据库中启用该扩展: ```sql CREATE EXTENSION IF NOT EXISTS dblink; ``` 之后可以使用 `dblink_connect` 函数建立连接: ```sql SELECT dblink_connect('myconn', 'host=localhost port=5432 dbname=mydb user=myuser password=mypassword'); ``` 建立连接后,可以通过 `dblink` 函数执行远程查询: ```sql SELECT * FROM dblink('myconn', 'SELECT id, name FROM employees') AS t(id INT, name TEXT); ``` 执行完毕后,建议关闭连接以释放资源: ```sql SELECT dblink_disconnect('myconn'); ``` #### PostgreSQL 中的 DBLink 配置 为了使用 DBLink,需要在 `postgresql.conf` 中启用 `dblink` 扩展,并在 `pg_hba.conf` 中配置远程连接权限。例如,在 `pg_hba.conf` 中添加如下条目以允许远程访问: ``` host all all 192.168.1.0/24 trust ``` 修改完配置文件后,需重启 PostgreSQL 服务以使配置生效[^1]。 #### Oracle 中的 DBLink 使用 在 Oracle 数据库中,创建 DBLink 的语法如下: ```sql CREATE DATABASE LINK remote_db CONNECT TO remote_user IDENTIFIED BY remote_password USING 'remote_tns'; ``` 其中 `remote_tns` 是在 `tnsnames.ora` 文件中定义的远程数据库服务名。创建完成后,可以通过以下方式访问远程表: ```sql SELECT * FROM employees@remote_db; ``` Oracle 的 DBLink 可分为公有 DBLink 和私有 DBLink。公有 DBLink 可供所有用户使用,而私有 DBLink 仅限创建者使用[^2]。 #### 人大金仓 Kingbase 中的 DBLink 使用 人大金仓 Kingbase 数据库中使用 DBLink 的方式与 PostgreSQL 类似。例如,建立连接的语句如下: ```sql SELECT dblink_connect_u('myconn_db_b', 'hostaddr=xxx.xxx.xxx.xxx port=54321 dbname=db_b user=u_b password=密码'); ``` 查询远程表的语句如下: ```sql SELECT * FROM dblink('myconn_db_b', 'SELECT * FROM remote_table') AS t(column1 INT, column2 TEXT); ``` #### 达梦数据库中的 DBLink 配置 在达梦数据库中,创建公有 DBLink 的语法如下: ```sql CREATE PUBLIC LINK iplink1 CONNECT WITH "SYSDBA" IDENTIFIED BY "Dameng123" USING '192.168.0.153/61141'; ``` 创建私有 DBLink 的语法如下: ```sql CREATE LINK iplink1 CONNECT WITH "SYSDBA" IDENTIFIED BY "Dameng123" USING '192.168.0.144/61142'; ``` 创建完成后,可以使用以下语句查看所有 DBLink: ```sql SELECT * FROM dba_db_links; ``` #### DBLink 使用中的常见问题 - **权限问题**:确保连接用户具有访问远程数据库的权限。 - **网络问题**:确保本地数据库能够访问远程数据库的 IP 地址和端口。 - **性能问题**:跨数据库查询可能会导致性能下降,尤其是在大数据量的情况下。 - **连接泄漏**:使用完 DBLink 后应关闭连接,避免资源浪费。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值