2017-06-22 76 views
0

我想问一下从sqlplus提取oracle ER图(ERD)。我有一个条件,我必须从我的vps(这个oracle数据库在另一个服务器上)访问oracle数据库。我需要使用VPS,因为使用VPS时,它将提供一个将用于Oracle数据库服务器授予对数据库访问权限的域。我知道生成ER图是从oracle sql developer。但用我目前的vps,它只提供CLI。不幸的SQL开发人员使用GUI,所以我不能使用它。那么如何从oracle数据库witohout使用sql开发人员提取ER图并且此解决方案不得使用GUI的应用程序。用sqlplus提取oracle数据库erd

回答

0

您可以生成一个纯文本文件,其中包含每个表的说明,将此文件从远程计算机下载到本地计算机,然后将内容加载到ERD工具(如Oracle DataModeler)中。

常见的脚本获取表的说明(包括你的目标,外键约束)是:

set heading off; 
set echo off; 
Set pages 1000; 
set long 50000; 
SET linesize 150; 
spool My_ddl.sql; 
select DBMS_METADATA.GET_DDL('TABLE','<your table 1>','<schema>') from DUAL; 
select DBMS_METADATA.GET_DDL('TABLE','<your table 2>','<schema>') from DUAL; 
select DBMS_METADATA.GET_DDL('TABLE','<your table 3>','<schema>') from DUAL; 
    . 
    . 
    . 
spool off; 

所以基本上你还是要使用GUI工具来构建你的图表,但诀窍在于你如何获得你的源脚本。

如果你担心如何为所有万台的get_ddl指令,不要害怕,因为你可以运行以下命令:

SELECT 'SELECT DBMS_METADATA.GET_DDL(''TABLE'','''||table_name||''', ''<LOCAL/FOREIGN SCHEMA>'') FROM dual;' as get_ddls 
FROM all_tables 
WHERE owner = '<User of the foreign schema where tables are stored>'; 

,然后只是复制粘贴的结果,前面的脚本。

为了检索文件生成的服务器端,除非您有办法直接访问服务器目录/文件,否则您总是可以询问(当然,恳求)您的DBA将它交给您。

祝你好运。

+0

谢谢你的答案先生。我真的赞赏它。但先生,我只是有一个没有sys特权的用户,用户是否需要特权来运行此查询?我有另一个条件,我不知道我的用户帐户授予访问的表是什么。我只想得到一个表,我的用户帐户可以访问它。它可能只get_ddl只有我的用户帐户授予的表? 顺便说一句,感谢战利品,我真的帮助你的答案。 –

+0

格里您好,很高兴我能帮到您。您需要一个特殊的权限'SELECT_CATALOG_ROLE'才能运行'get_ddl'查询,但只有当表的模式不同于您的模式时,在这种情况下,您还需要在'get_ddl'函数中引用特定的模式。我修改了我的答案,以便您可以看到此更改。 –

+0

再次感谢先生。你的回答真的解决了我的问题,谢谢你帮助我,我希望我能在未来和你一样好哈哈。再来一次。非常感谢 –