忍者ブログ

OracleDBAの技術メモ

最近物覚えが悪くなったので 仕事中に調べた後々役立つ情報をメモしております。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ROWIDからブロックを特定する方法

ROWIDからブロックを特定したい場合 DBMS_ROWID パッケージを使用する。

以下使用例

SELECT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) FROM EMP;

例では抽出条件を指定していないので、全てのレコードのブロック番号がリストされる。
PR

SQL*Plusのログをシェルからきれいに出す方法

テーブルのレコードのみをシェルから出力したい場合などは
以下のようなコマンドをシェル等に組み込むとよいかも。

sqlplus -s ユーザ名/パスワード@接続識別子 <<EOF >/dev/null 2>&1
[set linesize 等の各種SQL*Plus見た目制御セッティング]
spool [ログファイル名]
[SQL文]
EOF

SQL*Plusの見た目制御は

linesize
pagesize
trimspool
column

等をセットするとよい。

セグメント使用率

Oracle8iのころには DBA_TABLES ディクショナリの
  「NUM_FREELIST_BLOCKS」
  「AVG_SPACE_FREELIST_BLOCKS」
を使用して詳細なセグメント使用率の算出が可能だったが、

Oracle9iからは自動セグメント管理導入されて主流となり、
FREELISTが使用されなくなってからは
「EMPTY_BLOCKS」等でHWMらしきものを確認するくらいしかできなくなってしまった。

いろいろ調べた結果、以前の詳細なセグメント使用率に近いものを算出するには

  「AVG_ROW_LEN」 × 「NUM_ROWS」

という方法しかなさそう。

参考:「Oracle9i物理設計 第5部 領域監視」
http://otndnld.oracle.co.jp/skillup/oracle9i/5_1/index.html#5_sql3

テーブルのDDL生成

SQL*Plusは接続できるけど諸事情によりファイル転送ができないような環境で
現在DB上にあるテーブルのDDLを取得したい場合
以下のコマンドにより取得可能。

SET LONG 2000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE', 'TEST_TABLE', 'TESTUSER01') FROM DUAL;

構文は

DBMS_METADATA.GET_DDL('オブジェクトタイプ', 'オブジェクト名', 'スキーマ名')

詳しくはマニュアルからDBMS_METADATAパッケージの仕様を確認すること。

DDLの生成はテーブルに限らず他のオブジェクトでも可能。
例えば、表領域の場合は以下のようになる。
SELECT DBMS_METADATA.GET_DDL('TABLESPACE', 'USER01') FROM DUAL;

この場合は、当然ながらスキーマ名は不要となる。

Databaseのキャラクタセット(文字コード)の確認方法

構築済みDatabaseのキャラクタセットを確認したい場合は、
NLS_DATABASE_PARAMETER  を問い合わせる。
(あまり使わないからすぐに忘れる;)

SELECT * FROM NLS_DATABASE_PARAMETER
WHERE PARAMETER = 'NLS_CHARACTERSET';

ブログ内検索

プロフィール

HN:
宇佐 義男
性別:
男性
自己紹介:
都内で活動中のフリーエンジニア
最近はOracle DBに関する作業が主です。

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

最新CM

[08/06 Apagajid]
[06/23 Ajimehof]
[05/28 ovkftcz]
[05/20 Adeepen]
[05/13 Ajirubuy]

バーコード

P R

忍者アナライズ

免責事項

当ブログは日本オラクル株式会社 及びその子会社、関連会社とは一切関係ありません。 当ブログに記述の内容については、実際とは異なる場合があります。 記載しているコマンド、スクリプトを利用したことによって発生した問題、障害等については一切責任を負いません。 利用は自己責任にてお願い致します。