通過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/23718752/viewspace-1256265/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過shell指令碼得到資料字典的資訊指令碼
- 通過shell指令碼得到資料庫的基本資訊(一)指令碼資料庫
- 通過shell得到資料庫中許可權的指令碼資料庫指令碼
- 通過shell指令碼生成資料統計資訊的報表指令碼
- 通過shell指令碼檢視procedure的資訊指令碼
- 通過shell指令碼檢視package的資訊指令碼Package
- 透過shell得到資料庫中許可權的指令碼資料庫指令碼
- 通過shell指令碼檢視鎖資訊指令碼
- 通過shell指令碼來得到不穩定的執行計劃指令碼
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- 通過shell指令碼檢測MySQL服務資訊指令碼MySql
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- 透過shell指令碼生成資料統計資訊的報表指令碼
- 通過shell指令碼分析足彩指令碼
- 通過shell定製ash指令碼指令碼
- 透過shell指令碼檢視procedure的資訊指令碼
- 透過shell指令碼檢視package的資訊指令碼Package
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- 案例:通過shell指令碼實現mysql資料備份與清理指令碼MySql
- 透過shell指令碼檢視鎖資訊指令碼
- 通過shell指令碼防止埠掃描指令碼
- 通過shell指令碼監控oracle session指令碼OracleSession
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- 透過shell指令碼來得到不穩定的執行計劃指令碼
- 如何通過簡單的shell指令碼操作MongoDB指令碼MongoDB
- 通過shell指令碼同時監控多個資料庫負載指令碼資料庫負載
- 通過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- 通過shell指令碼 批量新增使用者指令碼
- 通過shell指令碼新增備庫日誌指令碼
- 通過shell指令碼來統計段大小指令碼
- 透過shell指令碼生成查詢表資料的sql指令碼SQL
- 使用shell指令碼快速得到主備關係指令碼
- 通過shell指令碼快速定位active session問題指令碼Session
- 通過shell抓取html資料HTML
- 通過shell指令碼批量驗證dataguard的有效性指令碼
- 通過修改資料字典,變更表的owner
- 通過shell指令碼監控sql執行頻率指令碼SQL
- 通過shell指令碼定位效能sql和生成報告指令碼SQL