Oracle10g使用DBLINK详解总结参考

Oracle使用DBLINK详解
1.创建dblink语法:
CREATE [PUBLIC] DATABASE LINK link
CONNECT TO username IDENTIFIED BY password
USING ‘connectstring’
说明:
1) 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。
2)link :  当GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。
3)connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串。
4)username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库。
 注意:你必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的权限,另外,在你要连接的数据库上,你必须有CREATE SESSION的权限.
语法解释:
    dblink:以后在sql语句中使用的连接名, 在init.ora文件中,如果GLOBAL_NAMES=true,则这个dblink必须与数据库全局名(SELECT * FROM GLOBAL_NAME;)相同.为了方便,可以ALTER SYSTEM SET GLOBAL_NAMES=FALSE;
    user和password:要连接的数据库的合法用户名和密码
    connect_string:可以是经过Net Configuration Assistant配置的(tnsnames.ora)且经测试可以连接的别名,
例如:orcl123,不过容易出问题,老提示出错:无法解析字符串.最好写成这种形式 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.78)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )

2.删除数据库链接的语句:
DROP [PUBLIC] DATABASE LINK itlife365_link
3.查看已创建的dblink
select owner,object_name from dba_objects where object_type='DATABASE LINK';
4.dblink的引用:
[user.]table|view@dblink
如:
SELECT * FROM worker@itlife365_link;

SELECT * FROM camel.worker@itlife365_link ;
SELECT * FROM USER_TABLES@dblink;
UPDATE jobs@dblink SET min_salary = 3000 WHERE job_id = 'SH_CLERK';

5.创建同义词:

对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:
CREATE SYNONYM worker_syn FOR worker@itlife365_link;
6.创建远程视图:
CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where…;

现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户访问此视图,但该用户必须有访问数据库链接的权限。

其他:
修改GLOBAL_NAME的方法:
1.在远程数据库的init.ora文件中将global_names设为false。
或者
2.用sys用户执行如下语句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;
修改后重新启动数据库设置才能生效。
数据库全局名称可以用以下命令查出:SELECT * FROM GLOBAL_NAME;
database link官方详细解释: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_5005.htm
oracle 10.2 的部分原文如下:
Purpose
Use the CREATE DATABASE LINK statement to create a database link. A database link is a schema object in one database that enables you to access objects on another database. The other database need not be an Oracle Database system. However, to access non-Oracle systems you must use Oracle Heterogeneous Services.
After you have created a database link, you can use it to refer to tables and views on the other database. In SQL statements, you can refer to a table or view on the other database by appending @dblink to the table or view name. You can query a table or view on the other database with the SELECT statement. You can also access remote tables and views using any INSERT, UPDATE, DELETE, or LOCK TABLE statement.
Prerequisites
To create a private database link, you must have the CREATE DATABASE LINK system privilege. To create a public database link, you must have the CREATE PUBLIC DATABASE LINK system privilege. Also, you must have the CREATE SESSION system privilege on the remote Oracle database.
Oracle Net must be installed on both the local and remote Oracle databases.

dblink
Specify the complete or partial name of the database link. If you specify only the database name, then Oracle Database implicitly appends the database domain of the local database.
Use only ASCII characters for dblink. Multibyte characters are not supported. The database link name is case insensitive and is stored in uppercase ASCII characters. If you specify the database name as a quoted identifier, then the quotation marks are silently ignored.
If the value of the GLOBAL_NAMES initialization parameter is TRUE, then the database link must have the same name as the database to which it connects. If the value of GLOBAL_NAMES is FALSE, and if you have changed the global name of the database, then you can specify the global name.
The maximum number of database links that can be open in one session or one instance of a Real Application Clusters configuration depends on the value of the OPEN_LINKS and OPEN_LINKS_PER_INSTANCE initialization parameters.


===== dblink 实战 ======

1.dblink分为公有和私有两类。
公有dblink使用public修饰关键字。在create和drop的时候都需要使用public关键字。
公有dblink对所有人开放,在该dblink之上创建的同义词也会随之对所有人开放。(测试并确认,不过测试是在一个实例多个用户之间进行)
私有dblink只有创建者可以访问,其上的同义词不能被其他用户访问。需为用户创建视图,并将视图授权给所需用户后,用户才可访问该视图。
另外,不能将带有dblink的同义词直接授权给用户。否则报错,其等价于:
grant select on table1@user1 to user2                           *
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
不能使用dblink 进行DDL 的操作
2.创建dblink时,可以使用连接字符串(与tnsname.ora中的),效率较高。

网络上本地数据库和远程数据库更新实例:
oracle使用dblink和cursor更新不同数据库的记录
From:http://gis-conquer.blog.sohu.com/168764013.html
一、部分SQL文件内容:
drop public database link sde_link;
create public database link sde_link connect to "sde" identified by "sde" using 'zcserver';
select zdid from sde.nzhxm@sde_link nzhxm;

declare
       cursor cursor1 IS select t.zdid as zdid from sde.zdxm@sde_link t where (t.zdid is not null or t.zdid <> '' or t.zdid <> ' ');
       zdid sde.zdxm.zdid@sde_link%TYPE;
begin
       if not cursor1%isopen then
          open cursor1;
       end if;
       loop
          fetch cursor1 into zdid;
          exit when cursor1%notfound;
          update sde.zdxm@sde_link t set t.xmbh = (select dk.sdxmid from zcgt.cbgl_info_zddk dk where dk.id = zdid);
       end loop;
       close cursor1;

       commit;
end;

二、bat文件内容
rem 更新[**********updata_gdxm_xmbh.sql**********]
sqlplus sde/sde@zcserver @updata_gdxm_xmbh.sql

rem 更新[**********updata_zdxm_xmbh.sql**********]
sqlplus sde/sde@zcserver @updata_zdxm_xmbh.sql

rem 更新[**********updata_nzhxm_xmbh.sql**********]
sqlplus sde/sde@zcserver @updata_nzhxm_xmbh.sql

rem 结束
pause


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
搜索
标签列表
网站分类
最新留言
    文章归档
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.闽ICP备11018667号-2