0) { obj.className = "imgborder_on"; } } } function hideImage(obj) { if (obj.className.substr(0, 10) == "imgborder_") { obj.src = eyeglass.src; obj.className = "imgborder_off"; } } function showAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { showImage(imgs[i]); } } function hideAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { hideImage(imgs[i]); } } //-->
SecureFilesによるパフォーマンスの向上、ストレージの最大化、およびセキュリティの強化
目的
このチュートリアルは、新しいOracle Database 11g Large Object(LOB)のストレージ・フォーマットであるSecureFilesについて説明します。 まずは、Oracle Database 11g LOBのストレージ・フォーマット以前のフォーマット(BasicFile LOBフォーマット)からSecureFiles LOBフォーマットへの移行、および表作成時の非重複(ストレージ共有)と圧縮の有効化について学習します。 また、BasicFileフォーマット使用時とSecureFilesフォーマット使用時のLOBのパフォーマンスについて比較します。 最後に、SecureFiles LOBの暗号化について説明します。
所要時間
約20分間
トピック
このチュートリアルでは、以下のトピックについて説明します。
スクリーンショットの表示
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。
(警告:この操作によって、同時にすべてのスクリーンショットがロードされるため、ご使用のインターネット接続によってはレスポンス時間が遅くなる場合があります)。
注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
概要
SecureFilesについて
SecureFilesは、ラージ・オブジェクト(LOB)データ型のためのOracle Database 11gの機能であり、アプリケーションの開発環境を損なうことなく、パフォーマンスの向上、領域使用量の削減、およびセキュリティの強化を図るために全面的に再設計されています。 この新しい機能の実装により、非重複(またはLOB共有)やインテリジェントな圧縮、透過的な暗号化といった次世代の高度な機能を実現しました。 また、SecureFilesは、Oracle Databaseのネイティブ・コンテンツ管理機能を大幅に向上させています。
トピック・リストに戻る
前提条件
このチュートリアルを開始する前に、次のことを実行しておく必要があります。
| 1.
|
Oracle Database 11gがインストールされていること。
|
| 2.
|
obe.zipファイルをダウンロードし、作業ディレクトリ(wkdir等)に解凍すること。
|
トピック・リストに戻る
OBEのためのデータベースおよび環境の設定
データベースおよび環境をこのOracle by Example(OBE)のために設定するには、次の手順を実行してください。
| 1.
|
Oracle Transparent Data Encryption(Oracle TDE)ウォレットを格納するためのディレクトリを作成します。 この作業は、SecureFiles LOBの暗号化に必要です。
mkdir $ORACLE_HOME/wallet
|
| 2.
|
Oracle TDEウォレットの場所を指し示すように、
$ORACLE_HOME/network/admin/sqlnet.oraファイルを編集します。
ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/u01/app/oracle/product/11.1.0/db_1/wallet)))
|
| 3.
|
SQL*Plusを使用し、データベースを
SYSとして接続し、
obe_setup.sql
スクリプトを実行します。
cd /wkdir/files <
または、obe.zipファイルを解凍したディレクトリ
>
$ORACLE_HOME/bin/sqlplus / as sysdba
@obe_setup.sql
まず、暗号鍵を作成し、Oracle TDEウォレット内に格納します。 この暗号鍵は、後述のSecureFiles LOBの暗号化に使用します。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 4.
|
スクリプトの次のステップは、OBEのためのデータベース・スキーマの作成です。 このスキーマは、
SF_DEMOと呼ばれます。 このスキーマには、
CONNECTロールおよび
RESOURCEロールが付与されています。 また、
EXECUTE ANY PROCEDUREシステム権限および
CREATE ANY DIRECTORYシステム権限を必要とします。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 5.
|
次に、このスクリプトは150MBの表領域を作成します。
OBE_TBS1表領域は、LOBをBasicFileフォーマットで格納するために使用され、
OBE_TBS2表領域は、LOBを新しいSecureFilesフォーマットで格納するために使用されます。
自動セグメント領域管理(ASSM)は、表領域によるSecureFilesのサポートのために有効化する必要があります。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 6.
|
残りのスクリプトは、
SF_DEMOスキーマ内にオブジェクトを作成します。 まず、
RESUMESと呼ばれる表が作成されます。 この表は、BasicFileフォーマットで格納されるBLOB列(
RESUME)を持ちます。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 7.
|
DIRECTORYオブジェクトは、取得された後にLOB列に格納されるMicrosoft Wordファイルのパス名を格納するのに必要です。
directory_nameのためのプロンプトが表示されたら、
obe.zipを解凍したディレクトリのフルパスを入力します。 その際、パス名は/home/oracle/wkdirのようになります。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 8.
|
ファイル・システム上のMicrosoft Wordファイルを読み取り、LOB列に格納するために、
LOADLOBFROMBFILE_PROCプロシージャが作成されます。 このプロシージャは、
DBMS_LOBパッケージを呼び出します。 このプロシージャは、BasicFileと同様にSecureFiles LOBストレージ・フォーマットにも使用されます。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 9.
|
RESUMES表にLOB値を含むレコードを挿入するために、
WRITE_LOBプロシージャが作成されます。 このプロシージャは、前のステップで作成された
LOADLOBFROMBFILE_PROCプロシージャを呼び出します。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 10.
|
RESUMES表から、LOB値を含むレコードを取得するために、
READ_LOBプロシージャが作成されます。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 11.
|
RESUMES表のBasicFile LOBセグメントに割り当てられたディスク・ブロック内の領域使用量を表示するために、
CHECK_SPACE_BFと呼ばれるプロシージャが作成されます。 このプロシージャは、
DBMS_SPACEパッケージを呼び出します。
注:
DBMS_SPACE.SPACE_USAGEプロシージャは、Oracle Database 11gではオーバーロードされています。
そのため、現在は2つの
DBMS_SPACE.SPACE_USAGEプロシージャが存在します。 この2つのプロシージャは置き換えて使用することはできません。
CHECK_SPACE_BFでの
DBMS_SPACE.SPACE_USAGEプロシージャの起動は、BasicFile LOBに対してのみ有効です。
|
| 12.
|
RESUMES表のSecureFiles LOBセグメントに割り当てられたディスク・ブロック内の領域使用量を表示するために、
CHECK_SPACE_SFと呼ばれるプロシージャが作成されます。 このプロシージャは、
DBMS_SPACEパッケージを呼び出します。
注:
DBMS_SPACE.SPACE_USAGEプロシージャは、Oracle Database 11gではオーバーロードされています。
. そのため、現在は2つの
DBMS_SPACE.SPACE_USAGEプロシージャが存在します。 この2つのプロシージャは置き換えて使用することはできません。
CHECK_SPACE_SFでの
DBMS_SPACE.SPACE_USAGEプロシージャの起動は、SecureFiles LOBに対してのみ有効です。
|
トピック・リストに戻る
BasicFile LOBストレージのパフォーマンスのサンプリング
BasicFile LOBストレージの書込み/読取りパフォーマンスの統計を取得するには、次の手順を実行してください。
| 1.
|
SQL*Plusを使用し、データベースを
sf_demo/oracleとして接続します。
write_data.sql
スクリプトを実行します。
$ORACLE_HOME/bin/sqlplus sf_demo/oracle
@write_data.sql
このスクリプトは、90のレコードを
RESUMES表に挿入します。 それぞれのレコードは、35KBから65KBのサイズのLOBを含みます。 SQL*Plusタイマーが開始され、挿入に関する経過時間の合計を取得します。
スクリプトが完了したら、
BasicFileフォーマットでのLOBのロードの経過時間を記録します。
注:ハードウェアの構成(CPUの速度やメモリーの量等)により、実際の経過時間は図とは異なります。
|
| 2.
|
前のステップで挿入されたレコードを取得します。
read_data.sql
スクリプトを実行します。
@read_data.sql
このスクリプトは、90のレコードを
RESUMES表から読み取ります。 それぞれのレコードについて、LOB値のサイズおよびLOBの最初の200文字が画面に表示されます。 SQL*Plusタイマーが開始され、取得に関する経過時間の合計を取得します。
スクリプトが完了したら、
BasicFileフォーマットでのLOBの読取りの経過時間を記録します。
注:ハードウェアの構成(CPUの速度やメモリーの量等)により、実際の経過時間は図とは異なります。
|
トピック・リストに戻る
BasicFile LOBの領域使用量の検証
BasicFile LOBの領域使用量を検証するには、次の手順を実行してください。
| 1.
|
SQL*Plusを使用し、データベースを
sf_demo/oracleとして接続します。
space_usage.sql
スクリプトを実行します。
$ORACLE_HOME/bin/sqlplus sf_demo/oracle
@space_usage.sql
LOB型のためのプロンプトが表示されたら、
BF
と入力します。 スクリプトが完了したら、
Full Blocks
の数と
Full Blocks Bytes
を記録します。
|
トピック・リストに戻る
BasicFile LOBからSecureFiles LOBへの移行
BasicFile LOBからSecureFiles LOBへ移行するには、次の手順を実行してください。
| 1.
|
SQL*Plusを使用し、データベースを
SYSとして接続します。
mig_bf_to_sf.sql
スクリプトを実行します。
$ORACLE_HOME/bin/sqlplus / as sysdba
@mig_bf_to_sf.sql
まず、
DBA_SEGMENTSビューを検索し、BasicFile LOBストレージのためのLOBセグメントのサブタイプ名を確認します。
ASSMと表示されることを確認してください。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 2.
|
BasicFileからSecureFiles LOBストレージ・フォーマットへの移行はオンラインで実行されます。 このことは、
RESUMES表が移行の途中もアクセス可能なことを意味します。 この種類の操作は、オンライン再定義と呼ばれます。
オンライン再定義には、データ・ストレージ用の仮表が必要です。
スクリプトのこのステップでは、仮表はSecureFiles LOBストレージ・フォーマットで定義され、LOBは
OBE_TBS2表領域に格納されます。 移行が完了した時点で、
RESUME LOBは
OBE_TBS2表領域に格納されます。
注:表の作成時には、圧縮および非重複を有効にすることが推奨されます。 また、今回のOracle Databaseリリースでは、
ALTER TABLE SHRINK操作はSecureFiles LOBをサポートしていません。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 3.
|
スクリプトの次のステップでは、
DBMS_REDEFINITIONパッケージを呼び出し、オンライン再定義操作を実行します。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 4.
|
オンライン再定義操作の完了後、仮表は削除できます。
[Enter]を押して、スクリプトの次のステップに進んでください。
|
| 5.
|
現時点で、移行されたLOBデータは、obe_tbs2表領域に存在します。 スクリプトのこのステップでは、
DBA_SEGMENTSビューを検索し、SecureFiles LOBのためのLOBセグメントのサブタイプ名を確認します。
SECUREFILEと表示されることを確認してください。
|
| 6.
|
スクリプトの最後のステップでは、
DBA_LOBSビューを検索し、SecureFiles LOBのための圧縮と非重複の設定を確認します。
|
トピック・リストに戻る
SecureFiles LOBの領域使用量の検証
SecureFiles LOBの領域使用量を検証するには、次の手順を実行してください。
| 1.
|
SQL*Plusを使用し、データベースを
sf_demo/oracleとして接続します。
space_usage.sql
スクリプトを実行します。
$ORACLE_HOME/bin/sqlplus sf_demo/oracle
@space_usage.sql
LOB型のためのプロンプトが表示されたら、
SF
と入力します。 スクリプトが完了したら、
Used Blocks
の数と
Used Blocks Bytes
を記録します。
|
| 2.
|
BasicFile LOBのFull Blocks数とバイト数を、SecureFiles LOBのUsed Blocks数とバイト数で比較します。
SecureFiles LOBの場合は、圧縮と非重複が有効化されているため、領域使用量が大幅に減少していることに注目してください。
|
トピック・リストに戻る
SecureFiles LOBストレージのパフォーマンスのサンプリング
SecureFiles LOBストレージの書込み/読取りパフォーマンスの統計を取得するには、次の手順を実行してください。
| 1.
|
前項のBasicFile LOBストレージのパフォーマンスのサンプリングとは異なり、
SecureFiles LOBストレージの場合は、読取りパフォーマンスのサンプリングから開始します。 これは、BasicFileとSecureFilesの読取りパフォーマンスの有効な比較を確実に実行するためです(読取りテストは、BasicFileからSecureFilesに移行した直後に、同じレコード・セットで実行することが必要です)。
SQL*Plusを使用し、データベースを
sf_demo/oracleとして接続します。
read_data.sql
スクリプトを実行します。
$ORACLE_HOME/bin/sqlplus sf_demo/oracle
@read_data.sql
このスクリプトは、90のレコードを
RESUMES表から読み取ります。 それぞれのレコードについて、LOB値のサイズおよびLOBの最初の200文字が画面に表示されます。 SQL*Plusタイマーが開始され、取得に関する経過時間の合計を取得します。
スクリプトが完了したら、
SecureFilesフォーマットでのLOBの読取りの経過時間を記録します。
注:ハードウェアの構成(CPUの速度やメモリーの量等)により、実際の経過時間は図とは異なります。
|
| 2.
|
追加のレコードを挿入します。
write_data.sql
スクリプトを実行します。
@write_data.sql
このスクリプトは、90のレコードを
RESUMES表に挿入します。 それぞれのレコードは、35KBから65KBのサイズのLOBを含みます。 SQL*Plusタイマーが開始され、挿入の経過時間の合計を取得します。
スクリプトが完了したら、
SecureFilesフォーマットでのLOBの書込みの経過時間を記録します。
注: ハードウェアの構成(CPUの速度やメモリーの量等)により、実際の経過時間は図とは異なります。
|
トピック・リストに戻る
暗号機能の有効化
SecureFilesフォーマットで格納されたLOBを暗号化するには、次の手順を実行してください。
| 1.
|
SQL*Plusを使用し、データベースを
sf_demo/oracleとして接続します。
encrypt_lob.sql
スクリプトを実行します。
$ORACLE_HOME/bin/sqlplus sf_demo/oracle
@encrypt_lob.sql
|
| 2.
|
LOBが暗号化されたことを確認します。
check_encrypt.sql
スクリプトを実行します。
@check_encrypt.sql
注:列の暗号化操作は、基本的にすべてのLOB値を更新します。 ただし、データ・ブロック内に空き領域が存在する場合は、暗号化されていない元のLOB値が残されている可能性があります。 暗号化されていない値がディスクに存在しないことを確実にするには、表の作成時(値の挿入前)に暗号機能を有効化することがもっとも適切です。
|
トピック・リストに戻る
クリーンアップ
このOBEのために作成されたデータベース・アカウントとオブジェクトを削除するには、次の手順を実行してください。
| 1.
|
SQL*Plusを使用し、データベースを
SYSとして接続します。
SF_DEMOスキーマを削除します。
$ORACLE_HOME/bin/sqlplus / as sysdba
DROP USER sf_demo CASCADE;
|
| 2.
|
OBE_TBS1表領域および
OBE_TBS2表領域を削除します。
DROP TABLESPACE obe_tbs1 INCLUDING CONTENTS;
DROP TABLESPACE obe_tbs2 INCLUDING CONTENTS;
|
まとめ
このチュートリアルで学習した内容は、次のとおりです。
|
BasicFileとSecureFiles LOBストレージ・フォーマットの書込み/読取りパフォーマンスの測定 |
|
BasicFileとSecureFiles LOBストレージ・フォーマットの領域使用量の比較 |
|
BasicFile LOBストレージ・フォーマットからSecureFiles LOBストレージ・フォーマットへの移行 |
|
BasicFile LOBストレージ・フォーマット(Oracle Database 11g以前のフォーマット)に使用されたDBMS_LOB APIと同じAPIがSecureFiles LOBストレージ・フォーマットに適用できることの確認 |
|
SecureFiles LOBストレージの暗号機能の有効化 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|