業界トップクラスのデータベースエキスパート集団

株式会社アクアシステムズ

Tibero RDBMS 5検証
第10回「検証結果のまとめ」

 Tibero RDBMS 5検証

update:

第10回「検証結果のまとめ」

著者:金永昊

インストール結果のまとめ

Tiberoのインストールモードは、GUIモード、コンソールモード、手動モードがあります。 Tibero のインストールモードとOracleのインストールモードについて、Tiberoのインストールモード別の類似点、Oracleとの相違点を検証・比較してみました。

モード

Tibero

Oracle

GUI

GUI対話型。Tiberoインストーラに表示される一連の画面で必要な情報を指定し、インストールを進めます。

Oracle Universal InstallerとDatabase Configuration Assistantを使用してインストールを進めます。

コンソール

テキスト対話型。Tiberoインストーラ画面に従って必要な情報を入力してインストールを進めます。

レスポンス・ファイル(サイレント・モードまたはレスポンス・ファイル・モード)を使用し、インストールとデータベース作成を進めます。

手動モード

バイナリ実行ファイルを実行する非対話型でインストールは不要であり、Create Database文を使用し、データベースを作成します。

Oracle Universal Installer とCREATE DATABASE文を使用し、インストールを進めます。

相違点

1.Tiberoソフトウェアだけインストールすることはできなく、すべてのインストールモードでは、インストール中にデータベースを作成しなければならない。
2.Tiberoをインストールする際は、表領域と初期化パラメータの詳細設定をすることはできなく、Tiberoインストール後に設定する必要がある。
3.OracleのDBCAのようなツールが備わっていないので、インストール後のデータベース変更は、手動で変更する必要がある。
4.プロンプトに対する応答をレスポンス・ファイルに組み込んだOracleのレスポンス・ファイル・モードのような機能が備わっていない。
5.Tiberoの手動モードでは、ライセンスファイル(license.xml)が必要である。
6.Tiberoインストールの要件において、Linuxのrpmパッケージをインストールする必要がない。Oracleでは、必要なrpmパッケージがインストールされていないと、インストール中にエラーが発生してしまう。
7.Tiberoをインストールする前に、必ずJDK 1.5.17以上のJDKがンストールされていなければならない。


アプリケーション結果のまとめ

Oracleに対応しているアプリケーションをTiberoへ移行し、問題なく同様の動作をするかどうか検証した結果、各アプリケーションが何%の互換率で動いたのかを以下のグラフに示しました。

(※互換性に問題なく完璧に動いた場合を100%とした場合)


各アプリケーションの紹介

  1. ECサイト(ショピングモール)規模のウェブアプリケーション
  2. SI Web Shopping (JDBCドライバ使用)
  3. データベースの開発支援ツール(SQL、PL/SQLストアドプログラム)
  4. A5:SQL(ODBCドライバ使用)
  5. データベースの性能分析・監視ツール、データベース監査ツール
  6. Performance Analyzer 4(JDBCドライバ使用)
  7. オープンソース業務アプリケーション
  8. OpenOffice Base(JDBCドライバ使用)
  9. Javaクラスライブラリ
  10. JFree Chart(JDBCドライバ使用)

各アプリケーションの互換率

OracleからTiberoへデータベースを移行し、必要に応じてソースコードを変更してアプリケーションを動かした結果です。(想定値)

 

DB
接続
(※注5)

DML

DDL

PL/SQL
(※注4)

プログラム
ソース修正(※注1)

アプリ環境設定
手間・手順
(※注2)

平均総合
互換率

SI WEB Shpping

100%

80%
(※注3)

100%

80%

98%

100%

93.0%

A5:SQL

100%

100%

100%

100%

N/A

95%

99.0%

Performance Analyzer 4

100%

100%

100%

N/A

70%

100%

94.0%

OpenOffice Base

100%

100%

100%

N/A

N/A

100%

100%

JFree Chart

100%

100%

100%

N/A

98%

100%

99.6%

合計

100%

96%

100%

90%

88.7%

99%

97.1%

※N/A:該当なし
※全体平均総合互換率が90%未満なら、Oracle互換のデータベースではないとみなす。
※注1:JDBCドライブのDB Connection部分のソースコード変更
※注2:OracleとTiberoの手間・手順が変わらない場合を100%とする。
・A5:SQLの場合は、Tibero ODBCドライバをインストールする必要があります。
※注3:LIKECを使用しているSQL文
※注4:TiberoのtbPSM(OracleのPL/SQL相当)は、PL/SQLエラーコードの互換性が低いため、20%引きました。(PL/SQLプログラムの中、エラーコードを扱うソースコードがあれば、修正する必要があります)
※注5:OracleのJDBC、ODBCをTiberoのJDBC、ODBCに入れ替えて接続



オプティマイザ結果のまとめ

Oracleの互換性検証(実行計画:パラレル実行)検証結果のまとめ

TiberoとOracle両方のデータベース側で同じパラレルSQL文を実行して実行計画を確認しました。Nested LoopパラレルSQL文以外には、実行計画(アクセスパス)が一致していました。
SQL文実行中にエラーが発生しなかったので、Oracleで使ったパラレルSQL文とパラレルヒントをそのままTiberoで再利用することができると思います。

さらに、Tiberoオプティマイザのパラレル実行計画はOracleに似ているので、パラレル化関連のOracle SQLチューニング技術をTibero SQLチューニングにも活かせると言えます。


Oracleの互換性検証(実行計画:パーティション)検証結果のまとめ

TiberoとOracle両方のデータベース側で同じSQL文を実行して実行計画を確認しました。 アクセスパスとテーブルジョイン順序が少し異なり、Tiberoの方のアクセスパス回数が少ないです。 パーティション・プルーニングの方は、両方とも正しく動作しました。 LIST_HASHパーティションの実行計画では、かなり違いました。Tiberoの方は、パーティション・プルーニング後HASH JOINが行われましたが、Oracleの方は、パーティション・プルーニング後NESTED LOOPSが行われました。 SQL文実行中にエラーが発生しなかったので、Oracleで使ったSQL文をそのままTiberoで再利用することができると思います。


Oracleの互換性検証(実行計画:複合クエリ)検証結果のまとめ

TiberoとOracle両方のデータベース側で同じ複合SQL文を実行し、問題なく実行ができ、実行計画を確認できました。その結果についてOracle実行計画とTiberoの実行計画を比較してみました。

「Tiberoの実行計画」

実行ID

実行順序

操作(アクセスパス)

オブジェクト名

3

1

TABLE ACCESS (FULL)

DEPT

7

2

TABLE ACCESS (FULL)

EMP

8

3

TABLE ACCESS (FULL)

SALGRADE

6

4

NESTED LOOPS

 

11

5

TABLE ACCESS (FULL)

SALGRADE

10

6

DISTINCT (SORT)

 

13

7

TABLE ACCESS (FULL)

SALGRADE

12

8

DISTINCT (SORT)

 

9

9

UNION

 

5

10

NESTED LOOPS (ANTI)

 

14

11

INDEX (FAST FULL SCAN)

EMP2_PK

4

12

HASH JOIN

 

2

13

HASH JOIN (REVERSE LEFT OUTER)

 

1

14

DISTINCT (SORT)

 


「Oracleの実行計画」

実行ID

実行順序

操作(アクセスパス)

オブジェクト名

4

1

TABLE ACCESS FULL

DEPT

8

2

TABLE ACCESS FULL

SALGRADE

7

3

SORT JOIN

 

11

4

TABLE ACCESS FULL

EMP

10

5

SORT JOIN

 

9

6

FILTER

 

6

7

MERGE JOIN

 

12

8

INDEX UNIQUE SCAN

EMP2_PK

5

9

NESTED LOOPS

 

3

10

HASH JOIN RIGHT OUTER

 

15

11

TABLE ACCESS FULL

SALGRADE

16

12

TABLE ACCESS FULL

SALGRADE

14

13

UNION-ALL

 

13

14

SORT UNIQUE

 

2

15

FILTER

 

1

16

SORT UNIQUE

 

SQL文を実行する前に、DBMS_STATS.GATHER_SCHEMA_STATSプロシージャでスキーマの統計情報を収集してから複合クエリを実行しましたが、実行計画のアクセスパスと順序が一致していませんでした。
複雑なSQLほど、アクセスパスが多くなり、実行計画が一致しない可能性が高くなると言えます。なぜなら、Tiberoのティマイザは、コストベース・オプティマイザ(Cost Base Optimizer)からです。データベースの現状とサーバーマシンのリソース使用量に影響を受け、実行計画を立てますので、Tiberoオプティマイザが必ずしもOracleと同じ動作をするとは限りません。


PL/SQL、Pro*C結果のまとめ

Oracleの互換性検証(PL/SQL)検証結果のまとめ

OracleとTibero両方のデータベース側で、同じPL/SQLソースコードを実行した結果はOKでした。何もエラーが起こらずにコンパイル、ストアド・オブジェクトの作成などが問題なくできました。 それに加えて、SI Web Shoppingにて検証したストアド・ファンクション36本やストアド・プロシージャ51本も含め、すべてが問題なくコンパイル、作成・実行(呼び出し)ができました。

EXAMPLE6:ユーザー定義(CREATE TYPE文(※注1)でコレクション型を定義については、 現在Tibero RDBMS5では、サポートされていないですが、(※Tibero RDBMS 6 から正式にサポートする予定)以下のように迂回する方法でTypeを作成することができます。

※注1:PL/SQLでコレクション型(配列)を定義する方法は、以下の3つの方法があります。
1.PL/SQLブロックで定義
2.パッケージ内で定義
3.CREATE TYPE文でコレクション型を定義


Oracleの互換性検証(Pro*C)検証結果のまとめ

バグフィックス後、OracleとTibero両方のデータベース側で同じPro*Cソースコードをプリコンパイルし、プリコンパイルしたCソースファイルをコンパイルし、作られた実行可能ファイルを実行した結果はOKでした。プリコンパイルとコンパイル間、コンパイルエラーは一切に発生せずに、cソースファイルと実行可能ファイルが作成されました。
コンパイル時間と実行経過時間は、両方とも2~3秒以内で完了しました。 今回使用したEXAMPLE2は、OracleのPro*C Demoサンプルプログラムです。


Tibero基本機能結果のまとめ

APM(自動性能監視)の検証結果のまとめ

Tiberoデータベースに負荷がかかっている間にスナップショットを手動で取得し、性能関連レポートを出力することができました。レポートの内容を確認すると、インスタンスに負荷がかかっていたことが分かりました。
APMレポートはOracle AWRレポートに似ていますので、Oracle AWRレポートの内容を理解・分析できるDBAなら、APMレポートも無理なく使えると言えます。


Tiberoデータベース一貫性の検証結果のまとめ

・行レベル・ロックは、TiberoとOracle両方とも同じ結果になりました。
・UNDO表領域を使用した読み取り一貫性の結果は、次の通りです。

セッション

UNDOデータファイルの自動拡張OFF

UNDOデータファイルの自動拡張ON

oracleセッション1
UPDATE

OK

OK

tiberoセッション1
UPDATE

TBR-21002: No more undo space available. TBR-15163: Unhandled exception

OK

oracleセッション2
SELECT

ORA-01555: スナップショットが古すぎます:
ロールバック・セグメント番号18、名前"_SYSSMU18_4146660403$"が小さすぎます ORA-06512: 行20

OK

tiberoセッション2
SELECT

OK

OK

OracleとTiberoのUNDO_RETENTION(※注1)パラメータの値は、900(15分)でした。
OracleでのUNDO_RETENTIONパラメータは、現行のUNDO表領域に十分な領域がある場合にのみ有効です。アクティブ・トランザクションにUNDO領域が必要で、UNDO表領域に空きがない場合、期限切れ前のUNDO領域を再利用します。
反面Tiberoでは、UNDO表領域に空きがない場合は、再利用しないで“21002: No more undo space available.”というエラーを返しますが、必要に応じて再利用するように設定は可能です。(隠しパラメータを変更すること)

※注1:UNDOの保存期間の下限値(秒)です。

Tiberoデータベースリンクの検証結果のまとめ

Tiberoのデータベースリンクを使用してOracleの静的データ・ディクショナリ・ビューでOracleのバージョンデータを取得することができ、Oracleのdblink_tbテーブルにSELECT文、 INSERT文、 DELETE文、UPDATE文、COMMIT文の実行も、問題なく操作できました。 Tiberoデータベースリンクを使用する時のセッション数は、変わらないそうです。 OracleからTiberoへのデータベースリンクは、Oracleが提供するゲートウェイ(10g : hsodbc, 11g : dg4odbc)を使えば、データベースリンクを作成できることが分かりました。


Tiberoデータベースのバックアップおよびリカバリの検証結果

一行のコマンドでバックアップとリカバリが簡単にできました。 これは、シェルなどのバッチファイルを作成する時に役に立つと言えます。 RMGRは、Oracle RMANと違い、バックアップ情報を制御ファイルか表領域に格納しないため、コマンドなどでバックアップ情報を確認できないことが分かりました。 但し、RMGR Infoというテキストファイル(rmgr.inf)にバックアップ情報が記録されるので、バックアップ情報をRMGR Infoファイルで確認することができます。 TiberoのRMGRでリカバリを行う際、バックアップ作成時に作られたRMGR infoファイルが必要となります。このRMGR infoファイルが存在しなければ、RMGRでリカバリできませんので、失わないように管理する必要があります。


Tiberoユーティリティ結果のまとめ

tbExportの検証結果のまとめ

tbExportはOracle expとそっくりであり、操作方法がOracle expに似ています。問題なくtiberoというスキーマをエクスポートすることができました。


tbImportの検証結果のまとめ

tbImportはOracle impとそっくりであり、操作方法がOracle impに似ています。問題なくtbExportコマンドでエクスポートしたダンプファイル(export.dat)をtbImportコマンドでインポートすることができました。但し、インポートするユーザーがTiberoデータベースに存在しないと、インポート中にエラーが発生しますので、注意する必要があります。


tbLoaderの検証結果のまとめ

tbLoaderはOracle SQL*Loaderとそっくりであり、操作方法がOracle SQL*Loaderに似ています。 Oracleデータから作成したCSVファイルをTibero tbLoaderでロードすることができ、実際にテーブルの件数を数えたところ、Oracleの件数と一致しました。


tbAdminの検証結果のまとめ

TiberoにランダムSQLで負荷をかけて性能情報を確認したところ、問題なく表領域とインスタンスの変動がリアルタイムに変わることが分かりました。tbAdminは、Oracle Enterprise Managerより機能が少ないですが、無償ツールでありながら、データベースの管理とSQLやPL/SQLプログラム開発にも使えるメリットがあります。


tbSQLの検証結果のまとめ

tbSQLはOracle SQL*Plusとそっくりであり、操作方法がSQL*Plusに似ているので、今回のSQLとPL/SQL検証をtbSQLで行いました。


業界トップクラスのデータベースエキスパート集団
アクアシステムズ

データベースに関するすべての課題、トラブル、お悩みを解決します。
高難易度、複雑、他社対応不可案件など、お気軽にご相談ください。