2012年2月16日木曜日

11gにおける一時表領域がSYSTEM表領域なユーザに関する考察#3


(今回はいつにも増して下らないネタ…)

11.2.0.3.0時代、あるところに、ユーザのデフォルト表領域がSYSTEM表領域で、
一時表領域もSYSTEM表領域のユーザがおったそうな。。

前回はDBを新規に作ってみました。
SYSTEM表領域をディクショナリ管理表領域で作成すると、
TEMP表領域を作成しないという選択が出来ることが分かりました。

また、SQLリファレンスにある通り、
ユーザの作成時に一時表領域の指定を省略した場合、かつ
データベースのデフォルトの一時表領域が指定しなかった場合は、
ユーザの一時セグメントはSYSTEM表領域に格納されました。

検証を通して分かったことを纏めます。
1)DBCAでDBを作成しようとするとSYSTEM表領域の
 エクステント管理はローカル管理
2)データベースがローカル管理となっている場合は、一時表領域が必要
3)データベース作成時に一時表領域が作成される場合は
 ユーザ作成時に一時表領域の指定を省略しても
 ユーザの一時表セグメントはデータベース作成時の一時表領域に格納される

つまり、何らかの理由でディクショナリ管理のSYSTEM表領域で
データベースを作成したが、
その際に一時表領域は作成しなかった。という状況が考えられる。


11gのSYSTEM表領域のエクステント管理のデフォルトはローカル管理であること、
管理者が意図的にユーザの一時表領域に、SYSTEM表領域を指定する可能性は
低いと考えられることから、
「過去環境のDBを作成したDB作成スクリプトを再利用して新環境のDBを作成した。」
というのが原因なのだろうか。
ただ、過去のバージョンにおいてもユーザの一時セグメントの格納先が
SYSTEM表領域だった可能性は少ないと思うので(のはず)、
ユーザの作成スクリプトかなんかを流す順序に問題があり、
追加でデータベースのデフォルト表領域を作成するスクリプトを流す前に、
ユーザ作成スクリプトを実行してしまっていた。
というところだろうか。。

なんとなく、ありそうな話だ。。。


で、何が言いたいかというと、

移行前の過去バージョンのDB作成スクリプトが、
SYSTEM表領域をディクショナリ管理で作っているようなことがなく、
一時表領域を作っていないようなもので、
それをそのまま使って新環境に11gのDBを作ろうとしない限りは、
ユーザの一時セグメントの格納先がSYSTEM表領域になっていて、
気が付いたら一般ユーザのソート処理をくらっていて、
気が付いたらSYSTEM表領域が肥大化しているということは、
まずありえない。



かなりまぐれとかなんやかんやが続かない限りは、きっとね。

0 件のコメント:

コメントを投稿