Oracle の表領域を表示する SQL

  SYSDBA でのログインが必要。

  • SQL

SELECT
    T.TABLESPACE_NAME "表領域",
    ROUND(T.BYTES / (1024 * 1024), 0) "割当済(MB)",
    ROUND((T.BYTES - SUM(F.BYTES)) / (1024 * 1024), 0) "使用量(MB)",
    ROUND(SUM(F.BYTES) / (1024 * 1024), 0) "空容量(MB)",
    ROUND((1 - SUM(F.BYTES) / T.BYTES) * 100, 2) "使用率(%)"
FROM
    SYS.DBA_FREE_SPACE F,
    (SELECT
        TABLESPACE_NAME,
        SUM(BYTES) BYTES
     FROM
        SYS.DBA_DATA_FILES
     GROUP BY
        TABLESPACE_NAME
     ) T
WHERE
    T.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
GROUP BY
    T.TABLESPACE_NAME,
    T.BYTES
/

  • 出力

表領域                         割当済(MB) 使用量(MB) 空容量(MB)  使用率(%)
------------------------------ ---------- ---------- ---------- ----------
SYSAUX                                560        544         16      97.11
USERS                                2640       1151       1489      43.59
SYSTEM                                400        361         39      90.17
UNDO                                  500         10        491        1.9


- ref.: Oracle Technology Network (OTN) Japan - 掲示板 : 表領域の使用率確認 ...
  http://otn.oracle.co.jp/forum/message.jspa?messageID=8087948

Oracle の一時表領域を表示する SQL

  SYSDBA でのログインが必要。

  • SQL

SELECT
    DT.TABLESPACE_NAME "表領域",
    ROUND(DT.BYTES / (1024 * 1024), 0) "割当済(MB)",
    ROUND(T.BYTES_CACHED / (1024 * 1024), 0) "空容量(MB)",
    ROUND(T.BYTES_CACHED / DT.BYTES * 100, 2) "使用率(%)"
FROM
    SYS.DBA_TEMP_FILES DT,
    V$TEMP_EXTENT_POOL T,
    V$TEMPFILE V
WHERE
    T.FILE_ID(+)= DT.FILE_ID AND
    DT.FILE_ID = V.FILE#
/

  • 出力

表領域                         割当済(MB) 空容量(MB)  使用率(%)
------------------------------ ---------- ---------- ----------
TEMP                                  528        527      99.81

Oracle の LIKE 演算子で _、% を検索文字列として指定する

SELECT * FROM foo WHERE bar LIKE '%baz\%' ESCAPE '\';
SELECT * FROM foo WHERE bar LIKE '%baz\_' ESCAPE '\';

  ESCAPE でエスケープ文字に指定する必要がある (この場合は \ を指定)。
  Oracle では、デフォルトのエスケープ文字は決まっていないらしい。
  
  MySQL の場合は、デフォルトのエスケープ文字は、\ になっている。
  ただし、MySQL も ESCAPE 節を使えるため、スケープ文字にすることも可能 (この場合は | を指定)。

SELECT * FROM foo WHERE bar LIKE '%baz|%' ESCAPE '|';

- ref.: 忘れっぽいエンジニアのオラクルSQLリファレンス
  http://oracle.se-free.com/dml/01_like.html

- ref.: MySQL ::   MySQL 5.1 リファレンスマニュアル :: 11.3.1 文字列比較関数
  http://dev.mysql.com/doc/refman/5.1/ja/string-comparison-functions.html