透過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指令碼批量操作mysql資料庫指令碼MySql資料庫
- 通過shell指令碼檢測MySQL服務資訊指令碼MySql
- mssql生成資料庫字典指令碼-MarkDownSQL資料庫指令碼
- Shell 系統資訊監控指令碼指令碼
- 使用shell 指令碼備份資料指令碼
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- Shell指令碼 – 檢視網路介面資訊指令碼
- php百萬資料透過指令碼檔案寫入csvPHP指令碼
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- 案例:通過shell指令碼實現mysql資料備份與清理指令碼MySql
- Linux透過Shell命令向埠傳送資料Linux
- MySQL 批量更新、刪除資料shell指令碼MySql指令碼
- 透過shell指令碼監控日誌切換頻率指令碼
- 【HIVE】hive 使用shell指令碼跑歷史資料Hive指令碼
- Shell多執行緒備份資料庫的指令碼執行緒資料庫指令碼
- 使用shell指令碼替換csv檔案中的資料指令碼
- [shell]shell指令碼實現每天自動抽取資料插入hive表指令碼Hive
- 【資訊採集】IBM AIX系統硬體資訊檢視命令(shell指令碼)IBMAI指令碼
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- linux透過shell指令碼實現ssh互動式自動化Linux指令碼
- 透過Python指令碼支援OC程式碼重構實踐(二):資料項提供模組接入資料通路的程式碼生成Python指令碼C程式
- 【SCRIPT】Oracle資料庫基本資訊收集指令碼Oracle資料庫指令碼
- 透過Python指令碼支援OC程式碼重構實踐(三):資料項使用模組接入資料通路的適配Python指令碼C程式
- 傳送kafka訊息的shell指令碼Kafka指令碼
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- 指令碼 - 透過 mac 反查 IP指令碼Mac
- 2.4.12 Step 11: 執行指令碼來構建資料字典檢視指令碼
- mysql dump 拉取遠端資料同步到本地庫的shell 指令碼MySql指令碼
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- shell指令碼指令碼
- 通過shell指令碼防止埠掃描指令碼
- oracle刪除超過N天資料指令碼的方法Oracle指令碼
- 【資料庫資料恢復】透過資料頁恢復Sql Server資料庫資料的過程資料庫資料恢復SQLServer
- 資料字典和固定表統計資訊更新
- 透過等待看資料庫資料庫
- shell指令碼整合json數值輸出從而獲取硬體資訊指令碼JSON
- Label Studio資料標註--透過原始碼安裝原始碼
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- 通過shell指令碼 批量新增使用者指令碼