Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


13.11.1 データ用DBエリアの暗号化をやめる場合

データ用DBエリアの暗号化をやめる場合,そのデータ用DBエリアをいったん削除してから,非暗号化対象のデータ用DBエリアとして再度追加する必要があります。そのため,データ用DBエリアに格納されている表,インデクスの再定義や,表へのデータの再インポートなどをする必要があります。

<以降の手順の説明について>

T1のデータを暗号化する必要がなくなったため,表T1を格納しているデータ用DBエリアの暗号化をやめる手順を説明します。

〈この項の構成〉

(1) データベースのバックアップを取得する

データ用DBエリアの暗号化をやめる手順を間違えると,データベースの状態が手順の実施前とは異なってしまうおそれがあります。そのため,データ用DBエリアの暗号化をやめる前にデータベースのバックアップを取得してください。バックアップの取得方法については,「13.6 バックアップを取得する場合」を参照してください。

データ用DBエリアの暗号化をやめる手順を間違えた場合,バックアップからデータベースを回復し,そのあとにデータ用DBエリアの暗号化をやめる手順を再度実施してください。

(2) 暗号化をやめるデータ用DBエリアを調べる

T1を格納しているデータ用DBエリアと,表T1のインデクスを格納しているデータ用DBエリアを調べてください。これらのデータ用DBエリアの暗号化をやめます。

手順

次のすべての操作は,DBA権限を持っているHADBユーザで実行してください。

  1. T1を格納しているデータ用DBエリアを調べる

    付録B.22 ディクショナリ表の検索」の「(10) 表名から表が格納されているDBエリア名を調べる場合」で説明している作業を実施してください。

  2. T1の全インデクス名を調べる

    付録B.22 ディクショナリ表の検索」の「(8) 表名から表に定義された全インデクス名を調べる場合」で説明している作業を実施してください。

  3. T1のインデクスを格納しているデータ用DBエリアを調べる

    付録B.22 ディクショナリ表の検索」の「(13) インデクス名からインデクスが格納されているDBエリア名を調べる場合」で説明している作業を実施してください。

表とインデクスを同じデータ用DBエリアに格納している場合,1.と3.の実行結果に出力されるデータ用DBエリア名が重複します。

メモ

ここでは,表T1がデータ用DBエリアADBUTBL01に,表T1のインデクス(IDX01)がADBUIDX01に格納されているとします。以降の手順では,データ用DBエリアADBUTBL01およびADBUIDX01の暗号化をやめる手順を説明します。

(3) DBエリア追加・変更オプションファイルを作成する

暗号化対象のデータ用DBエリア(ADBUTBL01ADBUIDX01)を削除したあとに,非暗号化対象のデータ用DBエリア(ADBUTBL01ADBUIDX01)として追加します。そのため,暗号化対象のデータ用DBエリアの情報を取得し,それを基にadbmodareaコマンドのDBエリア追加・変更オプションファイルを作成してください。

データ用DBエリアを削除するときに使用するDBエリア追加・変更オプションファイルの作成

データ用DBエリア(ADBUTBL01ADBUIDX01)を削除するためのDBエリア追加・変更オプションファイルを作成してください。

ADBUTBL01削除用のDBエリア追加・変更オプションファイル>

adbrmarea -n ADBUTBL01

ADBUIDX01削除用のDBエリア追加・変更オプションファイル>

adbrmarea -n ADBUIDX01
データ用DBエリアを追加するときに使用するDBエリア追加・変更オプションファイルの作成

データ用DBエリア(ADBUTBL01ADBUIDX01)を非暗号化対象のデータ用DBエリアとして追加するため,現状のADBUTBL01ADBUIDX01の構成を反映したDBエリア追加・変更オプションファイルを次の手順で作成してください。

クラウドストレージ機能を使用しているかどうかによって手順が異なります。

手順(クラウドストレージ機能を使用していない場合)

次のすべての操作は,HADB管理者が実行してください。

  1. DBエリア追加・変更オプションの基となる情報を作成する

    adbdbstatusコマンドを実行して,データ用DBエリアなどを構成するファイルの情報を出力してください。

    adbdbstatus -d used | grep -E "^Used" | awk -F',' '{print $3, $9}' | awk '!a[$0]++' \
    | sed -e '/"ADBDIC"/d' \
          -e '/"ADBSTBL"/d' \
    | sed -r 's/^"(.*)" "(.*)"/adbaddarea -n \\"\1\\" -i 0K,x -v "\2",\\/g'

    <上記のコマンドの実行結果の例>

    adbaddarea -n \"ADBUIDX01\" -i 0K,x -v "/dev/disk/by-id/wwn-0x60...0000",\
    adbaddarea -n \"ADBUTBL01\" -i 0K,x -v "/dev/disk/by-id/wwn-0x60...0400",\
    adbaddarea -n \"ADBUTBL01\" -i 0K,x -v "/dev/disk/by-id/wwn-0x60...0401",\
    adbaddarea -n \"ADBUTBL01\" -i 0K,x -v "/dev/disk/by-id/wwn-0x60...0402",\
    adbaddarea -n \"ADBUTBL02\" -i 0K,x -v "/dev/disk/by-id/wwn-0x60...0002",\
    adbaddarea -n \"ADBUTBL03\" -i 0K,x -v "/dev/disk/by-id/wwn-0x60...0003",\
  2. 1.の実行結果を編集する

    1.の実行結果をエディタに貼り付けて,このファイルの内容をDBエリア追加・変更オプションファイルとして修正していきます。マニュアルHADB コマンドリファレンスDBエリア追加・変更オプションの形式を参照して,ファイルの内容を修正してください。

    また,次のことを確認して修正してください。

    • -nオプションにADBUTBL01ADBUIDX01以外が指定されている行を削除してください。

    • -vオプションにブロックスペシャルファイルが指定されていない場合は,次の修正をしてください。

      • -vオプションに指定されているDBエリアファイルがDBディレクトリ直下にある場合

        <修正例>

        adbaddarea -n \"ADBUTBL01\" -i 0K,x -v "$DBDIR/ADBUTBL01",\
           ↓下記のように修正する。
        adbaddarea -n \"ADBUTBL01\" -i 0K,1

        $DBDIRの部分は,DBディレクトリのパスが表示されます。上記の例の場合,DBディレクトリの直下にDBエリアファイルADBUTBL01があります。

        この場合,次の修正をしてください。

        -vオプション以降の指定を削除する。

        -iオプションに指定している作成ファイル数を1に変更する。

      • -vオプションに指定されているDBエリアファイルがDBディレクトリ直下にない場合

        <修正例>

        adbaddarea -n \"ADBUTBL01\" -i 0K,x -v "$DBDIR/AREAS/ADBUTBL01",\
           ↓下記のように修正する。
        adbaddarea -n \"ADBUTBL01\" -i 0K,1 -f \"AREAS/\"

        $DBDIRの部分は,DBディレクトリのパスが表示されます。上記の例の場合,「DBディレクトリ/AREAS」下にDBエリアファイルADBUTBL01があります。

        この場合,次の修正をしてください。

        -iオプションに指定している作成ファイル数を1に変更する。

        -v-fに変更する。

        ・「"$DBDIR/AREAS/ADBUTBL01"」を「\"AREAS/\"」に変更する。

        ・末尾の「,\」を削除する。

    • -nオプションに指定されているDBエリア名の重複行がある場合,すべての重複行で次の修正をしてください。重複行がない場合は,その行だけ次の修正をしてください。

      • 先頭行の-iオプションに指定しているファイル数を,重複行数と同じ数に変更してください。

      • 2行目以降については,ブロックスペシャルファイルより前の記述を削除してください。

      • 最終行の末尾の「,\」を削除してください。

    <修正後のファイルの例>

    adbaddarea -n \"ADBUIDX01\" -i 0K,1 -v "/dev/disk/by-id/wwn-0x60...0000"
    adbaddarea -n \"ADBUTBL01\" -i 0K,3 -v "/dev/disk/by-id/wwn-0x60...0400",\
                                           "/dev/disk/by-id/wwn-0x60...0401",\
                                           "/dev/disk/by-id/wwn-0x60...0402"
  3. ファイルを編集する

    ADBUTBL01ADBUIDX01のデータ用DBエリアファイルのシンボリックリンクをDBディレクトリ下のサブディレクトリに配置している場合,ADBUTBL01ADBUIDX01を定義しているadbaddareaオペランドに,-fオプションを指定する必要があります。3.では,adbaddareaオペランドに-fオプションを指定する必要があるかどうかと,-fオプションに指定するパスを調査します。

    なお,2.で-fオプションを指定したadbaddareaオペランドについては,3.の作業は不要です。

    手順

    メモ

    手順の各操作にある$DBDIRにはDBディレクトリ名を入力してください。また,実行結果にある$DBDIRにはDBディレクトリ名が表示されます。

    1. DBディレクトリ直下のファイルの一覧を表示する

      ls $DBDIR

      上記のコマンドを実行すると,DB ディレクトリ直下のファイルの一覧が表示されます。

      lsコマンドの実行結果の例>

      ADBDIC  ADBMST  ADBSTBL  ADBSYS  ADBWORK  ADBWRK  AREAS ADBUIDX01  ADBUTBL02  SPOOL

      上記の実行結果に,ADBUTBL01ADBUIDX01と同名のファイルがあるかどうかを確認してください。この例の場合,同名のファイルとしてADBUIDX01はありますが,ADBUTBL01はありません。したがって,ADBUIDX01のデータ用DBエリアファイルのシンボリックリンクADBUIDX01はDBディレクトリ直下に配置されていますが,ADBUTBL01のデータ用DBエリアファイルのシンボリックリンクADBUTBL01はDBディレクトリ直下に配置されていません。

    2. シンボリックリンクADBUTBL01の配置場所を調査する

      findコマンドを実行して,a.の実行結果に表示されていないシンボリックリンクADBUTBL01が,DBディレクトリ内のどこに配置されているかを調査してください。

      find $DBDIR -name ADBUTBL01 2>/dev/null

      上記のコマンドを実行すると,DBディレクトリ内に存在するファイル名がADBUTBL01であるファイルの一覧が表示されます。

      findコマンドの実行結果の例>

      $DBDIR/AREAS/OLD/ADBUTBL01
      $DBDIR/AREAS/NEW/ADBUTBL01

      上記の実行結果のように,異なるパスの同名ファイルが複数表示された場合は,次の手順に進んでください。

      パスが1 つしか表示されない場合は,d.に進んでください。

    3. $DBDIR/AREAS/OLD/ADBUTBL01のリンク先を調査する

      ls -lコマンドを実行して,b.の実行結果に表示された$DBDIR/AREAS/OLD/ADBUTBL01のリンク先を表示してください。

      ls -l $DBDIR/AREAS/OLD/ADBUTBL01* | sed -e 's/.* -> //g'

      lsコマンドの実行結果の例>

      /dev/disk/by-id/wwn-0x60...a000

      上記の実行結果と,2.の「<修正後のファイルの例>」に指定しているデータ用DBエリアADBUTBL01の定義の-vオプションに指定しているブロックスペシャルファイルのパスを見比べてください。

      この例の場合,上記の実行結果とブロックスペシャルファイルのパスが一致していないため,該当するファイルではありません。

    4. $DBDIR/AREAS/NEW/ADBUTBL01のリンク先を調査する

      ls -lコマンドを実行して,b.の実行結果に表示された$DBDIR/AREAS/NEW/ADBUTBL01のリンク先を表示してください。

      ls -l $DBDIR/AREAS/NEW/ADBUTBL01* | sed -e 's/.* -> //g'

      lsコマンドの実行結果の例>

      /dev/disk/by-id/wwn-0x60...0400
      /dev/disk/by-id/wwn-0x60...0401
      /dev/disk/by-id/wwn-0x60...0402

      上記の実行結果と,2.の「<修正後のファイルの例>」に指定しているデータ用DBエリアADBUTBL01の定義の-vオプションに指定しているブロックスペシャルファイルのパスを見比べてください。

      この例の場合,上記の実行結果とブロックスペシャルファイルのパスが一致しています。したがって,$DBDIR/AREAS/NEW/ADBUTBL01が,該当するファイルとなります。$DBDIR/AREAS/NEW/ADBUTBL01の下線部分を,データ用DBエリアADBUTBL01adbaddareaオペランドの-fオプションに指定してください。

      <修正後のファイルの例>

      adbaddarea -n \"ADBUIDX01\" -i 0K,1 -v "/dev/disk/by-id/wwn-0x60...0000"
      adbaddarea -n \"ADBUTBL01\" -f \"AREAS/NEW/\" -i 0K,3\
                 -v "/dev/disk/by-id/wwn-0x60...0400",\
                    "/dev/disk/by-id/wwn-0x60...0401",\
                    "/dev/disk/by-id/wwn-0x60...0402"

      下線部分の-fオプションを追加します。

  4. DBエリア追加・変更オプションファイルを作成する

    3.で作成したファイルを,追加するデータ用DBエリアごとに2つに分割して,DBエリア追加・変更オプションファイルを作成してください。

    ADBUIDX01追加用のDBエリア追加・変更オプションファイルの例>

    adbaddarea -n \"ADBUIDX01\" -i 0K,1 -v "/dev/disk/by-id/wwn-0x60...0000"

    ADBUTBL01追加用のDBエリア追加・変更オプションファイルの例>

    adbaddarea -n \"ADBUTBL01\" -f \"AREAS/NEW/\" -i 0K,3\
               -v "/dev/disk/by-id/wwn-0x60...0400",\
                  "/dev/disk/by-id/wwn-0x60...0401",\
                  "/dev/disk/by-id/wwn-0x60...0402"
手順(クラウドストレージ機能を使用している場合)
  1. DBエリア追加・変更オプションファイルを作成する

    非暗号化対象のデータ用DBエリアを追加するときに使用するDBエリア追加・変更オプションファイルを作成してください。

    ADBUIDX01追加用のDBエリア追加・変更オプションファイルの例>

    adbaddarea -n ADBUIDX01

    ADBUTBL01追加用のDBエリア追加・変更オプションファイルの例>

    adbaddarea -n ADBUTBL01

    下線部分には,追加するデータ用DBエリア名(ADBUIDX01,ADBUTBL01)を指定します。

メモ

ここで作成したDBエリア追加・変更オプションファイルは,後ほどの作業で使用します。

(4) 表およびインデクスの定義情報を取得する

データ用DBエリア(ADBUTBL01ADBUIDX01)の再作成後に表やインデクスを再定義するため,表およびインデクスの定義情報と,表に対するアクセス権限の情報を次の手順で取得してください。

手順

  1. データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表またはインデクスを確認する

    ADBUTBL01ADBUIDX01に表T1およびインデクスIDX01以外の表またはインデクスが格納されていないかを確認してください。DBA権限を持っているHADBユーザで,「付録B.22 ディクショナリ表の検索」の「(15) DBエリアに格納されている表の表名を調べる場合」および「(16) DBエリアに格納されているインデクスのインデクス名を調べる場合」で説明している作業を実施してください。

    メモ
    • ここでは,ADBUTBL01には,表T1以外に表T2が格納されているとします。また,ADBUIDX01には,インデクスIDX01以外に表T3が格納されているとします。以降の手順は,その前提で説明します。

    • ADBUTBL01ADBUIDX01はいったん削除するため,表T2および表T3もいったん削除する必要があります。そのため,ADBUTBL01ADBUIDX01の追加後に,表T1だけではなく,表T2および表T3も再作成する必要があります。

  2. 表に対するアクセス権限の情報を取得する

    データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表T1,表T2,および表T3に対するアクセス権限の情報を取得してください。「13.9.2 データ用DBエリアだけを暗号化している場合」の「(3) 表およびインデクスの定義情報を取得する」の「2.表に対するアクセス権限の情報を取得する」の作業を実施してください。

  3. データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表およびインデクスの定義情報を取得する

    ADBUTBL01ADBUIDX01に格納されている表T1,表T2,および表T3とインデクスIDX01の定義情報を取得してください。DBA権限を持っているHADBユーザで,「付録B.22 ディクショナリ表の検索」の「(29) 実表の定義情報を調べる場合」および「(30) インデクスの定義情報を調べる場合」で説明している作業を実施してください。

    メモ
    • HADBでは,表およびインデクスの定義情報を出力する機能を提供していません。そのため,ディクショナリ表を検索して,表およびインデクスの定義情報を取得しておき,データ用DBエリアの再作成後に表およびインデクスを再定義できるようにしておく必要があります。

    • 表およびインデクスを定義したときの定義情報がある場合は,この作業を実施する必要はありません。

  4. T2と表T3のインデクスの定義情報を取得する

    T2と表T3をいったん削除するため,表T2と表T3のインデクスもいったん削除されます。そのため,表T2と表T3のインデクスを再定義する際に必要となるインデクスの定義情報を取得してください。DBA権限を持っているHADBユーザで,「付録B.22 ディクショナリ表の検索」の「(30) インデクスの定義情報を調べる場合」で説明している作業を実施してください。

    なお,3.で取得したインデクスの定義情報と重複している情報がある場合は,その情報を削除してください。

  5. データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表を基表とするビュー表の名称を取得する

    T1,表T2,および表T3を基表とするビュー表の名称を取得してください。DBA権限を持っているHADBユーザで,「付録B.22 ディクショナリ表の検索」の「(9) 表名から表を使用する全ビュー表のビュー表名を調べる場合」で説明している作業を実施してください。

    なお,SELECT文の実行結果の重複排除をしてください。

  6. ビュー表のビューレベルを取得する

    DBA権限を持っているHADBユーザでディクショナリ表を検索してください。

    SELECT "TABLE_SCHEMA" AS "スキーマ名"
          ,"TABLE_NAME" AS "表識別子"
          ,"VIEW_LEVEL" AS "ビューレベル"
        FROM "MASTER"."SQL_VIEWS"
          WHERE "TABLE_SCHEMA" = ? AND "TABLE_NAME" = ?

    adbsqlコマンドで上記のSELECT文を実行した場合,?パラメタに対する入力データの入力要求があります。最初の入力要求には,5.で取得したビュー表のスキーマ名を,2番目の入力要求にはビュー表の表識別子を入力してください。

    メモ

    T1,表T2,および表T3をいったん削除するため,それらの表を基表とするビュー表(5.で調べたビュー表)が無効化されます。ビュー表を再作成する際,ビューレベルの値が低いビュー表から順に再作成する必要があるため,ここでビューレベルの値を取得しておきます。

  7. データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表がコスト情報を収集しているかどうかを確認する

    T1,表T2,および表T3が,コスト情報を収集しているかどうかを確認してください。

    DBA権限を持っているHADBユーザで,「付録C.9 システム表の検索」の「(1) コスト情報を収集した全実表の表名と収集日時を調べる場合」で説明している作業を実施すると,コスト情報を収集している表の一覧が表示されます。その一覧に表T1,表T2,表T3があれば,コスト情報を収集しています。

    メモ

    コスト情報を収集している場合は,表T1,表T2,表T3の再定義後にコスト情報を収集する必要があります。

メモ

ここで取得した情報は,後ほどの作業で使用します。

(5) 表のデータをエクスポートする

データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表T1,表T2,および表T3のデータをエクスポートしてください。エクスポートの方法については,「13.9.2 データ用DBエリアだけを暗号化している場合」の「(4) 表のデータをエクスポートする」を参照してください。

(6) データ用DBエリアの暗号化をやめる

データ用DBエリア(ADBUTBL01ADBUIDX01)の暗号化をやめてください。

手順

  1. データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表およびインデクスを削除する

    DROP TABLE文を実行して,表T1,表T2,および表T3を削除してください。このとき,削除動作は省略してください。

    メモ
    • DROP TABLE文(削除動作は省略)を実行すると,表T1のインデクス(IDX01)も自動的に削除されます。

    • T1,表T2,表T3以外のインデクスがデータ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている場合は,そのインデクスをDROP INDEX文で削除してください。

  2. データ用DBエリア(ADBUTBL01ADBUIDX01)を削除する

    adbmodareaコマンドを実行して,データ用DBエリア(ADBUTBL01ADBUIDX01)を削除してください。

    (3) DBエリア追加・変更オプションファイルを作成する」で作成した「データ用DBエリアを削除するときに使用するDBエリア追加・変更オプションファイル」を使用してください。

  3. データ用DBエリア(ADBUTBL01ADBUIDX01)を追加する

    adbmodareaコマンドを実行して,データ用DBエリア(ADBUTBL01ADBUIDX01)を暗号化対象のデータ用DBエリアとして追加してください。

    (3) DBエリア追加・変更オプションファイルを作成する」で作成した「データ用DBエリアを追加するときに使用するDBエリア追加・変更オプションファイル」を使用してください。

(7) 表およびインデクスを再作成する

削除した表(表T1,表T2,および表T3)とインデクスを再定義し,表にデータをインポートしてください。

手順

  1. 表を再定義する

    表の所有者がCREATE TABLE文を実行して,削除した表(表T1,表T2,および表T3)を再定義してください。「(4) 表およびインデクスの定義情報を取得する」で取得した表の定義情報を使用してください。

  2. インデクスを再定義する

    表の所有者がCREATE INDEX文を実行して,削除したインデクス(IDX01)を再定義してください。「(4) 表およびインデクスの定義情報を取得する」で取得したインデクスの定義情報を使用してください。

    <留意事項>

    • T2または表T3にインデクスが定義されていた場合は,そのインデクスもCREATE INDEX文で再定義してください。

    • T1,表T2,または表T3以外の表のインデクスがデータ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている場合,そのインデクスもCREATE INDEX文で再定義してください。そのあとに,そのインデクスの表を処理対象表に指定してadbidxrebuildコマンドを実行し,インデクスを再作成してください。

  3. 表に対するアクセス権限を付与する

    1.で再定義した表に対するアクセス権限をGRANT文で付与してください。

    (4) 表およびインデクスの定義情報を取得する」で取得した,表に対するアクセス権限の情報を使用してアクセス権限を付与します。

    アクセス権限の付与方法については,「13.9.2 データ用DBエリアだけを暗号化している場合」の「(6) 表およびインデクスを再作成する」の「3.表に対するアクセス権限を付与する」を参照してください。

  4. ビュー表を再作成する

    ALTER VIEW文を実行して,ビュー表を再作成してください。

    (4) 表およびインデクスの定義情報を取得する」の「5.データ用DBエリア(ADBUTBL01ADBUIDX01)に格納されている表を基表とするビュー表の名称を取得する」で調べたビュー表を再作成します。

    重要

    (4) 表およびインデクスの定義情報を取得する」の「6.ビュー表のビューレベルを取得する」で調べたビューレベルの値が低いビュー表から順に,ビュー表の所有者がビュー表を再作成してください。

  5. 表にデータをインポートする

    adbimportコマンドを実行して,再定義した表T1,表T2,および表T3にデータをインポートしてください。

  6. コスト情報を収集する

    adbgetcstコマンドを実行して,表のコスト情報を収集してください。

    (4) 表およびインデクスの定義情報を取得する」で,コスト情報を収集していた表を調査しています。

    メモ

    収集したコスト情報は,データ用DBエリアの再作成前のコスト情報とは異なる可能性があります。そのため,データ用DBエリアの再作成前とはSQL文のアクセスパスが変わる可能性があります。

13.11.1 データ用DBエリアの暗号化をやめる場合」の作業を実施した結果,暗号化対象のDBエリアが1つもない状態になった場合でも,HADBサーバの開始時にHADB暗号鍵利用パスワードの入力要求メッセージが出力されます(HADB暗号鍵利用パスワードを入力しないとHADBサーバを開始できません)。HADBサーバの開始時にHADB暗号鍵利用パスワードの入力要求メッセージを出力しないようにするには,「13.13 DBエリア暗号化機能の使用をやめる場合」で説明している作業を実施してください。