是否有提取所有数据库链接的ddl? 我想进入sql并通过sql重新创建它们。
我可以在下面使用,它适用于PUBLIC用户,但对于非公共用户,它不会给我数据库链接所有者。
Set long 1000
SELECT DBMS_METADATA.GET_DDL('DB_LINK',db.db_link,db.owner) from dba_db_links db;
Sample link owner and name
Owner db_link
public link1
public link2
user1 link3
如果我跑到上面选择它会在下面给我,#3没有用户名。
Output from above SELECT
1. create public database link "link1" using "db_alias"
2. create public database link "link2" using "db_alias"
3. create database link "link3" using "db_alias"
我使用SYS重新创建链接,并且不希望将#3创建为SYS用户。
答案 0 :(得分:1)
似乎即使作为SYS用户,您也可以为其他用户创建dblink(公共dblink除外)。
即使您运行create database link your_user.link3 using "db_alias"
,它的所有者也会SYS
。
可能的hacks以另一个用户身份连接(如果您有凭据,可以将conn
添加到SQL * Plus脚本中)
或者为需要具有带参数的create database link
命令运行的dblink的用户创建过程,并从sys中调用它。
答案 1 :(得分:0)
这应该有助于链接进行"连接到"
SELECT MYCOMMAND
FROM
(
select trim(l.owner)||'__'||trim(l.db_link)||'__'||trim(l.username) ||'__'||trim(l.host) , '10'
, ' connect '||trim(l.owner)||'/CCCCCCCC@'||TRIM(INSTANCE_NAME)
AS MYCOMMAND
from dba_db_links l , V$INSTANCE i , dba_users u
where l.username = u.username
and l.username is not null
and l.username <> ' '
UNION ALL
select trim(l.owner)||'__'||trim(l.db_link)||'__'||trim(l.username)||'__'||trim(l.host) , '20'
, ' DROP DATABASE LINK '||trim(l.db_link)||' ; ' AS MYCOMMAND
from dba_db_links l , V$INSTANCE i , dba_users u
where l.username = u.username
and l.username is not null
and l.username <> ' '
UNION ALL
select trim(l.owner)||'__'||trim(l.db_link)||'__'||trim(l.username)||'__'||trim(l.host) , '30'
, ' CREATE DATABASE LINK '||trim(l.db_link)
||' CONNECT TO "'||trim(l.username)||'"'
||' IDENTIFIED BY "NNNNNNNN" '
||' USING '||trim(l.host) ||' ; 'AS MYCOMMAND
from dba_db_links l , V$INSTANCE i , dba_users u
where l.username = u.username
and l.username is not null
and l.username <> ' '
ORDER BY 1,2,3
)
答案 2 :(得分:0)
要从数据库链接获取ddl,请运行以下命令的输出:
设置页面999; 设置长90000;
SELECT 'SELECT dbms_metadata.get_ddl(''DB_LINK'',''' || db_link || ''',''' || owner || ''') FROM dual;'
FROM dba_db_links
WHERE db_link
IN ('DB_LINK1',
'DB_LINK2',
'DB_LINK3');
要为其他用户创建数据库链接,请使用SYS用户执行以下DDL:
CREATE DATABASE LINK "OWNER.DBLINK_NAME"
CONNECT TO "USER" IDENTIFIED BY "Password_user"
USING 'ALIAS';