【指令碼】快速獲得當前使用者下“暫忘”的資料庫物件資訊

secooler發表於2010-01-27
對SQL*Plus情有獨鍾的朋友一定遇到過這樣的問題:突然忘記了表的全名(或者其他資料庫物件名),僅依稀記得它包含幾個字母,怎麼可以最快速知道具體的名字呢?

最快速的回答:使用資料字典檢視可以達到提示自己的目的。
例如使用如下的SQL語句遍可獲得當前使用者下所有包含“TMP”關鍵字的資料庫物件資訊。
select * from obj where object_name like '%TMP%';

完全正確,但是沒有達到我們“快速”的目的。我這裡給出一個非常簡單的指令碼(以obj為基礎進行了簡單的格式化),以便達到快速獲得提示資訊的目的。

1.指令碼內容如下,有興趣的朋友可以在這個基礎上進一步創新和豐富。
--------------------------------------------------
-- Script. Function: Query the obj info         --
-- Script. Name:     obj.sql                    --
-- Author:           Secooler Hou               --
-- Date:             2010.01.27                 --
--------------------------------------------------

set verify off
set linesize 200

col "OBJECT NAME"     for a30
col "SUBOBJECT NAME"  for a10
col "OBJECT ID"       for 9999999999
col "DATA OBJECT ID"  for 9999999999
col "OBJECT TYPE"     for a12
col "CREATED"         for a19
col "LAST DDL TIME"   for a19
col "Timestamp"       for a19
col "Status"          for a7
col "Temporary"       for a1
col "Generated"       for a1
col "Secondary"       for a1

select OBJECT_NAME "OBJECT NAME",
       SUBOBJECT_NAME "SUBOBJECT NAME",
       OBJECT_ID "OBJECT ID",
       DATA_OBJECT_ID "DATA OBJECT ID",
       OBJECT_TYPE "OBJECT TYPE",
       CREATED "CREATED",
       LAST_DDL_TIME "LAST DDL TIME",
       TIMESTAMP "Timestamp",
       STATUS "Status",
       TEMPORARY "Temporary",
       GENERATED "Generated",
       SECONDARY "Secondary"
  from obj
 where OBJECT_TYPE like UPPER ('%&OBJECT_TYPE%')
   and OBJECT_NAME like UPPER ('%&OBJECT_NAME%')
order by OBJECT_NAME, OBJECT_TYPE
/

set linesize 131
set verify on

2.指令碼使用演示(為使輸出顯示整齊,這裡進行了省略處理)
使用obj.sql指令碼獲得當前使用者下包含“T”關鍵字的表資訊。
sec@ora10g> @obj
Enter value for object_type: t
Enter value for object_name: t

OBJECT NAME             SUBOBJECT    OBJECT ID DATA OBJECT ID OBJEC ...
----------------------- ---------- ----------- -------------- ----- ...
T                                        80184          80184 TABLE ...
T_CHILD                                  80357          80357 TABLE ...
T_PARENT                                 80355          80355 TABLE ...

因為指令碼中使用到了like和upper,所以在“object_type”提示處輸入“t”來表示“表”型別,當然,如果輸全“table”更佳,不易出現歧義。
sec@ora10g> @obj
Enter value for object_type: table
Enter value for object_name: t

OBJECT NAME             SUBOBJECT    OBJECT ID DATA OBJECT ID OBJEC ...
----------------------- ---------- ----------- -------------- ----- ...
T                                        80184          80184 TABLE ...
T_CHILD                                  80357          80357 TABLE ...
T_PARENT                                 80355          80355 TABLE ...

什麼都不輸入,兩次回車後將會列出當前使用者下所有資料庫物件資訊。
慢慢體會吧。指令碼供大家參考。

3.小結
在日常的資料庫維護和操作中,如果發現某一項操作反覆被用到,並且每次都感到繁瑣和耗時,那麼此時就需要靜下心來思考一個問題:有沒有什麼手段可以簡化我們的操作呢?
編寫順手的操作指令碼可以大大提高我們的維護效率,事半功倍,同時還可以改善我們的操作“心情”。
遠離繁瑣操作,讓我們用大好的時光去做更多有意義的事情吧!

Good luck.

secooler
10.01.27

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-626192/,如需轉載,請註明出處,否則將追究法律責任。

相關文章