20.3 階層ストアの使用
階層ストアは、独立したファイル・システムまたはSecureFile LOBのアーカイブ・ソリューションとして使用できます。
- ファイル・システムとしての階層ストアの使用
DBMS_DBFS_CONTENT
パッケージを使用して、ストア内のファイル・システム・エントリを作成、更新、読取りおよび削除します。 - SecureFiles LOBのアーカイブ・ソリューションとしての階層ストアの使用
DBMS_LOB
パッケージを使用して、SecureFiles LOBをテープまたはS3ストアにアーカイブします。 - 階層ストアの削除
階層ストアを削除できます。 - 階層ストアで使用する圧縮
DBFS階層ストアは、ファイルを圧縮形式で格納できます。 - テープを使用したプログラムの例
このプログラムの例では、テープ・ストアを構成および使用します。 - Amazon S3を使用したプログラムの例
このプログラムの例では、Amazon S3ストアを構成および使用します。
親トピック: DBFS階層ストア
20.3.1 ファイル・システムとしての階層ストアの使用
DBMS_DBFS_CONTENT
パッケージを使用して、ストア内のファイル・システム・エントリを作成、更新、読取りおよび削除します。
関連項目:
親トピック: 階層ストアの使用
20.3.2 SecureFiles LOBのアーカイブ・ソリューションとしての階層ストアの使用
DBMS_LOB
パッケージを使用して、SecureFiles LOBをテープまたはS3ストアにアーカイブします。
DBMS_LOB
パッケージを使用して、SecureFiles LOBをテープまたはS3ストアにアーカイブします。キャッシュ内の領域を解放、またはキャッシュ常駐コンテンツを外部ストレージ・デバイスに強制的に書き込むには、次のメソッドを使用します。
DBMS_DBFS_HS.storePush(store_name);
親トピック: 階層ストアの使用
20.3.3 階層ストアの削除
階層ストアを削除できます。
階層ストアを削除するには、次をコールします。
DBMS_DBFS_HS.dropStore(store_name, opt_flags);
親トピック: 階層ストアの使用
20.3.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ストレージに順番にプッシュバックされる前に)圧縮されます。したがって、圧縮によりステージング領域内に小さいファイルを格納でき、またステージング領域の使用可能な容量を効果的に増加させることができます。
親トピック: 階層ストアの使用
20.3.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 ; /
親トピック: 階層ストアの使用
20.3.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 ; /
親トピック: 階層ストアの使用