今天在写一个数据库结构同步小工具,需要用到dbms_metadata.get_ddl这个包取对象的DDL。这个包取本地对象的DDL是没有问题的,但在这个工具中,需要通过DBLINK方式取远端数据库的DDL,经过一番资料查找,找到了解决方法。

首先尝试直接在dual用dblink,结果出错:

SQL> SELECT (DBMS_METADATA.GET_DDL('TABLE', 'NEW_A', 'ADMIN')) FROM DUAL@DB230;

SELECT (DBMS_METADATA.GET_DDL('TABLE', 'NEW_A', 'ADMIN')) FROM DUAL@DB230

ORA-31603: object "NEW_A" of type TABLE not found in schema "ADMIN"
ORA-06512: at "SYS.DBMS_METADATA", line 1548
ORA-06512: at "SYS.DBMS_METADATA", line 1585
ORA-06512: at "SYS.DBMS_METADATA", line 1902
ORA-06512: at "SYS.DBMS_METADATA", line 2793
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1

ADMIN.NEW_A在DB230是存在的,从这个错误可以看出,直接在dual表加dblink是没有意义的,dbms_metadata还是会从本地数据库查看表是否存在。

接着修改一下SQL,在dbms_metadata也加上dblink,看看结果如何:

SQL> SELECT DBMS_METADATA.GET_DDL@DB230('TABLE', 'NEW_A', 'ADMIN') FROM DUAL@DB230;

SELECT DBMS_METADATA.GET_DDL@DB230('TABLE', 'NEW_A', 'ADMIN') FROM DUAL@DB230

ORA-22992: cannot use LOB locators selected from remote tables

现在错误变了,说明在dbms_metadata上加dblink奏效了。新的错误很明显,在SQL方式下,不能直接通过dblink传送lob,所以需要想办法把lob转换为其他类型再传送:

SQL> SELECT DBMS_LOB.SUBSTR@DB230(DBMS_METADATA.GET_DDL@DB230('TABLE', 'NEW_A', 'ADMIN')) FROM DUAL@DB230;

DBMS_LOB.SUBSTR@DB230(DBMS_MET
--------------------------------------------------------------------------------

CREATE TABLE "ADMIN"."NEW_A"
( "TABLE_NAME" VARCHAR2(32),

"D" DATE,

"BYTES" NUMBER

) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "ADMIN_TS"

可以看到,此时远端数据库的DDL已经被成功取过来。注意dbms_lob也要加上dblink,表名在远端数据库执行这个函数。

最后简单总结一下:

1.函数和表都可以加dblink,函数加上dblink表示在远端数据库执行该函数,表加上dblink表示从远端数据库读取表。

2. 从远端数据库取DDL,所有函数及表(dbms_metadata/dbms_lob/dual)都要加上dblink,否则会失败

3. 此种方法最多返回32767个字节,如果对象的DDL长度大于32767,则只能部分返回。在处理里需特别处理(如分段取DDL)。

4. 如果是在PL/SQL中取远端数据库对象的DDL,则可以不用dbms_lob,通过变量赋值的方式不需要dbms_lob截断,如:

BEGIN
SELECT DBMS_METADATA.GET_DDL@DB230('TABLE','NEW_A','ADMIN') into V FROM DUAL@DB230;
END;

如何通过DBLINK取REMOTE DB的DDL相关推荐

  1. git中无法拉取remote仓库中的更新(Untracked Files Prevent Merge)

    之前在另一台电脑上对其本地仓库进行了补充添加并提交到了远程仓库中(可理解为另一位同事对远程仓库进行了补充),今天在拉取其添加内容到本地仓库时,发生以下报错. 图片抽抽传不上来,大概就是以下内容: Un ...

  2. Oracle DB 使用DDL语句创建和管理表

    • 对主要的数据库对象进行分类 • 查看表结构 • 列举列可以使用的数据类型 • 创建简单的表 • 说明创建表时如何创建约束条件 • 描述方案对象如何工作 • 数据库对象 – 命名规则 • CREAT ...

  3. 数据库正常运行,突然变慢的解决思路

    <数据库正常运行,突然变慢的解决思路> 数据库正常运行,突然变慢的解决思路: 1.查看数据库版本(select * from v$version) 2.查看操作系统的进程(top,ps - ...

  4. mysql数据库突然变慢_数据库正常运行,突然变慢的解决思路

    数据库正常运行,突然变慢的解决思路: 1.查看数据库版本(select * from v$version) 2.查看操作系统的进程(top,ps -ef) 3.查看操作系统的IO情况(sar 1 10 ...

  5. oracle transaction scn,关于Oracle DB SCN 生成率过高的 预警及处理建议

    关于Oracle DB SCN 生成率过高的 预警及处理建议 Oracle SCN简介: Oracle SCN(SystemChange Number),又名系统更改号,是Oracle数据库内部的一个 ...

  6. Realtime DB技术详解

    1. Realtime DB概述 1.1 Realtime DB简介 Realtime DB是一种托管在云端的数据库,数据以JSON格式存储并实时同步到所连接的每个客户端.具有以下特点: 使用的不是常 ...

  7. SCN headroom问题解决方案

    转载请注明出处,谢谢! ---好久没来逛ITPUB了,发一篇大家关心的问题 1.   SCN headroom简介 SCN是Oracle内部使用的逻辑时钟,用于区分事务操作的先后次序以及确保事务操作的 ...

  8. (笔记))oracle SCN 异常增长问题 以及 ORA-19706

    1. http://blog.csdn.net/u011616400/article/details/40301781 2. http://www.xuebuyuan.com/2023482.html ...

  9. ORA-19706和_external_scn_rejection_threshold_hours的前世今生

    由老白论坛中整理 http://www.oraclefans.cn/forum/showtopic.jsp?rootid=42850&CPages=1 最近这几天和几个客户一直在讨论一个最近爆 ...

最新文章

  1. 初学者学MvcMovie遇到的问题解决办法
  2. fwrite、write、fread、read
  3. 常见WEB漏洞描述及修复建议(可收藏写报告用)-句芒安全实验室
  4. 安装C语言版本tensorflow
  5. 2019 6月编程语言_六月开始提供435项免费在线编程和计算机科学课程
  6. 如何通过ssh登录linux,如何用SSH登录linux?
  7. 选择所有选项的多选复选框列表或复选框下拉列表
  8. 四级英语图表作文真题计算机,四级作文辅导二:图表类作文(范文、模板、必备句型。对了,还有作业)...
  9. linux lvs 存储层,LVS集群配置之LVS介绍
  10. 博文视点大讲堂第45期——我们应该向魔兽世界学习什么 圆满结束
  11. JQuery 选择器总结
  12. Atiti 重定向标准输出到字符串转接口adapter stream流体系 以及 重定向到字符串
  13. 常见在线密码解析网站
  14. 用VB实现网页下载跟踪程序
  15. 自我调整【管理学之十三】
  16. 轻量级智能穿戴开发基础组件:input
  17. C#入门教程(一)visual studio与winform
  18. 【自然语言处理】Gensim中的Word2Vec
  19. minst手写数字识别(带界面)
  20. 疯狂的XRP:3招击败ETH,或在2019年持续爆发

热门文章

  1. linux下usb设备节点名不固定,解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点...
  2. [Go] golang设置运行的cpu数
  3. hadoop学习笔记(三):hdfs体系结构和读写流程(转)
  4. P1982 小朋友的数字
  5. Mysql 常用函数汇总
  6. 老生常谈:工厂模式兄弟姐妹
  7. e2fsprogs制作嵌入式 mkfs.ext2 mkfs.ext3 mkfs.ext4
  8. cscope使用命令
  9. python小案例随机点名_python用tkinter实现一个简易能进行随机点名的界面
  10. lc滤波电路电感电容值选择_这几种常见的无源滤波电路,你都了解吗 ?