工作中常常要对两台不同DB服务器的schema进行比较。比如测试机器和本番机器。
比较内容有各个表的字段的长度,属性,还有index等。
采取的办法是执行下面三个sql文,把DB情报生成出文件,然后对文件进行diff处理。
1. 抽出各个表的字段情报。
set echo off;
set linesize 30000;
set pagesize 32767;
set trimspool on;
set autocommit off;
set exitcommit off;
set null NULL;
COLUMN DATA_TYPE FORMAT A20;
spool columns.txt;
SELECT TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
CHAR_LENGTH,
DATA_PRECISION,
DATA_SCALE,
NULLABLE,
COLUMN_ID
FROM USER_TAB_COLUMNS
ORDER BY TABLE_NAME,
COLUMN_ID;
spool off;
2. 抽出index相关情报。
set echo off;
set linesize 30000;
set pagesize 32767;
set trimspool on;
set autocommit off;
set exitcommit off;
set null NULL;
spool indexes.txt;
SELECT TABLE_NAME,
INDEX_NAME,
INDEX_TYPE,
UNIQUENESS FROM USER_INDEXES
ORDER BY TABLE_NAME,
INDEX_NAME;
spool off;
3. 抽出index各个字段的情报。
set echo off;
set linesize 30000;
set pagesize 32767;
set trimspool on;
set autocommit off;
set exitcommit off;
set null NULL;
COLUMN COLUMN_NAME FORMAT A40;
spool index_columns.txt;
SELECT TABLE_NAME,
INDEX_NAME,
TRIM(COLUMN_NAME) COLUMN_NAME,
COLUMN_POSITION,
DESCEND
FROM User_Ind_Columns
WHERE TABLE_NAME NOT LIKE 'BIN%'
ORDER BY TABLE_NAME,
INDEX_NAME,
COLUMN_POSITION;
spool off;
本文介绍了一种通过执行特定SQL语句来抽取Oracle数据库中表结构、索引及相关字段信息的方法,并利用这些信息对不同服务器上的数据库Schema进行比较。

655

被折叠的 条评论
为什么被折叠?



