TimesTen ClassicからTimesTen Scaleoutへのデータベースの移行

TimesTen Scaleoutを使用すると、データベースをTimesTen ClassicからTimesTen Scaleoutに移行できます。TimesTen Scaleoutでは、TimesTen Classicのほとんどの機能がサポートされ、含まれています。TimesTenレプリケーションの機能はサポートされておらず、増分自動リフレッシュありの静的読取り専用キャッシュ・グループのみがサポートされています。「TimesTen ScaleoutとTimesTen Classicの比較」を参照してください。

これらの手順は、TimesTen Classicデータベースに使用できます。次のオブジェクトは移行できません。

  • LOB列が含まれる表

  • ROWID列が含まれる表

  • インメモリー列圧縮が行われている表

  • エージング・ポリシーが設定されている表

  • 増分自動リフレッシュありの静的読取り専用キャッシュ・グループ以外のキャッシュ・グループ

  • レプリケーション・スキーム

TimesTen ClassicからTimesTen Scaleoutにデータベースを移行する前の前提条件:

  • 管理インスタンスおよびデータ・インスタンス含むグリッドを作成します。「グリッドの設定」を参照してください。

  • TimesTen Classicデータベースのバックアップを作成します。『Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイド』データベースのバックアップとリストアを参照してください。

  • TimesTen Classicデータベースのバックアップを作成した後、表からLOB列を削除することを検討してください。TimesTen Scaleoutでは、LOB列が含まれる表をインポートできず、表にLOB列が含まれている場合は、インポート・プロセスでエラー・メッセージが表示されます。これらの列を削除するには、DROPキーワードを含むALTER TABLE文を使用します。『Oracle TimesTen In-Memory Database SQLリファレンス』ALTER TABLEを参照してください。

  • ROWID列を含む表がある場合は、アプリケーションでROWIDベースのアクセスを使用しないことを検討してください。TimesTen Classicでは、ROWID列のセマンティクスはTimesTen Scaleoutとは異なります。「データ分散でのROWIDの理解」を参照してください。

  • 表の分散スキーム間のパフォーマンスのトレードオフを理解します。「表の分散スキームの定義」を参照してください。

このトピックの手順では、TimesTen Classicデータベースから移行できないオブジェクトを削除する方法について説明します。

データベースをTimesTen ClassicからTimesTen Scaleoutデータベースに移行するには、データベース・スキーマをエクスポートし、サポートされているオブジェクトをTimesTen Classicデータベースから移行します。これらを新しいTimesTen Scaleoutデータベースにリストアします。

  1. すべてのアプリケーションをTimesTen Classicデータベースから切断します。
  2. TimesTen Classicインスタンスで、ttSchemaユーティリティの-listオプションを使用してデータベース・スキーマをエクスポートします。-listオプションでは、TimesTen Scaleoutでサポートされているオブジェクトのみを指定します。database1をデータベースの名前に置き換えてください。
    % ttSchema -list tables,views,sequences,synonyms database1 > /tmp/database1.schema

    ttSchemaユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』ttSchemaを参照してください。

  3. TimesTen Classicインスタンスで、ttMigrateユーティリティを使用してデータベースのコピーを保存します。
    % ttMigrate -c database1 /tmp/database1.data
    
    Saving user PUBLIC
    User successfully saved.
    ...
    Sequence successfully saved.

    ttMigrateユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』ttMigrateを参照してください。

  4. データベース・スキーマおよび移行オブジェクト・ファイルを、いずれかのデータ・インスタンスからアクセス可能なファイル・システムにコピーします。任意のデータ・インスタンスを選択でき、特に指定のないかぎり、この同じデータ・インスタンスからすべての追加手順を実行する必要があります。
  5. 選択したデータ・インスタンスで、テキスト・エディタを使用してデータベース・スキーマ・ファイルを編集し、TimesTen ScaleoutでサポートされていないSQL文および句を削除し、表の分散スキーム句を追加します。これは、ステップ3で作成したデータベース・スキーマ・ファイルです。

    次のSQL文を削除します。

    • CREATE CACHE GROUP

      ノート:

      増分自動リフレッシュありの静的読取り専用キャッシュ・グループを作成する文を除きます。
    • CREATE REPLICATION

    • CREATE ACTIVE STANDBY PAIR

    • CREATE INDEX (これらの文を削除する前に次のノートを確認してください)

      ノート:

      CREATE INDEX文はTimesTen Scaleoutでサポートされていますが、データが分散された後に索引を作成すると、より効率的です。ただし、DISTRIBUTE BY REFERENCE分散スキームで分散する子表の場合は、子表のFOREIGN KEY句も参照される親表のCREATE INDEX文も削除しないでください。ステップ9で、データがTimesTen Scaleoutデータベースに挿入された後に索引がリストアされます。

    次のCREATE TABLE句を削除します。

    • COMPRESS BY

    • FOREIGN KEY (これらの文を削除する前に前述のノートを確認してください)

    • AGING

    CREATE USER文を追加して、database1.schema内のオブジェクトによって参照されるスキーマ所有者を作成します。たとえば、hr.employeesには、CREATE USER hr IDENTIFIED BY password文が必要になります。ユーザーとしてログインする場合は、これらのユーザーに権限を追加することも必要になることがあります。

    すべての表定義の分散スキーム句を追加します。CREATE TABLE文の分散スキームを指定しない場合、TimesTen ScaleoutはDISTRIBUTE BY HASH分散スキームを使用して表のデータを分散します。

    ノート:

    DISTRIBUTE BY REFERENCE分散スキームを使用する場合は、外部キー制約の子キー列をNOT NULLとして宣言してください。

    表定義に分散スキームを追加する前に、分散スキーム間のパフォーマンスのトレードオフを理解しておいてください。「表の分散スキームの定義」を参照してください。

  6. TimesTen Scaleoutの管理インスタンスから、TimesTen Scaleoutデータベースを作成します。「データベースの作成」を参照してください。
  7. 選択したデータ・インスタンスで、インスタンス管理者としてログインし、データベース・スキーマ・ファイルからデータベース・スキーマを作成します。new_database1を新しいTimesTen Scaleoutデータベースの名前に置き換えてください。
    % ttIsql -connStr "DSN=new_database1" -f /tmp/database1.schema
    
    Copyright (c) 1996, 2024, Oracle and/or its affiliates. All rights reserved.
    Type ? or "help" for help, type "exit" to quit ttIsql.
     
    connect "DSN=new_database1";
    Connection successful:
    ...
    exit;
    Disconnecting...
    Done.

    ノート:

    ttIsqlコマンドの出力を出力ファイルにリダイレクトすると役立つことがあります。この出力により、コマンドが正常に実行されたことを確認できます。出力をファイルにリダイレクトするには、ttIsql -connStr "DSN=new_database1" -f /tmp/database1.schemaコマンドの後に> myoutput.txtを追加します。

  8. 選択したデータ・インスタンスで、次のttMigrateコマンドを使用して、すべてのユーザー表の行をリストアします。
    % ttMigrate -r -gridRestoreRows new_database1 /tmp/database1.data
    
    Restoring table HR.EMPLOYEES
    ...
     10/10 rows restored.
    Table successfully restored.
    
  9. 選択したデータ・インスタンスで、次のttMigrateコマンドを使用して、索引および外部キーをリストアします。
    % ttMigrate -r -gridRestoreFinale new_database1 /tmp/database1.data
    
    Restoring table HR.EMPLOYEES
    ...
     10/10 rows restored.
    Table successfully restored.

    ノート:

    DISTRIBUTE BY REFERENCE分散スキームを使用しているため、ステップ5でFOREIGN KEY句を削除しなかった場合は、TimesTen Scaleoutでいくつかの外部キーを作成できないことを示すエラー・メッセージが表示されることがあります。これらの外部キーをステップ5で作成した場合は、これらのメッセージを無視してください。

データベースがTimesTen Scaleoutで動作可能になったら、TimesTen Scaleoutデータベースのバックアップを作成して、データベースの有効なリストア・ポイントを作成します。「データベースのバックアップおよびリストア」を参照してください。データベースのバックアップが作成されると、データベース・スキーマ・ファイル(この例では、/tmp/database1.schema)およびデータベースのttMigrateコピー(この例では、/tmp/database1.data)を削除できます。