DB link的迁移
2024-08-28 00:29:01
我们在做某些Schema的迁移的时候,由于用到Public的db link,然而由于不知道db link中目标端账号的密码,因此无法在新环境重新创建DB link。
本次实验的思路是将视图dba_db_links的基表link$迁移到出来并替换到新环境。因为用户的password密文保存在link$基表中。
---------------------
源端操作:
首先还在源端创建一个public 的db link 名为test。
Asherdb1 >create public database link test connect to scott identified by tiger using 'ginna';
Database link created.
seven >select * from global_name@test;
GLOBAL_NAME
---------------------
GINNA
Asherdb1 >select * from dba_db_links;
OWNER DB_LINK USERNAME HOST CREATED
------------------------------ -----------------------------
PUBLIC TEST SCOTT
1
Asherdb1 >create public database link test connect to scott identified by tiger using 'ginna';
2
Database link created.
3
seven >select * from global_name@test;
4
5
GLOBAL_NAME
6
---------------------
7
GINNA
8
9
Asherdb1 >select * from dba_db_links;
10
11
OWNER DB_LINK USERNAME HOST CREATED
12
------------------------------ -----------------------------
13
PUBLIC TEST SCOTT
创建中间表trans1,CTAS基表sys.link$。
Asherdb1 >create table trans1 as select * from sys.link$;
1
Asherdb1 >create table trans1 as select * from sys.link$;
目标端操作:
在目标端创建名为test2的Public db link。连接源端库
Asherdb2 >create public database link test2 connect to seven identified by oracle using 'seven';
Database link created.
Asherdb2 >select * from global_name@test2;
1
Asherdb2 >create public database link test2 connect to seven identified by oracle using 'seven';
2
Database link created.
3
4
Asherdb2 >select * from global_name@test2;
通过test2的db link将Asher端的trans2表insert link$中。
Asherdb2 >insert into sys.link$ select * from trans1@test2;
1
Asherdb2 >insert into sys.link$ select * from trans1@test2;
现在再查一下dba_db_links就可以发现名为test的db link已经成功迁移在Asher端。
Asherdb2 >select * from dba_db_links;
1
Asherdb2 >select * from dba_db_links;
测试db link 的有效性:
Asherdb2 >select * from global_name@test;
1
Asherdb2 >select * from global_name@test;
主要就是将trans1这张中间表迁移至Asher库就可以了,这有很多方法,可以直接使用exp/imp或者数据泵都可以。条条大道通罗马,方法有很多种,主要就是将seven端的sys.link$基表迁移至Asher端并替换掉Asher端的sys.link$。
注: public dblink的 user# 是1
SQL> SELECT USER#,NAME FROM USER$ WHERE name in ('SYS','PUBLIC');
USER# NAME
---------- ------------------------------
1 PUBLIC
0 SYS
6
1
SQL> SELECT USER#,NAME FROM USER$ WHERE name in ('SYS','PUBLIC');
2
3
USER# NAME
4
---------- ------------------------------
5
1 PUBLIC
6
0 SYS
--------------
另: 可以通过修改基表(link$)让非public dblink变为public
最新文章
- Mybatis异常--java.lang.IllegalArgumentException: NO ENUM const class org.apache.ibatis.type.JdbcType.int
- 自定义EL表达式的函数
- [SSH] SSH学习笔记 - 远程登录
- UVA 1395 (kruskal)
- Netty4.x中文教程系列(一) 目录及概述
- Java读写大文本文件(2GB以上)
- Windows 8实例教程系列 - 自定义应用风格
- .ARM.exidx
- java学习笔记之-构造函数
- 【洛谷1640】[SCOI2010]连续攻击游戏
- uoj123 【NOI2013】小Q的修炼
- HDU 2008 数值统计
- [20181108]12c sqlplus rowfetch参数4.txt
- centos7 下安装pycharm
- 前景检测(1):VIBE
- pillow与numpy实现图片素描化
- [剑指Offer]62-圆圈中最后剩下的数(约瑟夫环问题)(法二待做)
- C C++ 文件输入与输出
- js之操作cookie
- springcloud10---feign-with-hystrix_factory