brconnect: Oracle 接続パスワード変更

SAPのヘルプでも公開されている内容ですが、一部困って調べたので覚書。

Changing Passwords for Database Users with BRCONNECT – Oracle on Windows – SAP Library

上記URLに記載されている内容だと実はそのままコマンドが通らないというオチです。リファレンスが間違っているんですね。実際には次の様にコマンド発行します。

brconnect -u system/<Login password> -f chpass -o <Target ID> -p <New password>

こうする事で見事にパスワード変更完了。要はターゲットID(=user_nameの部分)を指定するオプションを -u から -o にしてあげるだけですが、ご注意を。あ、URLのコマンドをそのまま発行してもエラーで返されるだけなので安全は安全です。

ORACLE: ロールバックセグメントの現サイズを取得する

一般のDBAの方々であればご存知でしょうが、何せ勉強中なものなので。ロールバックセグメント名と現在のサイズを SQL で一覧表示します。ロールバックセグメントは主に2つのテーブルで静的情報と動的情報を持っています。

静的情報
dba_rollback_segs
動的情報
v$rollstat

dba_rollback_segs から セグメント名 (SEGMENT_NAME) とセグメントID (SEGMENT_ID) を出力します。

SQL> select SEGMENT_NAME,SEGMENT_ID from dba_rollback_segs;
 
SEGMENT_NAME                   SEGMENT_ID
------------------------------ ----------
SYSTEM                                  0
FOO_001                                 2
FOO_002                                 3
FOO_003                                 4
FOO_004                                 5
FOO_005                                 6
FOO_006                                 7
FOO_007                                 8
FOO_008                                 9
FOO_009                                10
FOO_010                                11

一方 v$rollstat から セグメント番号 (USN) と セグメントサイズ (RSSIZE) を出力します。

SQL> select USN,RSSIZE from v$rollstat;
 
USN     RSSIZE
---------- ----------
0    1138688
2  115335168
3  115335168
4  115335168
5  115335168
6  115335168
7  115335168
8  115335168
9  115335168
10  115335168
11  115335168

ここで SEGMENT_ID と USN が同じ情報を管理している事がわかります。そこで dba_rollback_segs.SEGMENT_ID と v$rollstat.USN をキーとして連結してみます。

SQL> select sta.SEGMENT_NAME,dyn.USN,dyn.RSSIZE
2  from dba_rollback_segs sta, v$rollstat dyn
3  where sta.SEGMENT_ID = dyn.USN;
 
SEGMENT_NAME                          USN     RSSIZE
------------------------------ ---------- ----------
SYSTEM                                  0    1138688
FOO_001                                 2  115335168
FOO_002                                 3  115335168
FOO_003                                 4  115335168
FOO_004                                 5  115335168
FOO_005                                 6  115335168
FOO_006                                 7  115335168
FOO_007                                 8  115335168
FOO_008                                 9  115335168
FOO_009                                10  115335168
FOO_010                                11  115335168

USN は必要なければ表示しない様に項目を削れば良いでしょう。

SQL> select dba_rollback_segs.SEGMENT_NAME,v$rollstat.RSSIZE
2  from dba_rollback_segs,v$rollstat
3  where dba_rollback_segs.SEGMENT_ID = v$rollstat.USN;
 
SEGMENT_NAME                       RSSIZE
------------------------------ ----------
SYSTEM                            1138688
FOO_001                         115335168
FOO_002                         115335168
FOO_003                         115335168
FOO_004                         115335168
FOO_005                         115335168
FOO_006                         115335168
FOO_007                         115335168
FOO_008                         115335168
FOO_009                         115335168
FOO_010                         115335168

これで監視もばっちりですよ。

ORACLE: ロールバックセグメントに対する誤解

ロールバックセグメントが開放されるタイミングについて大変な誤解をしていました。

これまで commit されたタイミングで使用していたセグメントが開放されると思い込んでいたのですが、ある障害に対応している際に同僚からの資料の提示により真実を知るに至りました。以下が提示された内容です。

RollbackSegmentのoptimalによって縮小(shrink)するタイミングは
・SMONによって(データベース起動時、データベース起動後 12時  間毎)
・手動で縮小した時
・トランザクションがエクステントの境をまたがる時

SMON が12時間毎に縮小していたんですね。何てことでしょう。しかし “聞くは一時の恥” とも言います。これからは正しい情報をベースに試行錯誤していきます。因みに手動で optimal値 に近づけるためには次の文を使います。

SQL> alter rollback segment ROLLBACK_SEGMENT_NAME shrink

ただ shrink の頻度が増えると ORA-1555 が出やすくなるというデメリットもある様です。何れにせよDBの運用に密接に絡んでくる話ですので状況に応じた対応という結論に落ち着きそうですね。

参考URL
Oracle Technology Network (OTN) Japan – 掲示板 : RBSにおけるOPTIMAL設定のデメリット