oracle dblink的创建
来源:互联网 发布:淘宝刷多少单才有生意 编辑:程序博客网 时间:2024/04/28 07:45
格式:
① create public database link link_name connect to user identified by password using 'SID';
则创建了一个连接到目标地址上以user 用户的连接
查询数据时带上@link_name就ok了 如:select * from emp@link_name;
②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)
)
)';
我们知道任何ddl语句都无法在dblink中直接执行,示例如下
SQL> desc db_test;
Name Null? Type
SQL> drop table db_test@DBLINK_CONNECTED_HR; drop table db_test@DBLINK_CONNECTED_HR
* ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
通过创建存储过程,使得能在dblink中执行ddl语句。 注意需在目标数据库的相应用户下创建存储过程 ,具体如下
SQL> create or replace procedure p_execute_ddl(p_ddl in varchar2)
2 as
3 begin
4 execute immediate p_ddl;
5 end;
6 /
删除目标数据库的表
SQL> exec p_execute_ddl@DBLINK_CONNECTED_HR('drop table db_test');
(转载)通过修改基表(link$)让非public dblink变为public
有些朋友创建了一个非public的dblink,现在该数据库的其他用户需要去使用该dblink,在正常情况下无访问权限,需要重新建一个dblink,或者将原dblink修改为public。但是由于忘记了原dblink的目标段的密码,使得创建或者修改dblink的步骤无法进行下去。这里通过修改基表(link$),解决该问题。
创建dblink
SQL> show user;
USER is "SYS"
SQL> create database link "xff_dblink"
2 connect to TEST
3 identified by "test"
4 using '11.1.1.1:1521/mcrm';
Database link created.
SQL> select * from dba_db_links where db_link like 'XFF_DBLINK%';
OWNER DB_LINK USERN HOST CREATED
----- ------------------------------------------- ----- ------------------ --------
SYS XFF_DBLINK.REGRESS.RDBMS.DEV.US.ORACLE.COM TEST 11.1.1.1:1521/mcrm 29-MAR-12
SQL> select sysdate from dual@xff_dblink;
SYSDATE
---------
29-MAR-12
SQL> CONN TEST/TEST
Connected.
SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;
SELECT SYSDATE FROM DUAL@XFF_DBLINK
*
ERROR at line 1:
ORA-02019: connection description for remote database not found
--该dblink不是public的,所以test用户无权访问
dblink变为public类型
SQL> CONN / AS SYSDBA
Connected.
SQL> set long 1000
SQL> select text from dba_views where view_name='DBA_DB_LINKS';
TEXT
-------------------------------------------------------------------
select u.name, l.name, l.userid, l.host, l.ctime
from sys.link$ l, sys.user$ u
where l.owner# = u.user#
--查询出dblink相关的基表有link$和user$
SQL> select owner# from sys.link$ where name like 'XFF_DBLINK%';
OWNER#
----------
0
--XFF_DBLINK对应的用户标识记录在link$.owner#中
SQL> SELECT USER#,NAME FROM USER$ WHERE name in ('SYS','PUBLIC');
USER# NAME
---------- ------------------------------
1 PUBLIC
0 SYS
--现link$.owner#值为0,表示该dblink所属用户为SYS,现在让该dblink变为public
--现需要让该dblink变为public,需要做的是修改link$.owner#的值为1
SQL> UPDATE LINK$ SET OWNER#=1 WHERE name like 'XFF_DBLINK%';
1 row updated.
SQL> COMMIT;
Commit complete.
--需要刷新shared_pool
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
System altered.
--查看dblink所属者,已经修改为public
SQL> select owner from dba_db_links where db_link like 'XFF_DBLINK%';
OWNER
----------
PUBLIC
--测试dblink是否成功
SQL> CONN TEST/TEST
Connected.
SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;
SYSDATE
---------
① create public database link link_name connect to user identified by password using 'SID';
则创建了一个连接到目标地址上以user 用户的连接
查询数据时带上@link_name就ok了 如:select * from emp@link_name;
②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)
)
)';
说明:
1) 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。2) 一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。
删除: DROP PUBLIC DATABASE LINK link_name;
查询: select * from dba_db_links ;
我们知道任何ddl语句都无法在dblink中直接执行,示例如下
SQL> desc db_test;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
SQL> drop table db_test@DBLINK_CONNECTED_HR; drop table db_test@DBLINK_CONNECTED_HR
* ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
通过创建存储过程,使得能在dblink中执行ddl语句。 注意需在目标数据库的相应用户下创建存储过程 ,具体如下
SQL> create or replace procedure p_execute_ddl(p_ddl in varchar2)
2 as
3 begin
4 execute immediate p_ddl;
5 end;
6 /
删除目标数据库的表
SQL> exec p_execute_ddl@DBLINK_CONNECTED_HR('drop table db_test');
PL/SQL procedure successfully completed.
(转载)通过修改基表(link$)让非public dblink变为public
有些朋友创建了一个非public的dblink,现在该数据库的其他用户需要去使用该dblink,在正常情况下无访问权限,需要重新建一个dblink,或者将原dblink修改为public。但是由于忘记了原dblink的目标段的密码,使得创建或者修改dblink的步骤无法进行下去。这里通过修改基表(link$),解决该问题。
创建dblink
SQL> show user;
USER is "SYS"
SQL> create database link "xff_dblink"
2 connect to TEST
3 identified by "test"
4 using '11.1.1.1:1521/mcrm';
Database link created.
SQL> select * from dba_db_links where db_link like 'XFF_DBLINK%';
OWNER DB_LINK USERN HOST CREATED
----- ------------------------------------------- ----- ------------------ --------
SYS XFF_DBLINK.REGRESS.RDBMS.DEV.US.ORACLE.COM TEST 11.1.1.1:1521/mcrm 29-MAR-12
SQL> select sysdate from dual@xff_dblink;
SYSDATE
---------
29-MAR-12
SQL> CONN TEST/TEST
Connected.
SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;
SELECT SYSDATE FROM DUAL@XFF_DBLINK
*
ERROR at line 1:
ORA-02019: connection description for remote database not found
--该dblink不是public的,所以test用户无权访问
dblink变为public类型
SQL> CONN / AS SYSDBA
Connected.
SQL> set long 1000
SQL> select text from dba_views where view_name='DBA_DB_LINKS';
TEXT
-------------------------------------------------------------------
select u.name, l.name, l.userid, l.host, l.ctime
from sys.link$ l, sys.user$ u
where l.owner# = u.user#
--查询出dblink相关的基表有link$和user$
SQL> select owner# from sys.link$ where name like 'XFF_DBLINK%';
OWNER#
----------
0
--XFF_DBLINK对应的用户标识记录在link$.owner#中
SQL> SELECT USER#,NAME FROM USER$ WHERE name in ('SYS','PUBLIC');
USER# NAME
---------- ------------------------------
1 PUBLIC
0 SYS
--现link$.owner#值为0,表示该dblink所属用户为SYS,现在让该dblink变为public
--现需要让该dblink变为public,需要做的是修改link$.owner#的值为1
SQL> UPDATE LINK$ SET OWNER#=1 WHERE name like 'XFF_DBLINK%';
1 row updated.
SQL> COMMIT;
Commit complete.
--需要刷新shared_pool
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
System altered.
--查看dblink所属者,已经修改为public
SQL> select owner from dba_db_links where db_link like 'XFF_DBLINK%';
OWNER
----------
PUBLIC
--测试dblink是否成功
SQL> CONN TEST/TEST
Connected.
SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;
SYSDATE
---------
29-MAR-12
- oracle dblink的创建
- oracle DBlink的创建
- Oracle DBLINK的创建
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- oracle创建dblink的方式
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- oracle中dblink的创建
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- Oracle 创建 DBLink 的方法
- oracle 中 dblink 的创建方法
- C# 下ref和out 参数使用
- poj1716 Integer Intervals
- Log4J使用详解
- ubuntu安装过程记录
- 我对linux的理解之device_register
- oracle dblink的创建
- 匈牙利算法的理解
- socket工作模式
- 黑马程序员-Java数组声明、创建、初始化、及排序
- NSArray和NSMutableArray的使用总结
- Android模拟器实现横屏切换
- Lazy Salesgirl-线段树优化
- java中System.getProperty可以获取的属性列表
- 编译工程时报java:[1,0] illegal character: \65279问题排查与解决过程