透過shell指令碼得到資料字典的資訊
比如user_objects這個資料字典檢視,裡面可能就包含很多的資訊。
首先可以得到,它是一個檢視,然後在public上建立了對應的同義詞,但是在不用使用者使用的使用,查出的結果會不相同,這個其實是根據類似環境變數的一套東西來實現的。
where l.owner# = userenv('SCHEMAID'),它會鎖定當前的schema。
OWNER OBJECT_ID DATA_OBJECT_ID OBJECT_NAME OBJECT_TYPE
------------------------------ ---------- -------------- ------------------------------ -------------------
SYS 3305 USER_OBJECTS VIEW
PUBLIC 3306 USER_OBJECTS SYNONYM
synonym_details
OWNER SYNONYM_NAME
------------------------------ ------------------------------
PUBLIC USER_OBJECTS
view_details
VIEW_NAME TEXT
------------------------------ --------------------------------------------------------------------------------
USER_OBJECTS select o.name, o.subname, o.obj#, o.dataobj#,
decode(o.type#, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER',
4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE',
7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
11, 'PACKAGE BODY', 12, 'TRIGGER',
13, 'TYPE', 14, 'TYPE BODY',
19, 'TABLE PARTITION', 20, 'INDEX PARTITION', 21, 'LOB',
22, 'LIBRARY', 23, 'DIRECTORY', 24, 'QUEUE',
28, 'JAVA SOURCE', 29, 'JAVA CLASS', 30, 'JAVA RESOURCE',
32, 'INDEXTYPE', 33, 'OPERATOR',
34, 'TABLE SUBPARTITION', 35, 'INDEX SUBPARTITION',
40, 'LOB PARTITION', 41, 'LOB SUBPARTITION',
42, NVL((SELECT 'REWRITE EQUIVALENCE'
FROM sum$ s
WHERE s.obj#=o.obj#
and bitand(s.xpflags, 8388608) = 8388608),
'MATERIALIZED VIEW'),
43, 'DIMENSION',
44, 'CONTEXT', 46, 'RULE SET', 47, 'RESOURCE PLAN',
48, 'CONSUMER GROUP',
51, 'SUBSCRIPTION', 52, 'LOCATION',
55, 'XML SCHEMA', 56, 'JAVA DATA',
57, 'EDITION', 59, 'RULE',
60, 'CAPTURE', 61, 'APPLY',
62, 'EVALUATION CONTEXT',
66, 'JOB', 67, 'PROGRAM', 68, 'JOB CLASS', 69, 'WINDOW',
72, 'SCHEDULER GROUP', 74, 'SCHEDULE', 79, 'CHAIN',
81, 'FILE GROUP', 82, 'MINING MODEL', 87, 'ASSEMBLY',
90, 'CREDENTIAL', 92, 'CUBE DIMENSION', 93, 'CUBE',
94, 'MEASURE FOLDER', 95, 'CUBE BUILD PROCESS',
100, 'FILE WATCHER', 101, 'DESTINATION',
'UNDEFINED'),
o.ctime, o.mtime,
to_char(o.stime, 'YYYY-MM-DD:HH24:MI:SS'),
decode(o.status, 0, 'N/A', 1, 'VALID', 'INVALID'),
decode(bitand(o.flags, 2), 0, 'N', 2, 'Y', 'N'),
decode(bitand(o.flags, 4), 0, 'N', 4, 'Y', 'N'),
decode(bitand(o.flags, 16), 0, 'N', 16, 'Y', 'N'),
o.namespace,
o.defining_edition
from sys."_CURRENT_EDITION_OBJ" o
where o.owner# = userenv('SCHEMAID')
and o.linkname is null
and (o.type# not in (1 /* INDEX - handled below */,
10 /* NON-EXISTENT */)
or
(o.type# = 1 and 1 = (select 1
from sys.ind$ i
where i.obj# = o.obj#
and i.type# in (1, 2, 3, 4, 6, 7, 8, 9))))
and o.name != '_NEXT_OBJECT'
and o.name != '_default_auditing_options_'
and bitand(o.flags, 128) = 0
union all
select l.name, NULL, to_number(null), to_number(null),
'DATABASE LINK',
l.ctime, to_date(null), NULL, 'VALID', 'N', 'N', 'N', NULL, NULL
from sys.link$ l
where l.owner# = userenv('SCHEMAID')
實現的指令碼如下:
sqlplus -s / as sysdba <
COL DB_LINK FORMAT A20
COL OWNER FORMAT A30
COL TABLE_OWNER FORMAT A30
COL TABLE_NAME FORMAT A30
SET LINESIZE 200
SET PAGES 100
SET LONG 999999
prompt object_details
SELECT OWNER,OBJECT_ID,DATA_OBJECT_ID,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_NAME=UPPER('$1');
prompt synonym_details
SELECT OWNER,SYNONYM_NAME FROM DBA_SYNONYMS WHERE SYNONYM_NAME=upper('$1');
prompt view_details
SELECT VIEW_NAME,TEXT FROM DBA_VIEWS WHERE VIEW_NAME=upper('$1');
EOF
exit
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347051/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過shell指令碼得到資料字典的資訊指令碼
- 通過shell指令碼得到資料庫的基本資訊(一)指令碼資料庫
- 透過shell得到資料庫中許可權的指令碼資料庫指令碼
- 透過shell指令碼生成資料統計資訊的報表指令碼
- 透過shell指令碼檢視procedure的資訊指令碼
- 透過shell指令碼檢視package的資訊指令碼Package
- 透過shell指令碼檢視鎖資訊指令碼
- 通過shell得到資料庫中許可權的指令碼資料庫指令碼
- 透過shell指令碼來得到不穩定的執行計劃指令碼
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- 透過shell指令碼分析足彩指令碼
- 通過shell指令碼生成資料統計資訊的報表指令碼
- 透過shell定製ash指令碼指令碼
- 透過shell指令碼監控oracle session指令碼OracleSession
- 透過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- 通過shell指令碼檢視procedure的資訊指令碼
- 通過shell指令碼檢視package的資訊指令碼Package
- 通過shell指令碼檢視鎖資訊指令碼
- 透過shell抓取html資料HTML
- 通過shell指令碼來得到不穩定的執行計劃指令碼
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- 透過shell指令碼定位效能sql和生成報告指令碼SQL
- 透過shell指令碼監控sql執行頻率指令碼SQL
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- 透過shell指令碼抓取awr報告中的問題sql指令碼SQL
- 通過shell指令碼檢測MySQL服務資訊指令碼MySql
- 使用shell指令碼快速得到主備關係指令碼
- 透過shell指令碼監控日誌切換頻率指令碼
- shell指令碼-透過lftp同步遠端目錄到本地指令碼FTP
- 透過shell指令碼來檢視Undo中資源消耗高的sql指令碼SQL
- mssql生成資料庫字典指令碼-MarkDownSQL資料庫指令碼
- php百萬資料透過指令碼檔案寫入csvPHP指令碼
- 使用shell 指令碼備份資料指令碼
- 資料匯出shell指令碼(上)指令碼
- 資料匯入shell指令碼(下)指令碼
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 建立管理MySQL資料庫的shell指令碼MySql資料庫指令碼
- 【GP】透過資料字典檢視某個表的欄位