zoukankan      html  css  js  c++  java
  • DB link的迁移

    我们在做某些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





  • 相关阅读:
    centos yum 安装nginx 后增加模块
    mysql 设置不了短串密码怎么办 You must reset your password using ALTER USER statement before executing this statement.
    Centos7 安装mysql后登录提示:Access denied for user 'root'@'localhost'
    mysql安装历程
    yum.rpm,repo源
    MySql-Server和MySql-Client的关系
    阿里云JKD镜像
    关于字符编码
    Dockerfile编写制作centos7.7+php5.6+nginx镜像
    PHP中常见日期、月份、时间戳列表(strtotime、date、mktime的用法)
  • 原文地址:https://www.cnblogs.com/cqdba/p/4e9705a98f82f193a63100c8a67087f5.html
Copyright © 2011-2022 走看看