こんばんは、カズヤんです。
とりあえず、年末年始に担当案件で「DB再編成」っていう作業をやるので、その辺に関して書きたいと思います。ちなみにこの作業はSAP Basisコンサルタント業務経験としてLinkedinにかける普遍的なスキルです。ちなみに英語では、DB Reorganizationと言います。作業は丸2日ですが、超楽しみです。
この変更作業に関して、1ヶ月半前からアナウンスされていて、先輩に頼まれています。
私: DB再編成って何するんすか?
先輩: 断片化したDBのデータ領域をキレイキレイすることだよ^ ^
私: なるほど、DBの中をお掃除することなんですね!?
先輩: まぁ、そんなとこよ^ ^
で終わったんすけど、クソ適当か笑笑
実際には、
DB内の断片化したデータを整列させて、データ領域を大きくする作業
のことを指します。
Oracleの場合、運用中にデータは表領域内のセグメントの中にあるエクステントの中に、「使用しているデータ領域」と「空き領域のデータ領域」が混在し、データが断片化、使用していない領域が発生し、データベースのパフォーマンスが一挙に低下します。
これを食い止めるために、断片化しているデータをひとまとめにして、表領域の空き容量を増加させる作業をするわけです。ちなみこの断片化という言葉はかなり業界標準の言葉でググると死ぬほど出てくるのでSEの方は覚えましょうwww
以下、OracleHPでも解説がありますので参照ください ↓↓
ちなみに今回は、DB再編成の作業方法を記載します。
ここに記載する意味としては、DBを学んでいる方や、SAP Basis管理者からしたらこういう手順があったらかなり学習の助けになるからです。私は、Oracleの前DB2を学んでいたのですが、DB断片化是正の方法とかは出ても具体的な手順がなかったためイメージしづらく、大変苦痛でした。今回は、出血大サービスで細かく手順書きます。
手順としては、
1、バックアップ
2、事前作業
3、再編成作業
4、事後作業
となります。
1、バックアップ
バックアップでは、brbackupを利用してバックアップを取得します。brbackupはbrtoolsというSAP版Oracle特有の機能であり、Oracleのパラメータ変更や表領域拡張、今回の再編成などで利用する機能です。
2、事前作業
他のシステムはわかりませんが、どうやらテーブルによってはオフライン再編成でなく、オンライン再編成を実行する必要があるようです。
さらに、Oracle DBのみの作業となるため、SAPは停止しOracleのみを起動するため、この作業中では、Oracleに割り当てるメモリ領域を拡張して作業を行います。
でかいメモリリソースがあれば話は早いのですが、小さいとこでコツコツやるしかないのですw
3、再編成作業
ここから、再編成の作業に入るのですが、再編成を実施する上で下記の手順を踏む必要があります。これでも結構省略しています。大まかにこんな感じで作業を進めます。
要所要所に図を添付しますが、色の気持ち悪さは差し引いてみてくださいww
3-1.補助表領域の作成
→補助表領域にオンライン再編成でしか処理できない幾つかのテーブルを退避します。
3-2.特定テーブルのオンライン再編成
→既存の表領域にある特定テーブルを補助表領域に退避します。
3-3.対象表領域のエキスポート
→特定テーブル以外の表領域データをDBの外のOSの領域に退避します。
3-4.対象表領域の削除
→空っぽになった対象の表領域を削除します。バイバイサヨナラww
3-5.対象表領域の再作成
→今消したものと同じ表領域を作成します。さっきと違うのは、中身が綺麗ということですww
3-6.対象表領域のデータインポート
→DB外のOS領域に出した対象表領域データを3-5で作成した表領域の中にインポートします。つまり、中身が綺麗な表領域の中にデータを整列した状態で戻すイメージです。
3-7.特定テーブルの補助表領域からのオンライン再編成
→補助表領域に退避した特定テーブルを中身が綺麗な対象表領域の中に再編成コマンドで戻します。
3-8.補助表領域・エキスポートファイル削除
→中身が空っぽのこの表領域と、最後に、DB外のOS領域に出したファイルを削除して終わりです。もう不要です。さよならww
4、事後作業
最後に、統計情報更新してDBの変更内容をシステムに反映させます。そのあと、パラメータを戻したり、利用した補助表領域とエクスポートデータを削除して終わりです。
口では、簡単に言える再編成ですが、実際UNIXのようなコマンドベースのOSで作業をするとかなり緻密な計画のもと作業を行うため大変骨の折れる作業となります。今回は先輩に作業を計画を作成してもらっていますが、次回以降は私自身で作業を実施する必要がありそうです。
今回は、今私が学習しているOracleDBの内容がもろでるところでとても勉強になりました。実際、SQLのスクリプトも理解していないとできない箇所も多々あるのでありがたい経験です。
あとは、年始に作業終えて報告できたら幸いです。
今回の記事がBasisに携わる方々にとって有益であることを願っています。