22 DBFS階層ストア

DBFS階層ストアおよび関連するストア・ウォレット管理は、使用頻度の低いデータを格納するために連携して機能します。

内容は次のとおりです。

22.1 階層ストア・パッケージDBMS_DBFS_HSについて

Oracle DBFS階層ストア・パッケージ(DBMS_DBFS_HS)は、DBMSコンテンツの階層ストレージをサポートするDBMS_DBFS_CONTENTのストア・プロバイダです。

このパッケージでは、コンテンツが2つの外部ストレージ・デバイス(テープおよびAmazonS3 Webサービス)に格納され、関連するメタデータ(またはプロパティ)がデータベースに格納されます。DBFS HSは、データベース表で頻繁にアクセスされるコンテンツをキャッシュして、パフォーマンスを向上させます。

22.2 DBFS階層ストアを使用する方法

DBMS_DBFS_HSパッケージをDBMS_DBFS_CONTENTパッケージと組み合せて使用し、DBFSリンクを使用するSecureFiles LOBのための階層ストレージ管理を管理する必要があります。

このパッケージを使用すると、使用頻度の低いデータを費用の少ない外部デバイス(テープなど)に移行できるため、ストレージの費用を大幅に削減できます。

DBMS_DBFS_HSパッケージをストア・プロバイダとしてDBMS_DBFS_CONTENTパッケージにプラグインし、関連付けられた外部ストレージ・デバイスがテープの場合はテープ・ファイルシステムを、また関連付けられた外部ストレージ・デバイスがAmazon S3ストレージ・デバイスの場合はクラウド・ファイルシステムを実装できます。

DBMS_DBFS_HSパッケージにより、データベースの表やコンテンツの情報ライフサイクル管理(ILM)を実装する際、テープをストレージ層として使用できるようになります。パッケージでは、Amazon S3のようなWebサービスを含む他の形式のストレージ・ターゲットもサポートされています。このサービスにより、ユーザーはテープまたはその他の形式のストレージにデータベースのデータを格納できます。テープまたはAmazon S3上のデータはOracle Databaseの一部であり、標準APIはすべてこのデータにアクセスできますが、これはデータベースを介した場合のみ可能です。

DBMS_DBFS_HSには、外部ストレージ・デバイスと各ストアに関連するキャッシュを管理するために必要な他のインタフェースがあります。

パッケージDBMS_DBFS_HSを使用するには、DBFS_ROLEロールが付与されている必要があります。

関連項目:

DBMS_DBFS_HSパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

22.3 ストアの設定

階層ストア・ウォレットを管理し、階層ストアを設定、登録およびマウントします。

内容は次のとおりです。

22.3.1 HSストア・ウォレットの管理

コマンドライン・ユーティリティmkstoreを使用して、ウォレットを作成および管理します。

次のコマンドを使用して、ウォレットを作成します。

  • ウォレットの作成

    mkstore -wrl wallet_location -create
    
  • KEY別名の追加

    access_keyおよびsecret_key別名を一重引用符で囲んで指定します。

    mkstore -wrl wallet_location -createCredential alias 'access_key' 'secret_key'
    

    次に例を示します。

    mkstore -wrl /home/user1/mywallet -createCredential mykey 'abc' 'xyz'
    
  • KEY別名の削除

    mkstore -wrl wallet_location -deleteCredential alias
    

    次に例を示します。

    mkstore -wrl /home/user1/mywallet -deleteCredential mykey

関連項目:

22.3.2 ストアの作成、登録およびマウント

階層ファイルシステム・ストアを設定するには、ストアを作成、登録およびマウントする必要があります。

ストアの作成、登録およびマウント。

  1. createStoreをコールします。
    DBMS_DBFS_HS.createStore( store_name, store_type, tbl_name, tbs_name, cache_size, lob_cache_quota, optimal_tarball_size, schema_name);
    
  2. 必須およびオプションのプロパティを次のインタフェースを使用して設定します。
    DBMS_DBFS_HS.setStoreProperty(StoreName, PropertyName, PropertyValue);
    

    store_type = STORETYPE_TAPEの必須プロパティは次のとおりです。

    PROPNAME_DEVICELIBRARY, PROPNAME_MEDIAPOOL, PROPNAME_CACHESIZE.
     
    PROPNAME_CACHESIZE is already set by createStore. 
    

    reconfigCacheを使用して、PROPNAME_CACHESIZEの値を変更できます。

    オプションのプロパティは次のとおりです。

    PROPNAME_OPTTARBALLSIZE, PROPNAME_READCHUNKSIZE, PROPNAME_WRITECHUNKSIZE, PROPNAME_STREAMABLE.
    

    store_type = STORETYPE_AMAZONS3の必須プロパティは次のとおりです。

    PROPNAME_DEVICELIBRARY, PROPNAME_CACHESIZE, PROPNAME_S3HOST,PROPNAME_BUCKET, PROPNAME_LICENSEID, PROPNAME_WALLET.
    

    PROPNAME_CACHESIZEは、createStoreにより設定済です。reconfigCacheを使用して、PROPNAME_CACHESIZEの値を変更できます。

    オプションのプロパティは次のとおりです。

    PROPNAME_OPTTARBALLSIZE, PROPNAME_READCHUNKSIZE, PROPNAME_WRITECHUNKSIZE, PROPNAME_STREAMABLE, PROPNAME_HTTPPROXY.
    
  3. 次を使用して、ストアをDBFSコンテンツAPIに登録します。
    DBMS_DBFS_CONTENT.registerStore(store_name, provider_name, provider_package);
    

    ノート: provider_packagedbms_dbfs_hsパッケージです。

  4. 次を使用して、アクセスのためにストアをマウントします。
    DBMS_DBFS_CONTENT.mountStore(store_name, store_mount, singleton,principal,
      owner, acl, asof, read_only);

22.4 階層ストアの使用

階層ストアを、独立したファイルシステムまたはSecureFiles LOBのアーカイブ・ソリューションとして使用できます。

内容は次のとおりです。

22.4.1 ファイルシステムとしての階層ストアの使用

DBMS_DBFS_CONTENTパッケージを使用して、ストア内のファイルシステム・エントリを作成、更新、読取りおよび削除します。

関連項目:

DBFSコンテンツAPI

22.4.2 SecureFiles LOBのアーカイブ・ソリューションとしての階層ストアの使用

DBMS_LOBパッケージを使用して、SecureFiles LOBをテープまたはS3ストアにアーカイブします。

LOBおよびDBFS用のPL/SQLパッケージの説明に従い、DBMS_LOBパッケージを使用してSecureFiles LOBをテープまたはS3ストアにアーカイブします。

キャッシュ内の領域を解放、またはキャッシュ常駐コンテンツを外部ストレージ・デバイスに強制的に書き込むには、次をコールします。

DBMS_DBFS_HS.storePush(store_name);

22.4.3 階層ストアの削除

階層ストアを削除できます。

階層ストアを削除するには、次をコールします。

DBMS_DBFS_HS.dropStore(store_name, opt_flags);

22.4.4 階層ストアで使用する圧縮

DBFS階層ストアはファイルを圧縮形式で格納できます。

DBFS階層ストアには、SETPROPERTYメソッドおよびプロパティPROPNAME_COMPRESSLVLを使用して圧縮レベルを指定し、ファイルを圧縮形式で格納する機能があります。

有効な値は次のとおりです。

  • PROPVAL_COMPLVL_NONE: 圧縮なし

  • PROPVAL_COMPLVL_LOW: LOWレベルの圧縮

  • PROPVAL_COMPLVL_MEDIUM: MEDIUMレベルの圧縮

  • PROPVAL_COMPLVL_HIGH: HIGHレベルの圧縮

通常、圧縮レベルLOWを使用すると、最高のパフォーマンスを維持しながら、高い圧縮率を実現できます。圧縮レベルMEDIUMおよびHIGHでは、圧縮率が大きく向上しますが、それに対応して圧縮時間が長くなることがあります。DBFS HSストア内のファイルが頻繁に更新される場合など、書込みのパフォーマンスが重要である場合は、NONEまたはLOWを使用することをお薦めします。領域が重要であるため、できるかぎり高い圧縮率が求められる場合は、MEDIUMまたはHIGHを使用してください。

ファイルはキャッシュからステージング領域へページ・アウトされて(バックエンドのテープやS3ストレージに順番にプッシュバックされる前に)圧縮されます。したがって、圧縮によりステージング領域内に小さいファイルを格納でき、またステージング領域の使用可能な容量を効果的に増加させることができます。

22.4.5 テープを使用したプログラムの例

テープ・ストアを構成および使用するプログラムの例を次に示します。

この例では、<...>で示される場所を有効な値に置き換えて、プログラムを正しく実行する必要があります。

関連項目:

メソッドおよびそのパラメータの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』DBMS_DBFS_HSのドキュメントを参照してください

Rem Example to configure and use a Tape store.
Rem
Rem hsuser should be a valid database user who has been granted
Rem the role dbfs_role.
 
connect hsuser/hsuser 
 
Rem The following block sets up a STORETYPE_TAPE store with
Rem DBMS_DBFS_HS acting as the store provider.
 
declare 
storename varchar2(32) ; 
tblname varchar2(30) ; 
tbsname varchar2(30) ; 
lob_cache_quota number := 0.8 ; 
cachesz number ; 
ots number ; 
begin 
cachesz := 50 * 1048576 ; 
ots := 1048576 ; 
storename := 'tapestore10' ; 
tblname := 'tapetbl10' ; 
tbsname := '<TBS_3>' ; -- Substitute a valid tablespace name
 
-- Create the store.
-- Here tbsname is the tablespace used for the store,
-- tblname is the table holding all the store entities,
-- cachesz is the space used by the store to cache content
--   in the tablespace,
-- lob_cache_quota is the fraction of cachesz allocated
--   to level-1 cache and
-- ots is minimum amount of content that is accumulated
--   in level-2 cache before being stored on tape
dbms_dbfs_hs.createStore(
  storename,
  dbms_dbfs_hs.STORETYPE_TAPE,
  tblname, tbsname, cachesz,
  lob_cache_quota, ots) ; 
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_SBTLIBRARY,
  '<ORACLE_HOME/work/libobkuniq.so>') ;
  -- Substitute your ORACLE_HOME path
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_MEDIAPOOL,
  '<0>') ;  -- Substitute valid value
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_COMPRESSLEVEL,
  'NONE') ; 
 
-- Please refer to DBMS_DBFS_CONTENT documentation
-- for details about this method
dbms_dbfs_content.registerstore(
  storename,
  'tapeprvder10',
  'dbms_dbfs_hs') ; 
 
-- Please refer to DBMS_DBFS_CONTENT documentation
-- for details about this method
dbms_dbfs_content.mountstore(storename, 'tapemnt10') ; 
end ; 
/ 
 
Rem The following code block does file operations
Rem using DBMS_DBFS_CONTENT on the store configured
Rem in the previous code block
 
connect hsuser/hsuser 
 
declare 
  path varchar2(256) ; 
  path_pre varchar2(256) ; 
  mount_point varchar2(32) ; 
  store_name varchar2(32) ; 
  prop1 dbms_dbfs_content_properties_t ; 
  prop2 dbms_dbfs_content_properties_t ; 
  mycontent blob := empty_blob() ; 
  buffer varchar2(1050) ; 
  rawbuf raw(1050) ; 
  outcontent blob := empty_blob() ; 
  itemtype integer ; 
  pflag integer ; 
  filecnt integer ; 
  iter integer ; 
  offset integer ; 
  rawlen integer ; 
begin 
 
  mount_point := '/tapemnt10' ; 
  store_name := 'tapestore10' ; 
  path_pre := mount_point ||'/file' ; 
 
 
-- We create 10 empty files in the following loop
  filecnt := 0 ; 
  loop 
    exit when filecnt = 10 ; 
    path := path_pre || to_char(filecnt) ; 
    mycontent := empty_blob() ; 
    prop1 := null ; 
 
    -- Please refer to DBMS_DBFS_CONTENT documentation
    -- for details about this method
    dbms_dbfs_content.createFile(
      path, prop1, mycontent) ; -- Create the file
 
    commit ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
  -- We populate the newly created files with content
  -- in the following loop
  pflag := dbms_dbfs_content.prop_data +
           dbms_dbfs_content.prop_std  +
           dbms_dbfs_content.prop_opt  ; 
 
  buffer := 'Oracle provides an integrated management '  ||
            'solution for managing Oracle database with '||
            'a unique top-down application management '  ||
            'approach. With new self-managing '          ||
            'capabilities, Oracle eliminates time-'      ||
            'consuming, error-prone administrative '     ||
            'tasks, so database administrators can '     ||
            'focus on strategic business objectives '    ||
            'instead of performance and availability '   ||
            'fire drills. Oracle Management Packs for '  ||
            'Database provide signifiCant cost and time-'||
            'saving capabilities for managing Oracle '   ||
            'Databases. Independent studies demonstrate '||
            'that Oracle Database is 40 percent easier ' ||
            'to manage over DB2 and 38 percent over '    ||
            'SQL Server.'; 
 
  rawbuf := utl_raw.cast_to_raw(buffer) ; 
  rawlen := utl_raw.length(rawbuf) ; 
  offset := 1 ; 
  filecnt := 0 ; 
  loop 
    exit when filecnt = 10 ; 
    path := path_pre || to_char(filecnt) ; 
    prop1 := null;
  
    -- Append buffer to file
    -- Please refer to DBMS_DBFS_CONTENT documentation
    -- for details about this method
    dbms_dbfs_content.putpath(
      path, prop1, rawlen,
      offset, rawbuf) ;
 
    commit ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
  -- Clear out level 1 cache
  dbms_dbfs_hs.flushCache(store_name) ; 
  commit ; 
 
  -- Do write operation on even-numbered files.
  -- Do read operation on odd-numbered files.
  filecnt := 0 ; 
  loop 
    exit when filecnt = 10; 
    path := path_pre || to_char(filecnt) ; 
    if mod(filecnt, 2) = 0 then 
      -- Get writable file
      -- Please refer to DBMS_DBFS_CONTENT documentation
      -- for details about this method
      dbms_dbfs_content.getPath(
        path, prop2, outcontent, itemtype,
        pflag, null, true) ;
  
      buffer := 'Agile businesses want to be able to '    ||
                'quickly adopt new technologies, whether '||
                'operating systems, servers, or '         ||
                'software, to help them stay ahead of '   ||
                'the competition. However, change often ' ||
                'introduces a period of instability into '||
                'mission-critical IT systems. Oracle '    ||
                'Real Application Testing-with Oracle '   ||
                'Database 11g Enterprise Edition-allows ' ||
                'businesses to quickly adopt new '        ||
                'technologies while eliminating the '     ||
                'risks associated with change. Oracle '   ||
                'Real Application Testing combines a '    ||
                'workload capture and replay feature '    ||
                'with an SQL performance analyzer to '    ||
                'help you test changes against real-life '||
                'workloads, and then helps you fine-tune '||
                'the changes before putting them into'    ||
                'production. Oracle Real Application '    ||
                'Testing supports older versions of '     ||
                'Oracle Database, so customers running '  ||
                'Oracle Database 9i and Oracle Database ' ||
                '10g can use it to accelerate their '     ||
                'database upgrades. '; 
 
      rawbuf := utl_raw.cast_to_raw(buffer) ; 
      rawlen := utl_raw.length(rawbuf) ; 
 
      -- Modify file content
      -- Please refer to DBMS_DBFS_CONTENT documentation
      -- for details about this method
      dbms_lob.write(outcontent, rawlen, 10, rawbuf);
      commit ; 
    else 
      -- Read the file
      -- Please refer to DBMS_DBFS_CONTENT documentation
      -- for details about this method
      dbms_dbfs_content.getPath(
        path, prop2, outcontent, itemtype, pflag) ;
    end if ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
  -- Delete the first 2 files
  filecnt := 0; 
 
  loop 
    exit when filecnt = 2 ; 
    path := path_pre || to_char(filecnt) ; 
    -- Delete file
    -- Please refer to DBMS_DBFS_CONTENT documentation
    -- for details about this method
    dbms_dbfs_content.deleteFile(path) ;
    commit ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
 
  -- Move content staged in database to the tape store
  dbms_dbfs_hs.storePush(store_name) ; 
  commit ; 
 
end ; 
/

22.4.6 Amazon S3を使用したプログラムの例

Amazon S3ストアを構成および使用するプログラムの例を次に示します。

<...>で示される場所を有効な値に置き換えて、プログラムを正しく実行する必要があります。

関連項目:

メソッドおよびそのパラメータの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』DBMS_DBFS_HSのドキュメントを参照してください

Rem Example to configure and use an Amazon S3 store.
Rem
Rem hsuser should be a valid database user who has been granted
Rem the role dbfs_role.
 
connect hsuser/hsuser 
 
Rem The following block sets up a STORETYPE_AMAZONS3 store with
Rem DBMS_DBFS_HS acting as the store provider.
 
declare 
storename varchar2(32) ; 
tblname varchar2(30) ; 
tbsname varchar2(30) ; 
lob_cache_quota number := 0.8 ; 
cachesz number ; 
ots number ; 
begin 
cachesz := 50 * 1048576 ; 
ots := 1048576 ; 
storename := 's3store10' ; 
tblname := 's3tbl10' ; 
tbsname := '<TBS_3>' ; -- Substitute a valid tablespace name
 
-- Create the store.
-- Here tbsname is the tablespace used for the store,
-- tblname is the table holding all the store entities,
-- cachesz is the space used by the store to cache content
--   in the tablespace,
-- lob_cache_quota is the fraction of cachesz allocated
--   to level-1 cache and
-- ots is minimum amount of content that is accumulated
--   in level-2 cache before being stored in AmazonS3
dbms_dbfs_hs.createStore(
  storename,  
  dbms_dbfs_hs.STORETYPE_AMAZONS3,
  tblname, tbsname, cachesz,
  lob_cache_quota, ots) ; 
 
dbms_dbfs_hs.setstoreproperty(storename,
  dbms_dbfs_hs.PROPNAME_SBTLIBRARY,
  '<ORACLE_HOME/work/libosbws11.so>');
  -- Substitute your ORACLE_HOME path
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_S3HOST,
  's3.amazonaws.com') ; 
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_BUCKET,
  'oras3bucket10') ; 
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_WALLET,
  'LOCATION=file:<ORACLE_HOME>/work/wlt CREDENTIAL_ALIAS=a_key') ;
  -- Substitute your ORACLE_HOME path
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_LICENSEID,
  '<xxxxxxxxxxxxxxxx>') ; -- Substitute a valid SBT license id
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_HTTPPROXY,
  '<http://www-proxy.mycompany.com:80/>') ;
  -- Substitute valid value. If a proxy is not used,
  -- then this property need not be set.
 
dbms_dbfs_hs.setstoreproperty(
  storename,
  dbms_dbfs_hs.PROPNAME_COMPRESSLEVEL,
  'NONE') ; 
 
dbms_dbfs_hs.createbucket(storename) ; 
 
-- Please refer to DBMS_DBFS_CONTENT documentation
-- for details about this method
dbms_dbfs_content.registerstore(
  storename,
  's3prvder10',
  'dbms_dbfs_hs') ; 
 
-- Please refer to DBMS_DBFS_CONTENT documentation
-- for details about this method
dbms_dbfs_content.mountstore(
  storename,
  's3mnt10') ; 
end ; 
/ 
 
Rem The following code block does file operations
Rem using DBMS_DBFS_CONTENT on the store configured
Rem in the previous code block
 
connect hsuser/hsuser 
 
declare 
path varchar2(256) ; 
path_pre varchar2(256) ; 
mount_point varchar2(32) ; 
store_name varchar2(32) ; 
prop1 dbms_dbfs_content_properties_t ; 
prop2 dbms_dbfs_content_properties_t ; 
mycontent blob := empty_blob() ; 
buffer varchar2(1050) ; 
rawbuf raw(1050) ; 
outcontent blob := empty_blob() ; 
itemtype integer ; 
pflag integer ; 
filecnt integer ; 
iter integer ; 
offset integer ; 
rawlen integer ; 
begin 
 
  mount_point := '/s3mnt10' ; 
  store_name := 's3store10' ; 
  path_pre := mount_point ||'/file' ; 
 
  -- We create 10 empty files in the following loop
  filecnt := 0 ; 
  loop 
    exit when filecnt = 10 ; 
    path := path_pre || to_char(filecnt) ; 
    mycontent := empty_blob() ; 
    prop1 := null ; 
 
    -- Please refer to DBMS_DBFS_CONTENT documentation
    -- for details about this method
    dbms_dbfs_content.createFile(
      path, prop1, mycontent) ; -- Create the file
 
    commit ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
  -- We populate the newly created files with content
  -- in the following loop
  pflag := dbms_dbfs_content.prop_data +
           dbms_dbfs_content.prop_std  +
           dbms_dbfs_content.prop_opt  ; 
 
  buffer := 'Oracle provides an integrated management '  ||
            'solution for managing Oracle database with '||
            'a unique top-down application management '  ||
            'approach. With new self-managing '          ||
            'capabilities, Oracle eliminates time-'      ||
            'consuming, error-prone administrative '     ||
            'tasks, so database administrators can '     ||
            'focus on strategic business objectives '    ||
            'instead of performance and availability '   ||
            'fire drills. Oracle Management Packs for '  ||
            'Database provide signifiCant cost and time-'||
            'saving capabilities for managing Oracle '   ||
            'Databases. Independent studies demonstrate '||
            'that Oracle Database is 40 percent easier ' ||
            'to manage over DB2 and 38 percent over '    ||
            'SQL Server.'; 
 
  rawbuf := utl_raw.cast_to_raw(buffer) ; 
  rawlen := utl_raw.length(rawbuf) ; 
  offset := 1 ; 
  filecnt := 0 ; 
  loop 
    exit when filecnt = 10 ; 
    path := path_pre || to_char(filecnt) ; 
    prop1 := null;
  
    -- Append buffer to file
    -- Please refer to DBMS_DBFS_CONTENT documentation
    -- for details about this method
    dbms_dbfs_content.putpath(
      path, prop1, rawlen,
      offset, rawbuf) ;
 
    commit ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
  -- Clear out level 1 cache
  dbms_dbfs_hs.flushCache(store_name) ; 
  commit ; 
 
  -- Do write operation on even-numbered files.
  -- Do read operation on odd-numbered files.
  filecnt := 0 ; 
  loop 
    exit when filecnt = 10; 
    path := path_pre || to_char(filecnt) ; 
    if mod(filecnt, 2) = 0 then 
      -- Get writable file
      -- Please refer to DBMS_DBFS_CONTENT documentation
      -- for details about this method
      dbms_dbfs_content.getPath(
        path, prop2, outcontent, itemtype,
        pflag, null, true) ;
  
      buffer := 'Agile businesses want to be able to '    ||
                'quickly adopt new technologies, whether '||
                'operating systems, servers, or '         ||
                'software, to help them stay ahead of '   ||
                'the competition. However, change often ' ||
                'introduces a period of instability into '||
                'mission-critical IT systems. Oracle '    ||
                'Real Application Testing-with Oracle '   ||
                'Database 11g Enterprise Edition-allows ' ||
                'businesses to quickly adopt new '        ||
                'technologies while eliminating the '     ||
                'risks associated with change. Oracle '   ||
                'Real Application Testing combines a '    ||
                'workload capture and replay feature '    ||
                'with an SQL performance analyzer to '    ||
                'help you test changes against real-life '||
                'workloads, and then helps you fine-tune '||
                'the changes before putting them into'    ||
                'production. Oracle Real Application '    ||
                'Testing supports older versions of '     ||
                'Oracle Database, so customers running '  ||
                'Oracle Database 9i and Oracle Database ' ||
                '10g can use it to accelerate their '     ||
                'database upgrades. '; 
 
      rawbuf := utl_raw.cast_to_raw(buffer) ; 
      rawlen := utl_raw.length(rawbuf) ; 
 
      -- Modify file content
      -- Please refer to DBMS_DBFS_CONTENT documentation
      -- for details about this method
      dbms_lob.write(outcontent, rawlen, 10, rawbuf);
      commit ; 
    else 
      -- Read the file
      -- Please refer to DBMS_DBFS_CONTENT documentation
      -- for details about this method
      dbms_dbfs_content.getPath(
        path, prop2, outcontent, itemtype, pflag) ;
    end if ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
  -- Delete the first 2 files
  filecnt := 0; 
 
  loop 
    exit when filecnt = 2 ; 
    path := path_pre || to_char(filecnt) ; 
    -- Delete file
    -- Please refer to DBMS_DBFS_CONTENT documentation
    -- for details about this method
    dbms_dbfs_content.deleteFile(path) ;
    commit ; 
    filecnt := filecnt + 1 ; 
  end loop ; 
 
 
  -- Move content staged in database to Amazon S3 store
  dbms_dbfs_hs.storePush(store_name) ; 
  commit ; 
 
end ; 
/

22.5 データベース・ファイルシステム・リンク

データベース・ファイルシステム・リンクを使用すると、通常とは異なる場所にSecureFiles LOBを格納できます。

内容は次のとおりです。

22.5.1 データベース・ファイルシステム・リンクについて

DBFSリンクを使用すると、LOBが通常格納されるセグメントとは異なる場所にSecureFiles LOBを透過的に格納できます。かわりに、LOBへのリンクはセグメント内に格納します。

セグメント内のリンクは、アクセスされたときにDBFSを使用してLOBを特定するパスを参照する必要があります。つまり、LOBは、別のファイルシステム、テープ・システム、クラウド、またはDBFSを使用してアクセスできる任意の場所に格納できます。

セグメントの外部に格納されているSecureFiles LOBにユーザーまたはアプリケーションがDBFSリンクを使用してアクセスしようとすると、試行された操作や、LOBを保持しているDBFSストアの特性に応じて、動作が異なる場合があります。

  • 読取り:

    LOBがデータベース内のローカル領域にまだキャッシュされていない場合、LOBが保持されているDBFSコンテンツ・ストアでPROPNAME_STREAMABLEパラメータの設定に基づいてストリーミング・アクセスが許可されていれば、このコンテンツ・ストアからLOBを直接読み取ることができます。コンテンツ・ストアでストリーミング・アクセスが許可されていない場合、データベース内のローカル領域にLOB全体が最初に読み込まれ、将来のアクセスに備えてここに一定期間格納されます。

  • 書込み:

    LOBがデータベース内のローカル領域にまだキャッシュされていない場合、LOBは最初にデータベースに読み込まれ、必要に応じて変更されてから、該当するLOBのDBFSリンクに定義されているDBFSコンテンツ・ストアに書き戻されます。

  • 削除:

    DBFSリンクを介して格納されているSecureFiles LOBが削除されると、DBFSリンクは表から削除されますが、LOB自体はDBFSコンテンツ・ストアから削除されません。または、これは、該当するDBFSコンテンツ・ストアの特性/設定によってはより複雑になります。

DBFSリンクでは、SecureFiles LOBをDBFS階層ストア(DBFS HS)と組み合せて使用することにより、階層ストレージ管理(HSM)を実装できます。HSMは、データベースが使用頻度の低いまたは未使用のデータを、高速でコストが高い小さいストレージから、速度が遅く低コストで容量の大きいストレージに移動するためのプロセスです。

図22-1 データベース・ファイルシステム・リンク

図22-1の説明が続きます
「図22-1 データベース・ファイルシステム・リンク」の説明

22.5.2 データベース・ファイルシステム・リンクを作成する方法

データベース・ファイルシステム・リンクでは、DBFSコンテンツ・パッケージ(DBMS_DBFS_CONTENT)を使用して、データベース・ファイルシステムを作成する必要があります。

Oracleでは、DBFSリンクの作成用に複数の方法を用意しています。

  • 指定したDBFSパス名にSecureFiles LOBデータを移動し、新しい場所への参照をLOBに格納します。

    LOBおよびDBFSパス名引数を使用してDBMS_LOB.MOVE_TO_DBFS_LINK()をコールすると、指定したDBFS HSMストアが作成され(存在しない場合)、指定したDBFS HSMストアにSecureFiles LOBからデータがコピーされ、SecureFiles LOBからデータが削除され、このLOBを介して後続のアクセス用のファイル・パス名が格納されます。

  • 既存のファイルへの参照をコピーまたは作成します。

    DBMS_LOB.COPY_DBFS_LINK()をコールし、既存のDBFSリンクからリンクをコピーします。宛先SecureFiles LOBにデータがある場合、そのデータは削除され、そのリンクに対する参照のコピーが宛先SecureFiles LOBに格納されます。

  • 指定されたDBFSパス名にリンクのデータが格納されている場合は、DBMS_LOB.SET_DBFS_LINK()をコールします。

    指定したSecureFiles LOBからデータが削除され、DBFSパス名のリンクが格納されます。

DBFSリンクを作成すると、実行可能な操作およびその実行方法に影響があります。基礎となるLOBがDBFSリンクに移動された場合、LOBのコンテンツを変更するすべてのDBMS_LOB操作によって例外がスローされます。アプリケーションでは、これらをコールする前にDBMS_LOB.COPY_FROM_LINK()をコールして、DBFSリンクをLOBで置き換える必要があります。

完了したら、DBMS_LOB.MOVE_TO_DBFS_LINK()を使用して、更新済のLOBを必要に応じてDBFSに戻すことができます。Oracle Database 11gリリース2より前から存在しているその他のDBMS_LOB操作は、ストリーミングをサポートするファイルシステムにDBFSリンクが存在する場合に、透過的に動作します。ストリーミングがサポートされていないか無効の場合、これらの操作は失敗することに注意してください。

DBFSリンク・ファイルがDBFSインタフェースから直接変更されると、後続のSecureFiles LOBの読取りに変更内容が反映されます。ファイルがDBFSインタフェースからから削除されると、後続の読取りで例外が発生します。

データベースでは、エクスポートおよびインポートの際、DBAがSecureFiles LOB HSMに格納されたデータのすべてを格納することは望まない場合もあります。Oracleには、データベース・ファイルシステム・リンクのみをエクスポートおよびインポートする機能があります。このリンクは完全に修飾された識別子で、SecureFiles LOBに入れられるか、または異なるデータベースのSecureFiles LOBに登録されると、格納済のデータに対するアクセスを提供します。リンクをエクスポートおよびインポートするこの機能は、シンボリック・リンクの共通ファイルシステムの機能性に類似しています。

新しくインポートしたリンクが使用可能なのは、ソース(格納されたデータ)が使用可能である場合、または、インポートしたシステムで最初の取得が行われるまでのみです。格納されたデータベースの保存はアプリケーションが担当します。まだ参照されているデータをアプリケーション・システムがストアから削除すると、参照する側のSecureFiles LOBがこのデータにアクセスしようとしたときに例外がスローされます。Oracleでは、データベース内のデータをDBFSストアに移行した後もキャッシュ済コピーとして保持し続けることもサポートしています。保存ポリシーに準拠してこれらのコピーをパージするかどうかは、アプリケーションによって決まります。

22.5.3 データベース・ファイルシステム・リンクのコピー

API DBMS_LOB.COPY_DBFS_LINK(DSTLOB, SRCLOB, FLAGS)には、リンクされたSecureFiles LOBをコピーする機能が用意されています。

デフォルトでは、LOBはこの操作中にDBFS HSMストアから取得されません。これは、DBFSパス名(ソース側)をエクスポートしてインポート(宛先側)する参照によるコピー操作です。flags引数を使用すると、宛先ではデータベース内にローカル・コピーを持ち、DBFS HSMストア内のLOBデータを参照するよう命令できます。

22.5.4 表間でのリンク済LOBのコピー

DBFSリンクはソース表から挿入先の表にコピーできます。

次のコードを使用して、ソース表内のSecureFiles LOBに格納されているDBFSリンクを挿入先の表にコピーします。

CREATE TABLE ... AS SELECT (CTAS)およびINSERT TABLE ... AS SELECT (ITAS)

22.5.5 オンライン再定義およびDBFSリンク

オンライン再定義では、再定義される表のSecureFiles LOBで格納されたDBFSリンクがコピーされます。

オンライン再定義では、再定義される表のSecureFiles LOBで格納されたDBFSリンクがコピーされます。

22.5.6 透過的読取り

DBFSリンクでは、データがデータベースにキャッシュされていない場合でも、リンクされたSecureFiles LOBから読み取ることができます。

データが実際に格納されているコンテンツ・ストアからデータを読み取り、SecureFiles LOBセグメントからデータが読み取られているかのように、そのデータをユーザーのアプリケーションにストリーミングして戻すことができます。これにより、DBMS_LOB.COPY_FROM_DBFS_LINK()を最初にコールする必要なく、DBFSリンクのデータにシームレスにアクセスできます。

特定のSecureFiles LOBで透過的読取りを使用できるかどうかは、データが存在するDBFS_CONTENTストアで決定されます。この機能は、DBFS_SFSストアで常に有効で、デフォルトではDBFS_HSストアで有効です。DBFS_HSストアで透過的読取りを無効にするには、PROPNAME_STREAMABLEパラメータをFALSEに設定します。

22.6 DBMS_DBFS_HSパッケージ

DBMS_DBFS_HSパッケージは、データの記憶域としてテープまたはAmazon S3 Webサービスを使用できるようにするサービス・プロバイダです。

内容は次のとおりです。

22.6.1 DBMS_DBFS_HSパッケージの定数

DBMS_DBFS_HS PL/SQLパッケージの定数は非常に細目にわたって説明されています。

関連項目:

DBMS_DBFS_HSパッケージ PL/SQLの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照してください。

22.6.2 DBMS_DBFS_HSパッケージのメソッド

DBMS_DBFS_HSパッケージには多くのメソッドがあります。

表22-1は、DBMS_DBFS_HS PL/SQLパッケージのメソッドをまとめています。

表22-1 DBMS_DBFS_HS PL/SQLパッケージのメソッド

メソッド 説明

CLEANUPUNUSEDBACKUPFILES

コンテンツがない外部ストレージ・デバイスで作成されたファイルを削除します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

CREATEBUCKET

STORETYPE_AMAZON3ストアで使用するAWSバケットを作成します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

CREATESTORE

DBFS HSストアを作成します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

DEREGSTORECOMMAND

ストアに関連付けられたコマンド(メッセージ)を削除します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

DROPSTORE

以前に作成したDBFS HSストアを削除します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

FLUSHCACHE

レベル1のキャッシュをレベル2のキャッシュにフラッシュし、レベル1の領域を増やします。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

GETSTOREPROPERTY

データベース内のストアのプロパティの値を取り出します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

RECONFIGCACHE

ストアで使用されているデータベース・キャッシュのパラメータを再構成します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

REGISTERSTORECOMMAND

ストアに対するコマンド(メッセージ)を登録し、外部ストレージ・デバイスのメディア・マネージャに送信します。

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

SENDCOMMAND

外部ストレージ・デバイスのメディア・マネージャにコマンド(メッセージ)を送信します。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

SETSTOREPROPERTY

名前/値プロパティと登録済の階層ストアを関連付けます。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

STOREPUSH

ローカルにキャッシュ済のデータをアーカイブ・ストアにプッシュします。

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

22.7 DBFS階層ストアのビュー

BFS階層ストアには、複数のタイプのビューがあります。

DBFS階層ストア用のビューには複数のタイプがあります。

関連項目:

これらのビューの列およびデータ型の詳細は、『Oracle Databaseリファレンス』を参照してください

内容は次のとおりです。

22.7.1 DBAビュー

DBFS階層ストアで使用可能なビューは複数あります。

DBFS階層ストアの次のビューを使用できます。

  • DBA_DBFS_HS

    このビューには、すべてのデータベース・ファイルシステム(DBFS)階層ストアが表示されます

  • DBA_DBFS_HS_PROPERTIES

    このビューには、すべてのデータベース・ファイルシステム(DBFS)階層ストアの変更可能プロパティが表示されます。

  • DBA_DBFS_HS_FIXED_PROPERTIES

    このビューには、すべてのデータベース・ファイルシステム(DBFS)階層ストアの変更不可プロパティが表示されます。

  • DBA_DBFS_HS_COMMANDS

    このビューには、すべてのデータベース・ファイルシステム(DBFS)階層ストアの登録済ストア・コマンドが表示されます。

22.7.2 ユーザー・ビュー

DBFS階層ストアで使用可能なビューは複数あります。

  • USER_DBFS_HS

    このビューには、現在のユーザーが所有するすべてのデータベース・ファイルシステム(DBFS)階層ストアが表示されます。

  • USER_DBFS_HS_PROPERTIES

    このビューには、現在のユーザーが所有するすべてのデータベース・ファイルシステム(DBFS)階層ストアの変更可能プロパティが表示されます。

  • USER_DBFS_HS_FIXED_PROPERTIES

    このビューには、現在のユーザーが所有するすべてのデータベース・ファイルシステム(DBFS)階層ストアの変更不可プロパティが表示されます。

  • USER_DBFS_HS_COMMANDS

    このビューには、現在のユーザーが所有するすべてのデータベース・ファイルシステム(DBFS)階層ストアの登録済ストア・コマンドがすべて表示されます。

  • USER_DBFS_HS_FILES

    このビューには、データベース・ファイルシステム(DBFS)階層ストア内で現在のユーザーが所有するファイルと、バックエンド・デバイス上でのそれらの位置が表示されます。