暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 的 DB_LINK

生有可恋 2022-05-10
1905

Oracle 使用 db_link 来跨数据库访问数据。db_link 信息可以在数据字典 dba_db_links 中查看。

    select t.owner    用户,
    t.db_link,
    t.username 账号,
    t.host 主机,
    t.created 创建时间
    from dba_db_links t
    order by t.created desc;

    db_link 分两类,一类是私有的,一类是公有的。在创建 db_link 时,默认创建的是私有的,如果加上 PUBLIC 关键字则创建的是公有的。

    私有DBLINK

      CREATE DATABASE LINK dblinktest1
      CONNECT TO remote_user IDENTIFIED BY password
      USING '(DESCRIPTION=
      (ADDRESS=(PROTOCOL=TCP)(HOST=oracledb.example.com)(PORT=1521))
      (CONNECT_DATA=(SERVICE_NAME=service_name))
      )';

      公有DBLINK

        CREATE PUBLIC DATABASE LINK dblinktest2
        CONNECT TO remote_user IDENTIFIED BY password
        USING 'remote_database';

        私有dblink只能供创建它的用户使用,也只有创建它的用户可以删除,其它用户无法删除。

          DROP DATABASE LINK dblinktest1;

          公有dblink,可以被所有用户使用,同时可以使用 dba 账号删除。

            DROP PUBLIC DATABASE LINK dblinktest2;

            如果远程数据库是一个 oracle 类型的 dblink,可以使用 dual 表进行测试 dblink 是否可以正常连接。

              select sysdate from dual@dblinktest2;

              从 dba_db_links 数据字典中可以查询到dblink的创建信息,如果需要获取dblink的创建语句,可以使用dbms包进行解析

                SELECT DBMS_LOB.substr(
                dbms_metadata.get_ddl('DB_LINK', 'JINGYITIWEN', 'XYHIS'),
                4000)
                from dual;

                其中 get_ddl 第一个参数为类型,即 DB_LINK,第二个参数为 dblink 的名字,第三个参数为创建用户,如果是公有db_link,第三个参数可以写 PUBLIC。最终解析出来的ddl语句为:

                  CREATE DATABASE LINK "JINGYITIWEN"
                  CONNECT TO "KYEEINTER" IDENTIFIED BY VALUES ':1'
                  USING '192.168.100.1:1521/orcl'

                  其中db_link中远程数据库的用户名是知道的,但创建db_link的密码是无法获取的。在日常管理中,db_link的创建会用到远程数据库的用户名和密码,将密码保存在代码中是很危险的,需要在创建完成后将语句中的密码无害化处理,并将用户名和密码单独保存,以便日后重建。

                  其中 db_link 的连接字符串可以使用三种形式

                  • tnsname 的名字

                  • tnsname 的内容

                  • easy_connect 字符串

                  其中 tnsname 存放在 oracle 的网络配置目录

                  Linux :

                    $ORACLE_HOME/network/admin/tnsnames.ora

                    Window:

                      %ORACLE_HOME%\network\admin\tnsnames.ora

                      Easy_Connect 字符串格式:

                        host[:port][/service_name]
                        文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论