我正在开发Oracle数据库架构可视化工具。所以,作为第一步,我想,我首先需要获取所有架构细节(表之间的表和关系,约束也可能)。
要获取该信息,将返回结果的SQL命令是什么?
(DESCRIBE
命令不返回有关所有表的信息)
编辑#1 :
实际上,我想要做的是获取所有关于所有表的信息(列,行,外键,约束)以将它们存储在MongoDB数据库中,然后创建可视化(不包括图表)< / p>
答案 0 :(得分:0)
你可以从:
开始select DBMS_METADATA.GET_DDL ('TABLE', table_name,user) from user_tables;
这将对所有创建表的DDL进行反向工程。它不会为您提供当前的表/列统计信息。
某些工具(例如Oracle的Data Modeller / SQL Developer)允许您将它们指向数据库,并将数据库模型反向工程为图表。这将是开始表之间关系的好地方。
答案 1 :(得分:0)
MongoDB支持JSON文档,因此解决问题的最佳方法是将数据库元数据提取到JSON docuemnts中。您可以使用SchemaCrawler将数据库元数据提取为JSON。
Sualeh Fatehi,SchemaCrawler
答案 2 :(得分:0)
我做类似的事情。我直接从Oracle数据库通过OPENQUERY语句从SQL Server中读取了这些内容,并将结果保存到SQL Server表中,以允许分析历史比较模式信息和更改。
因此,以下查询的结果集所要做的就是以某种方式存储它们(常规)并向其中添加某种唯一/主键或时间戳,以便区分不同的扫描。
不使用SQL Server特定的代码,这些是我到目前为止使用的基本oracle sql查询:
--Tables
SELECT table_name, owner, Tablespace_name, Num_Rows
FROM all_tables WHERE tablespace_name is not NULL
AND owner not in ('SYS', 'SYSTEM')
ORDER BY owner, table_name;
--Columns
SLECT OWNER, TABLE_NAME, Column_name, Data_type, data_length, data_precision, NULLABLE, character_Set_Name
From all_tab_cols
where USER_GENERATED = 'YES'
AND owner not in ('SYS', 'SYSTEM');
--Indexes
select Owner, index_name, table_name, uniqueness,BLEVEL,STATUS from ALL_INDEXES
WHERE owner not in ('SYS', 'SYSTEM')
--Constraints
select owner, constraint_name, constraint_type, table_name, search_condition, status, index_name, index_owner
From all_constraints
WHERE generated = 'USER NAME'
AND owner not in ('SYS', 'SYSTEM')
--Role Previleges
select grantee, granted_role, admin_option, delegate_option, default_role, common
From DBA_ROLE_PRIVS
--Sys Privileges
select grantee, privilege, admin_option, common
From DBA_SYS_PRIVS