【发布时间】:2021-11-20 08:28:09
【问题描述】:
我当前的任务涉及从远程 (Prod) Oracle DB 到我的本地 (Dev) XE Db(包括数据),并且 - 如果可能的话 - 甚至将它们全部作为我可以执行的一个脚本或文件(如果需要,我希望他们接受一个已编译的程序)。
我知道create table <name> as select * from <name>@<link> 和等效的插入,这可能是复制数据的最佳选择,但不是定义
我四处搜索并偶然发现了 dbms_metadata.get_ddl() 这有点帮助,但我还没有弄清楚如何使用它连接到远程数据库,也没有找到如何从其他架构。
我总共有 3 个模式(我的应用程序的主要模式(我们将称为“MY”,公司的基础数据(我们将称为“COMP”和同事的相关应用程序(我们将称为"COLL"))
我尝试了here 的脚本,看起来很有希望,但正如我所说,我还没有弄清楚如何连接到远程和不同的模式(公司是最难的,因为我不知道'不知道能不能登录,只有select权限
SELECT DBMS_METADATA.GET_DDL('TABLE', table_name, owner)
FROM all_tables WHERE owner = UPPER('&1');
当我用不同的所有者尝试 get_ddl 时,sql 开发人员给了我错误:
“在模式 %s 中找不到 TABLE 类型的对象 %s”,其中第一个 %s 是 (第二个 %s) 模式 (COMP) 中的第一个表
【问题讨论】:
-
为什么不使用导出/导入实用程序 (expdp/impdp)? docs.oracle.com/en/database/oracle/oracle-database/18/sutil/…
-
尝试自己复制 dbms_metadata 将是一项真正艰巨的任务,您需要在每个 Oracle 版本中重新审视。你有多大信心可以编写完整的CREATE TABLE 语法?我不确定我是否会尝试。