【診斷指令碼】【SQL】得到包含關鍵字的表空間與資料檔案資訊

secooler發表於2009-08-09
1.在日常維護中,沒有得心應手的“診斷指令碼”是低效的,枯燥的。在這個小文兒裡給大家拋個磚。請看下面是我日常維護中相對得心應手的一個檢視包含某關鍵字的表空間及資料檔案的“診斷指令碼”(此指令碼也是在逐步更新到現在這個樣子的,以後還將繼續最佳化)。這個指令碼中有一些格式化輸出和變數定義的小技巧,留給有心人發掘。
ora10g@testdb /home/oracle/sql$ cat tbs.sql
--------------------------------------------------
-- Script. Function: Query the tablespace info  --
-- Script. Name:     tbs.sql                    --
-- Author:           Secooler Hou               --
-- Date:             2007.9.6                   --
--------------------------------------------------

SET verify off
DEFINE tablespace_name=&tablespace_name
COL tablespace_name format a30
COL total_Mbytes format 99999999.99
COL used_Mbytes format 99999999.99
COL free_Mbytes format 99999999.99
COL pct_free format 99999999.99

COL file_name for a66
SELECT   file_name, BYTES / 1024 / 1024 mb, tablespace_name
    FROM dba_data_files
   WHERE UPPER (tablespace_name) LIKE UPPER ('%&tablespace_name%')
ORDER BY tablespace_name, file_name;
COL file_name clear

SELECT   a.tablespace_name, a.total_mbytes,
         a.total_mbytes - NVL (b.free_mbytes, 0) used_mbytes,
         NVL (b.free_mbytes, 0) free_mbytes,
         TRUNC (NVL (b.free_mbytes, 0) / a.total_mbytes * 100, 2) pct_free
    FROM (SELECT   tablespace_name, SUM (BYTES) / 1024 / 1024 total_mbytes
              FROM dba_data_files
          GROUP BY tablespace_name) a,
         (SELECT   tablespace_name, SUM (BYTES) / 1024 / 1024 free_mbytes
              FROM dba_free_space
          GROUP BY tablespace_name) b
   WHERE a.tablespace_name = b.tablespace_name(+)
     AND UPPER (a.tablespace_name) LIKE UPPER ('%&tablespace_name%')
ORDER BY free_mbytes DESC
/

UNDEFINE tablespace_name
SET verify on


2.指令碼演示:以包含sec關鍵字為例,顯示所有表空間和資料檔案的資訊
sys@ora10g> @tbs
Enter value for tablespace_name: sec

FILE_NAME                                   MB TABLESPACE_NAME
----------------------------------------- ---- -----------------
/oracle/oradata/ora10g/tbs_sec_01.dbf          TBS_SEC
/oracle/oradata/ora10g/tbs_sec_02.dbf       10 TBS_SEC
/oracle/oradata/ora10g/tbs_sec_d01.dbf      20 TBS_SEC_D
/oracle/oradata/ora10g/tbs_sec_i01.dbf      20 TBS_SEC_I
/oracle/oradata/ora10g/tbs_user_sec01.dbf   10 TBS_USER_SEC


TABLESPACE_NAME  TOTAL_MBYTES  USED_MBYTES  FREE_MBYTES     PCT_FREE
---------------- ------------ ------------ ------------ ------------
TBS_SEC_I               20.00          .06        19.94        99.68
TBS_SEC_D               20.00         1.50        18.50        92.50
TBS_SEC                 10.00          .06         9.94        99.37
TBS_USER_SEC            10.00          .06         9.94        99.37

OK,輸出的資訊包含所有包含關鍵字“sec”的表空間,以及他們對應的資料檔案。在這個指令碼的協助下,可以快速的定位資料檔案的位置,對給具體的表空間新增資料檔案給出了提示。
歡迎大家交流。

-- The End --

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

相關文章