Oracle®データベース互換性のDeveloper Toolsとユーティリティ・ガイド
 
 
 
EDB Postgres™Advanced Server 11
2018年11月20日
 
 
 
 
1 はじめに
このガイドで説明されているツールとユーティリティを使用すると、Oracleユーティリティを使用して作業することに慣れている開発者は、使い慣れた環境でAdvanced Serverと連携できます。
このガイドでは、Advanced Serverでサポートされている互換性のあるツールとユーティリティについて説明します。これらには、
EDB * Plusコマンドライン・クライアントは、 SQL * PlusコマンドをサポートするAdvanced Serverへのユーザー・インタフェースを提供します。 EDB * Plusを使用すると、
EDB * Plusの詳しいインストールおよび使用方法については、次のEnterpriseDB Webサイトから入手可能な「EDB * Plusユーザーズガイド」 を参照してください
https://www.enterprisedb.com/resources/product-documentation
Advanced Serverでサポートされている機能の詳細については、以下のAdvanced Serverガイドの完全なライブラリを参照してください。
https://www.enterprisedb.com/resources/product-documentation
1.1 このガイドで使用される表記規則
このマニュアルでは、さまざまなコマンド、文、プログラム、例などの意味と使用法を明確にするために、特定の表記規則が使用されています。このセクションでは、これらの規則の概要を説明します。
以下の説明では、 用語は、言語キーワード、ユーザ提供値、リテラルなどの任意の単語または単語群を指す。用語の正確な意味は、それが使用される文脈に依存する。
イタリック体のフォントで は、通常、最初に定義された文章に新しい用語が導入されています。
固定幅(単間隔)フォント は、 SQL コマンド、例で使用されている特定のテーブルとカラム名、プログラミング言語キーワード など、文字通り与えなければならない用語に使用され ます 。たとえば、 SELECT * FROM emp;
イタリック固定幅フォント は、ユーザーが実際の使用で値を置き換える必要がある用語に使用されます。たとえば、 DELETE FROM table_name ;
角括弧[]は、囲まれた用語の1つまたはいずれかが置換されている可能性があることを示します。たとえば、 [a | b]は 、「 a 」または「 b 」のいずれかを選択するか、またはどちらも選択しないことを意味します。
中括弧{}は、囲まれた選択肢のうちの1つを指定する必要があることを示します。たとえば、 {a | b}は 、 " a "または " b "のうちの1つを指定する必要があることを意味します。
楕円形...とは、進行中の用語を繰り返すことができることを意味します。たとえば、 [a | b] ...は、あなたがシーケンス「 baaba 」を持っているかもしれないことを意味します。
2 EDB *ローダー
EDB * Loaderは、Advanced Server用Oracleデータベースと互換性のあるインタフェースを提供する高性能バルク・データ・ローダーです。 EDB * Loaderコマンドライン・ユーティリティは、Oracle SQL * Loaderによって提供されるパラメータのサブセットを使用して、入力ソース(通常はファイル)から1つ以上の表にデータをロードします。
EDB *ローダの機能は次のとおりです。
これらの機能については、以降のセクションで詳しく説明します。
注:以下は、EDB * Loaderクライアントとデータベース・サーバー間のバージョンの互換性に関する重要な制限事項です
EDB * Loaderの 呼び出しはedbldr というクライアントプログラムを使用して実行されます。このプログラムは 、パラメータと指令情報をデータベースサーバに渡すために使用されます。 11 EDB * Loaderクライアント(Advanced Server 11に付属のedbldrプログラム)を使用して、データベースサーバーのバージョン11にのみデータをロードすることを強くお勧めします。一般に、EDB * Loaderクライアントとデータベースサーバーは同じバージョンでなければなりません。
2.1 データ読み込みメソッド
Oracle SQL * Loaderと同様に、EDB * Loaderは次の3つのデータロード方式をサポートしています。
従来のパスロードは、EDB * Loaderで使用されるデフォルトの方法です。基本的な挿入処理は、テーブルに行を追加するために使用されます。
従来のパスロードの利点は、従来のパスロード時に、プライマリキー、ヌル制約、チェック制約、ユニークインデックス、外部キー制約、トリガなど、テーブルに定義されたテーブル制約とデータベースオブジェクトが強制されることです。
1つの例外は 、表で定義されたAdvanced Server ルールが強制されないことです。 EDB *ローダーは、ルールが定義されているテーブルをロードできますが、ルールは実行されません。したがって、ルールを使用して実装されたパーティション表は、EDB * Loaderを使用してロードすることはできません。
注: Advanced Serverルールは、 CREATE RULEコマンドによって作成されます。 Advanced Serverルールは、Oracleで使用されるルールおよびルールセットと同じデータベースオブジェクトではありません。
EDB * Loaderはダイレクト・パス・ロードもサポートしています。ダイレクト・パス・ロードは従来のパス・ロードより高速ですが、ほとんどのタイプの制約とトリガーを表から削除する必要があります。ダイレクト・パス・ロードの詳細は、第 2.5 項を参照してください
最後に、EDB * Loaderはパラレル・ダイレクト・パス・ロードをサポートします。パラレル・ダイレクト・パス・ロードは、複数のEDB *ローダー・セッションを同時に実行して単一の表をロードできるようにすることで、さらに大きなパフォーマンス向上をもたらします。パラレル・ダイレクト・パス・ロードの詳細は、 2.6 項を参照してください
2.2 一般的な使用法
EDB * Loaderは、デリミタ区切りまたは固定幅フィールドのいずれかを使用して、シングルバイトまたはマルチバイト文字セットでデータファイルをロードできます。区切り文字は、1つ以上のシングルバイト文字またはマルチバイト文字からなる文字列にすることができます。データファイルのエンコーディングとデータベースエンコーディングは異なる場合があります。データ・ファイルのデータベース・エンコーディングへのキャラクタ・セット変換がサポートされています。
各EDB * Loaderセッションは、単一の独立したトランザクションとして実行されます。トランザクションを中止するEDB * Loaderセッション中にエラーが発生すると、セッション中に加えられたすべての変更がロールバックされます。
一般に、データファイル内の書式設定エラーは、トランザクションを中止する結果にはなりません。代わりに、ひどくフォーマットされたレコードは、 不良ファイル と呼ばれるテキストファイルに書き込まれ ます 。エラーの理由はログファイルに記録されます
データベースの整合性エラーを引き起こすレコードは、トランザクションとロールバックを中止します。フォーマットエラーの場合と同様に、エラーの原因となったレコードが不良ファイルに書き込まれ、理由がログファイルに記録されます。
注意: EDB * Loaderは、データベースの整合性エラーによりEDB * Loaderでロールバックが発生する点でOracle SQL * Loaderと異なります。 Oracle SQL * Loaderでは、エラーの原因となったレコードのみが拒否されます。以前にテーブルに挿入されたレコードは保持され、拒否されたレコードの後に​​ロードが継続されます。
次に、トランザクションを中止しないフォーマットエラーのタイプの例を示します。
以下は、トランザクションを中止し、EDB * Loaderセッションで行われたすべての変更をロールバックするデータベースエラーのタイプの例です。
2.3 EDB *ローダ制御ファイルの構築
EDB * Loaderを起動するとき、提供される引数のリストには制御ファイルの名前が含まれていなければなりません。制御ファイルには、EDB * Loaderが入力データファイルからテーブルをロードするために使用する命令が含まれています。制御ファイルには、次のような情報が含まれています。
EDB * Loader制御ファイルの構文は次のとおりです。
[ OPTIONS ( param = value [, param = value ] ...) ]
LOAD DATA
[ CHARACTERSET charset ]
[ INFILE '{ data_file | stdin }' ]
[ BADFILE ' bad_file ' ]
[ DISCARDFILE ' discard_file ' ]
[ { DISCARDMAX | DISCARDS } max_discard_recs ]
[ INSERT | APPEND | REPLACE | TRUNCATE ]
[ PRESERVE BLANKS ]
{ INTO TABLE target_table
[ WHEN field_condition [ AND field_condition ] ...]
[ FIELDS TERMINATED BY ' termstring '
[ OPTIONALLY ENCLOSED BY ' enclstring ' ] ]
[ RECORDS DELIMITED BY ' delimstring ' ]
[ TRAILING NULLCOLS ]
( field_def [, field_def ] ...)
} ...
ここで、 field_defはaを定義します 指定された場所を記述するDATA_FILE、データフォーマット、またはデータの値のフィールドは TARGET_TABLECOLUMN_NAMEに挿入されます。 field_defの構文は次のとおりです。
column_name {
CONSTANT val |
FILLER [ POSITION ( start : end ) ] [ fieldtype ] |
BOUNDFILLER [ POSITION ( start : end ) ] [ fieldtype ] |
[ POSITION ( start : end ) ] [ fieldtype ]
[ NULLIF field_condition [ AND field_condition ] ...]
[ PRESERVE BLANKS ] [ " expr " ]
}
どこ FIELDTYPEは、次のいずれかです。
CHAR [( length )] | DATE [( length )] [ " datemask " ] |
INTEGER EXTERNAL [( length )] |
FLOAT EXTERNAL [(
length )] | DECIMAL EXTERNAL [( length )] |
ZONED EXTERNAL [( length )] | ZONED [( precision [, scale ])]
説明
仕様 DATA_FILE、bad_file、及びdiscard_fileは、完全なディレクトリパスやファイル名に相対ディレクトリパスを含むことができます。ファイル名が単独または相対ディレクトリパスで指定されている場合、そのファイルは存在するとみなされ( data_fileの場合)、または作成されます( bad_fileまたはdiscard_fileの場合)。 edbldrが呼び出されます。
ディレクトリパスおよび/またはファイル名を参照するときに、環境変数への参照をEDB * Loader制御ファイル内に含めることができます。環境変数の参照は、WindowsシステムではLinuxシステムとは異なる形式になります。
Linuxでは、形式は $ ENV_VARIABLEまたは$ { ENV_VARIABLE } です
Windowsでは、書式は ENV_VARIABLE %です。
どこ ENV_VARIABLEは、ディレクトリ・パスおよび/またはファイル名に設定されている環境変数です。
EDBLDR_ENV_STYLE環境変数は、Windowsスタイルの参照やEDB * Loaderが存在するオペレーティング・システムの関わらずLinuxのスタイルの参照などの環境変数の参照を解釈するためにAdvanced Serverを指示します。この環境変数を使用して、EDB * Loaderの移植可能な制御ファイルを作成できます。
Windowsシステムでは、 EDBLDR_ENV_STYLElinuxまたはunix設定し、 Advanced Serverに制御ファイル内のLinuxスタイルの参照を認識させるように指示します。
Linuxシステムでは、 EDBLDR_ENV_STYLEwindows設定して、 Advanced Serverに制御ファイル内のWindows形式の参照を認識させるように指示します。
オペレーティングシステムアカウントの enterprisedbは、 data_fileで指定されたディレクトリとファイルに対する読み取りアクセス権を持っている必要があります。
オペレーティングシステムアカウント enterprisedbは、 bad_filediscard_fileが書き込まれるディレクトリに対して書き込み権限を持っている必要があります。
注意:DATA_FILE、bad_file、およびdiscard_fileのファイル名は、それぞれ.dat、.bad 、そして.dscファイルの拡張子を含めることが示唆されます。提供されたファイル名に拡張子が含まれていない場合、EDB * Loaderは実際のファイル名に前述の適切な拡張子が含まれているとみなします。
データフォーマットエラーとでEDB * Loaderのセッション結果場合 BADFILE句が指定されていない、またedbldrが呼び出されたときにBADパラメータは、コマンドラインで指定され、不正なファイルを名前で作成され、現在の作業ディレクトリに.BAD control_file_base edbldrが呼び出されます。 control_file_baseは、 edbldrセッションで使用される制御ファイルの基本名(拡張子のないファイル名)です。
次の条件のすべてが当てはまる場合、EDB * Loaderセッションの結果が破棄された場合でも、破棄ファイルは作成されません。
破棄ファイルを指定するため DISCARDFILE句は、制御ファイルには含まれていません。
破棄ファイルを指定するため DISCARDパラメーターは、コマンド行には含まれていません。
廃棄されたレコードの最大数を指定するためのDISCARDMAX句は、制御ファイルに含まれていません。
廃棄されたレコードの最大数を指定するためのDISCARDS句は、制御ファイルに含まれていません。
廃棄されたレコードの最大数を指定するためのDISCARDMAXパラメータは、コマンドラインに含まれていません。
どちらの場合 DISCARDFILE句も明示的に指定されている廃棄ファイル名を指定するためのDISCARDパラメータ、DISCARDMAXまたはDISCARDSが指定され、その後、EDB * Loaderのセッションは.dscファイルの拡張子を持つデータファイル名を使用して、廃棄ファイルが作成されます。
注:キーワードDISCARDDISCARDSには区別があります。 DISCARDは、破棄ファイル名を指定するために使用されるEDB * Loaderコマンドラインパラメータです 2.2 )。 DISCARDSLOAD DATA指令の節であり、制御ファイル内にのみ現れることがあります。キーワードDISCARDSおよびDISCARDMAXは、EDB * Loaderセッションを終了する前に許可されている破棄されたレコードの最大数を指定するのと同じ機能を提供します。 DISCARDSまたはDISCARDMAX設定を超過したためにEDB * Loaderセッションが終了する前にデータベースにロードされたレコードはデータベースに保存され、ロールバックされません。
いずれかが INSERT、APPEND、REPLACE、またはTRUNCATEを指定すると、その行がターゲット表に追加するかのデフォルトのアクションを設定します。省略した場合、デフォルトアクションはINSERTが指定された場合と同じです。
場合 BYTERMINATEDフィールドが指定され、その後、POSITIONは、( スタート 終了 句は、任意のfield_defに指定されなくてもよいです。 FIELDS TERMINATED BY句を指定しない場合は、すべてのfield_defPOSITION( start end 句、 fieldtype length 句、またはCONSTANT句を含める必要があります。
パラメーター
オプション param = value
OPTIONS句を使用して 、EDB * Loaderディレクティブを表すparam = valueのペアを指定します。 edbldrが呼び出されたときにOPTIONS句とコマンド行の両方でパラメータが指定された場合は、コマンドラインの設定が使用されます。
次のパラメータと値の組み合わせを1つ以上指定します。
直接= {FALSE | TRUE}
DIRECTTRUEに設定されている場合 EDB * Loaderは、従来のパスロードではなくダイレクトパスロードを実行します。 DIRECTのデフォルト値はFALSEです。
ダイレクト・パス・ロードの詳細は、第 2.5 項を参照してください
エラー= error_count
error_countは、EDB * Loaderセッションを中止する前に許容されるエラーの数を指定します。デフォルトは50です。
FREEZE = {FALSE | TRUE}
設定し たデータが フリーズ 行でコピーする必要があることを示すために TRUE FREEZE。すべての現在および将来のトランザクションで可視であることが保証されたタプルは、トランザクションIDラップアラウンドを防ぐためにフリーズとしてマークされます。固定されたタプルの詳細については、PostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/routine-vacuuming.html
FREEZE オプション を使用する場合は、制御ファイルに データ読み込みタイプの TRUNCATE 指定する必要があります フリーズ は直接ロードではサポートされていません。
デフォルトでは、 FREEZE FALSE です。
パラレル= {FALSE | TRUE}
PARALLELTRUE設定すると、このEDB * Loaderセッションは、パラレル・ダイレクト・パス・ロードに参加する複数の同時EDB * Loaderセッションの1つであることを示します。 PARALLELのデフォルト値はFALSEです。
とき PARALLELが TRUE、DIRECTパラメータもTRUEに設定する必要があります。パラレル・ダイレクト・パスのロードの詳細は、 2.6項を参照してください。
ROWS = n
nは、EDB * Loaderが次のn行セットをロードする前にコミットする行数を指定します。
ロード中に ROWSパラメータが指定されているときにEDB * Loaderが無効なローに遭遇すると、エラーが発生する前にコミットされたローはデスティネーション・テーブルに残ります。
SKIP = スキップ _ カウント
skip_countは、ロード開始前にスキップする必要のある入力データファイルの先頭のレコード数を指定します。デフォルトは0です。
SKIP_INDEX_MAINTENANCE = {FALSE | TRUE}
SKIP_INDEX_MAINTENANCETRUEの 場合 、ダイレクト・パス・ロードの一部として索引メンテナンスは実行されず、ロードされた表の索引は無効としてマークされます。 SKIP _ INDEX _ MAINTENANCEのデフォルト値はFALSEです。
注意:パラレル・ダイレクト・パスのロード中、ターゲット表の索引は更新されず、ロードが完了した後は無効としてマークされます。
REINDEXコマンドを使用して索引を再構築することができますREINDEXコマンドの詳細については、 次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-reindex.html
文字セット
CHARACTERSET句を使用してdata_fileのキャラクタ・セット・エンコーディングを識別します。ここで、 charsetはキャラクタ・セット名です。この句は、データファイルのエンコーディングと制御ファイルのエンコーディングが異なる場合に必要です。 (制御ファイルのエンコーディングは、常にedbldrが呼び出されるクライアントのエンコーディングに含まれていなければなりません)。
charset設定の例はUTF8SQL_ASCII 、およびSJISです。
クライアントからデータベースへのキャラクタ・セット変換の詳細は、次のURLにあるPostgreSQLのコア・ドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/multibyte.html
データファイル
target_table にロードされるデータを含むファイル 。データファイル内の各レコードは、 target_tableに挿入される行に対応します。
ファイル名に拡張子が指定されていない場合、EDB * Loaderはそのファイルの拡張子が .datであるとみなします(例: mydatafile.dat)
注意: DATAパラメータedbldrが呼び出され、コマンドラインで指定されている場合は、コマンドラインDATAパラメータで指定したファイルが代わりに使用されます。
場合 INFILE句がコマンドラインDATAパラメータと同様に省略され、その後、データファイル名は、制御ファイル名と同じ、しかし.DATの拡張であると仮定されます。
スタンダード
標準入力を使用してEDB * Loaderに直接ロードするデータをパイプする場合は、 stdin (すべて小文字)を指定します。これは、ロードする多数のレコードを生成するデータソースに役立ちます。
bad_file
エラーのためにロードできないdata_fileレコードを受け取るファイル
拡張子がファイル名で提供されていない場合は、EDB * Loaderは、ファイルは拡張子の持っている前提として例えば.badの 、mybadfile.badを
注意: edbldrが呼び出されたときにBADパラメータは、コマンドラインで指定されている場合は、コマンドラインBADパラメータで指定したファイルが代わりに使用されています。
discard_file
選択基準のいずれも WHEN句のあるテーブルで満たされず、 WHEN句のないテーブルがないため、テーブルにロードされない入力データレコードを受け取るファイル 。 (すべてのレコードがWHEN句のない表の選択基準を満たしています。)
拡張子がファイル名に指定されていない場合、EDB * Loaderはファイルの拡張子が .dscであるとみなします(例: mydiscardfile.dsc)
注意: DISCARDパラメータedbldrが呼び出され、コマンドラインで指定されている場合は、コマンド・ライン・DISCARDパラメータで指定したファイルが代わりに使用されます。
{DISCARDMAX | DISCARDS} max_discard_recs
EDB * Loaderセッションを終了する前に入力データレコードから遭遇するかもしれない廃棄されたレコードの最大数。 (破棄されたレコードは discard_fileパラメータの前の説明で説明されています)。キーワードDISCARDMAXまたはDISCARDSは、 max_discard_recsで指定された整数値の前に使用できます。
たとえば、 max_discard_recs0の 場合 、EDB * Loaderセッションは、最初に破棄されたレコードに遭遇すると終了します。 max_discard_recs1の場合、EDB * Loaderセッションは、2番目の破棄されたレコードが見つかると終了します。
max_discard_recs を超えてEDB * Loaderセッションが終了すると、データベースにロードされた以前の入力データレコードが保持されます。それらはロールバックされません。
INSERT | APPEND |置換え| TRUNCATE
ターゲット表にデータをロードする方法を指定します。いずれかが INSERT、APPEND、REPLACE、またはTRUNCATEを指定すると、それはINSERTのデフォルトを上書きし、すべてのテーブルのデフォルトのアクションを設定します。
インサート
データは空のテーブルにロードされます。 EDB *ローダーは例外をスローし、テーブルが最初に空でない場合はデータをロードしません。
注:表に行が含まれている場合は、EDB * Loaderを呼び出す前にTRUNCATEコマンドを使用して表を空にする必要があります。 DELETEコマンドを使用してTRUNCATEコマンドの代わりにテーブルを空にすると、EDB * Loaderが例外をスローします。 Oracle SQL * Loaderでは、 DELETEまたはTRUNCATEコマンドを使用して表を空にできます。
APPEND
データは、テーブル内の既存の行に追加されます。テーブルは、最初は空であってもよい。
置換
キーワードを戻し 、TRUNCATEキーワードは、機能的に同じです。新しいデータをロードする前に、EDB * Loaderによってテーブルが切り捨てられます。
注: REPLACE操作の結果、表のトリガーのトリガーは実行されません。
TRUNCATE
新しいデータをロードする前に、EDB * Loaderによってテーブルが切り捨てられます。 truncate操作の結果、テーブルの削除トリガは起動されません
ブランクを保存する
すべてのターゲット表に対して、オプションのエンクロージャー区切り文字が存在しない場合は先頭の空白を保持し、フィールドが所定のサイズで指定されている場合は末尾の空白をそのまま残します。省略した場合のデフォルトの動作は、先頭と末尾の空白を削除することです。
target_table
データがロードされるテーブルの名前。テーブル名は、スキーマで修飾されていても構いません(例: enterprisedb.emp )。指定されたターゲットはビューであってはなりません。
field_condition
次の形式を取る条件節。
[ ( ] { ( start : end ) | column_name } { = | != | <> }
' val ' [ ) ]
この条件節は INTO TABLE target_table 句の 一部である WHEN 句と 、構文図の field_def として示されるフィールド定義の一部である NULLIF 句に 使用さ れます。
startendは、定数valと比較されるフィールドの開始と終了を示すdata_fileの列位置を指定する正の整数です。各レコードの最初の文字は開始1で 始まります。
column_nameは、構文図のfield_defで定義されたデータファイルのフィールド定義に割り当てられた名前を指定します。
いずれかの使用またはCOLUMN_NAME真または偽として評価する ヴァル で指定された値と比較されることDATA_FILEのレコードの部分を定義する:( エンドが 開始 )。
field_conditionテキスト(特にval文字列)で使用されるすべての文字は、データベースエンコーディングで有効でなければなりません。 (データ変換を実行するために、EDB * Loaderは最初にval stringの文字をデータベースのエンコーディングに変換し、次にデータファイルのエンコーディングに変換します。
ではこのようなすべての条件が与えられたレコードに対してTRUEと評価された場合field_condition [AND field_condition]句、その後、EDB * LoaderはTARGET_TABLEにそのレコードを挿入しようとします。挿入操作が失敗した場合、レコードはbad_fileに書き込まれます
指定されたレコードについて、 WHEN句のどれもがすべてのINTO TABLE句に対してTRUEと評価されない場合、EDB * Loaderセッションで破棄ファイルが指定されていれば、レコードはdiscard_fileに書き込まれます。
この句に対するfield_conditionの影響については、このパラメータ・リストのNULLIF句の説明を参照してください
言葉
data_fileの 各フィールドを区切る1つ以上の文字列 。文字は、データベースのエンコーディングで有効である限り、シングルバイトまたはマルチバイトでもかまいません。 nullに設定され、対応する列内の介在しない文字の結果とtermstringの二つの連続出演。
囲む
data_fileに フィールド値を囲むために使用される1つ以上の文字列 。文字は、データベースのエンコーディングで有効である限り、シングルバイトまたはマルチバイトでもかまいません。 termstringがデータの一部として表示されるフィールドでは、 文字 を使用します。
区切り文字列
data_fileの 各レコードを区切る1つ以上の文字列 。文字は、データベースのエンコーディングで有効である限り、シングルバイトまたはマルチバイトでもかまいません。介入文字を伴わない2つの連続したデリストリングの出現は、対応する行がテーブルにロードされない結果となる。最後のレコード(言い換えれば、データファイルの終わり)も区切り文字で終わらなければなりません。そうしないと、最終レコードはテーブルにロードされません。
注意: RECORDS DELIMITED BY ' delimstring '句はOracleデータベースと互換性がありません。
NULLCOLSをTRAILINGする
場合 TRAILING NULLCOLSが指定された行が挿入されたとき、次に指定されたレコードのDATA_FILEにデータがないいる列リスト内の列は、nullに設定されています。これは、列リストの最後にある1つ以上の連続した列にのみ適用されます。
フィールドがレコードの終わりで省略され、 TRAILING NULLCOLSが指定されていない場合、EDB * Loaderはレコードに書式設定エラーが含まれているとみなし 、それを不良ファイルに書き込みます。
列名
列の名前 field_defによって定義されたフィールドの値が挿入されるTARGET_TABLE。フィールド定義にFILLERまたはBOUNDFILLER句が含まれている場合、 column_nameはテーブル内の列の名前である必要はありません。 FILLERBOUNDFILLER句は、表の列にフィールドデータのローディングを防止するためには、任意の識別名とすることができます。
定数 val
フィールド定義で割り当てられる列データ型と型互換性のある定数を指定します。一重引用符または二重引用符は valを 囲むことがあります。 valに空白が含まれている場合は、引用符を囲む必要があります。
CONSTANT句を使用すると、挿入された各行の列に割り当てられる値が完全に決定されます。同じフィールド定義に他の節は現れません。
data_file内のフィールドを区切るために TERMINATED BY句を使用する場合、 CONSTANT句を持つ任意のフィールド定義に対応するdata_fileに区切りフィールドは存在していてはなりません。言い換えると、EDB * Loaderは、 CONSTANT句を持つ任意のフィールド定義に対して、 data_fileにフィールドがないとみなします。
FILLER
フィールド定義の識別子がテーブルの実際の列名である場合、フィールド定義で定義されたフィールドのデータを関連する列にロードしないことを指定します。このような場合、列はNULLに設定されます。 FILLERまたはBOUNDFILLER句の使用は、フィールド定義を実際の列名で識別する必要がない唯一の状況です。
異なり BOUNDFILLER句 、FILLER句で定義された識別子は、SQL式で参照されてはなりません。 exprパラメータの説明を参照してください。
バウンフィラー
フィールド定義の識別子がテーブルの実際の列名である場合、フィールド定義で定義されたフィールドのデータを関連する列にロードしないことを指定します。このような場合、列はNULLに設定されます。 FILLERまたはBOUNDFILLER句の使用は、フィールド定義を実際の列名で識別する必要がない唯一の状況です。
異なり FILLER句 、BOUNDFILLER節で定義された識別子は、SQL式で参照されてもよいです。 exprパラメータの説明を参照してください。
POSITION( 開始 終了
固定幅のフィールドデータファイル内のレコード内のフィールドの位置を定義します。 開始終了は正の整数です。レコードの最初の文字の開始値は1です。
CHAR [( length )] | DATE [( length )] [ " datemask " ] |
INTEGER EXTERNAL [( length )] |
FLOAT EXTERNAL [(
length )] | DECIMAL EXTERNAL [( length )] |
ZONED EXTERNAL [( length )] | ZONED [( precision [, scale ])]
data_fileの データフィールドのフォーマットを記述するフィールドタイプ
注意:フィールドタイプの指定は説明的な目的のためにオプションであり、EDB * Loaderがフィールドのデータをテーブルの列に正常に挿入するかどうかには影響しません。ロードの成功は、列データ型とフィールド値の互換性によって決まります。たとえば、データ型が NUMBER(7,2)の 列は 2600を含むフィールドを正常に受け入れますが、フィールドに26XXなどの値が含まれていると挿入が失敗し、レコードがbad_fileに書き込まれます
ので、予めご了承ください ZONEDデータが判読できません。 ZONEDデータは、各桁が別々のニブル/ニブル/ 4ビットフィールドでエンコードされる内部形式で格納されます。各ZONED値では、最後のバイトには1桁(上位4ビット)と符号(下位4ビット)が含まれます。
長さ
関連する列にロードする値の長さを指定します。
場合 の位置( スタート 終了 句はFIELDTYPE( 長さ 句と共に指定され、フィールドの終了位置が指定れた長さの値で上書きされます。つまり、列にロードされる値の長さは、 POSITION( start end 節の終了位置ではなく、 開始位置で始まる長さの値によって決まります。したがって、列にロードされる値は、 POSITION( start end で定義されたフィールドよりも短くなる場合もあれば、指定れた長さのサイズに応じて終了位置を超える場合もあります。
場合 「termstring」BYTERMINATEDフィールドは INTO TABLE句の一部として指定され、フィールド定義がFIELDTYPE( 長さ 句が含まれ、その後、レコードがあれば、指定れた長さの値は以上であるとして受け入れられていますレコードのそのようなすべてのフィールドを囲む文字文字によって決定されるフィールド長。指定れた長さの値が、そのようなフィールドの囲み文字文字によって決定されるフィールド長よりも小さい場合、レコードは拒否されます。
場合 「termstring」BYTERMINATEDフィールドが指定されていない、及び位置( スタート 終了 句はFIELDTYPE( 長さ 句を含むフィールドに含まれていない場合、このフィールドの開始位置は、次の文字は、以下で始まります前のフィールドの終了位置。 FIELDTYPE無し節 長さ ):前のフィールドはFIELDTYPE( 長さ 句、またはそのエンドパラメータによってが含まれている場合、フィールドは位置( 始端 含まれている場合、前のフィールドの終了位置は、いずれかの長さの値の端部であります句。
精度
精度 使用して ZONED 値の 長さを指定し ます。
ZONEDに 指定され 精度 が、 POSITION 句で指定さ れた情報に基づいてサーバーによって計算された長さと競合する 場合、EDB * Loaderは precisionに 指定された値を使用します
規模
規模 小数点以下の桁数を指定します。 ゾーニング
データマスク
日付フィールドの日、月、および年のコンポーネントの順序と省略形を指定します。
注意: DATEフィールドタイプは、列のSQL式と一緒に指定されている場合は、datemaskは DATE後およびSQL式の前に指定する必要があります。 exprパラメータの次の説明を参照してください。
NULLIF field_condition [AND field_condition ] ...
注意:以前にfield_conditionの構文については、このパラメータのセクションに記載されているfield_conditionの説明を参照してください。
すべてのフィールド条件が TRUE評価された場合 、フィールド定義内のcolumn_nameによって識別される列はNULLに設定されます。いずれかのフィールド条件がFALSEと評価される場合 、フィールド定義に従って通常発生する適切な値に列が設定されます。
ブランクを保存する
このオプションが表示される列では、オプションのエンクロージャ区切り文字が存在しない場合は先頭の空白を保持し、フィールドが所定のサイズで指定されている場合は末尾の空白をそのまま残します。省略した場合のデフォルトの動作は、先頭と末尾の空白を削除することです。
expr
フィールド定義に割り当てられている列データ型と型互換性のあるスカラー値を返すSQL式。二重引用符は exprを 囲む必要があります。 (:)exprコロン文字で列名を付けることによって(FILLER句を使用してフィールドを除く)フィールドリストの任意の列への参照が含まれていてもよいです。
exprは、SQL SELECT文で構成することもできます。 SELECT文が使用されている場合は、次の規則を適用する必要があります。1) SELECT文は、かっこ(SELECT ...)で囲む必要があります。 2)選択リストは、 SELECTキーワードに続く1つの式で構成する必要があります。 3)結果セットは2つ以上の行を戻してはなりません。行が戻されない場合、結果の式の戻り値はNULLです。 SELECT文を使用するための構文は次のとおりです。
" (SELECT expr [ FROM table_list [ WHERE condition ] ]) "
注意: FROM table_list句を省略すると、Oracleデータベースと互換性がありません。表を指定する必要がない場合、 FROM DUAL句の使用はOracleデータベースと互換性があります。
制御ファイルとそれに対応するデータファイルの例を次に示します。
デリミタ区切りフィールドデータファイル
次の制御ファイルは、区切り文字で区切られたデータファイルを使用して、 empテーブルに行を追加します。
LOAD DATA
INFILE 'emp.dat'
BADFILE 'emp.bad'
APPEND
INTO TABLE emp
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
empno,
ename,
job,
mgr,
hiredate,
sal,
deptno,
comm
)
前述の制御ファイルでは、 APPEND句を使用して、追加の行をemp表に挿入できます。
区切り文字で区切られた対応するデータファイルは次のとおりです。
9101,ROGERS,CLERK,7902,17-DEC-10,1980.00,20
9102,PETERSON,SALESMAN,7698,20-DEC-10,2600.00,30,2300.00
9103,WARREN,SALESMAN,7698,22-DEC-10,5250.00,30,2500.00
9104,"JONES, JR.",MANAGER,7839,02-APR-09,7975.00,20
使用 TRAILING NULLCOLS句COMM列を供給する最後のフィールドは、最初と最後のレコードから省略されることを可能にします。これらのレコードから挿入された行に対して、 comm列はNULLに設定されます。
二重引用符のエンクロージャー文字は値 JONES、JRを 囲みます カンマ区切り文字がフィールド値の一部であるため、最後のレコードに
次のクエリは、EDB * Loaderセッションの後にテーブルに追加された行を表示します。
SELECT * FROM emp WHERE empno > 9100;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+------------+----------+------+--------------------+---------+---------+--------
9101 | ROGERS | CLERK | 7902 | 17-DEC-10 00:00:00 | 1980.00 | | 20
9102 | PETERSON | SALESMAN | 7698 | 20-DEC-10 00:00:00 | 2600.00 | 2300.00 | 30
9103 | WARREN | SALESMAN | 7698 | 22-DEC-10 00:00:00 | 5250.00 | 2500.00 | 30
9104 | JONES, JR. | MANAGER | 7839 | 02-APR-09 00:00:00 | 7975.00 | | 20
(4 rows)
固定幅フィールドデータファイル
次の例は、同じ行を emp表にロードするが、固定幅フィールドを含むデータ・ファイルを使用する制御ファイルです
LOAD DATA
INFILE 'emp_fixed.dat'
BADFILE 'emp_fixed.bad'
APPEND
INTO TABLE emp
TRAILING NULLCOLS
(
empno POSITION (1:4),
ename POSITION (5:14),
job POSITION (15:23),
mgr POSITION (24:27),
hiredate POSITION (28:38),
sal POSITION (39:46),
deptno POSITION (47:48),
comm POSITION (49:56)
)
前述の制御ファイルでは、 FIELDS TERMINATED BY句とOPTIONALLY ENCLOSED BY句は存在しません。代わりに、各フィールドには現在POSITION句が含まれています。
固定幅のフィールドを含む対応するデータファイルは次のとおりです。
9101ROGERS CLERK 790217-DEC-10 1980.0020
9102PETERSON SALESMAN 769820-DEC-10 2600.0030 2300.00
9103WARREN SALESMAN 769822-DEC-10 5250.0030 2500.00
9104JONES, JR.MANAGER 783902-APR-09 7975.0020
単一の物理レコードデータファイル - RECORDS DELIMITED BY句
次の例は、同じ行を emp表にロードするが、1つの物理レコードを持つデータ・ファイルを使用する制御ファイルです 。表の行としてロードされる個々のレコードは、 RECORDS DELIMITED BY句で指定されたセミコロン文字( ; )で終了します。
LOAD DATA
INFILE 'emp_recdelim.dat'
BADFILE 'emp_recdelim.bad'
APPEND
INTO TABLE emp
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
RECORDS DELIMITED BY ';'
TRAILING NULLCOLS
(
empno,
ename,
job,
mgr,
hiredate,
sal,
deptno,
comm
)
対応するデータファイルは次のとおりです。コンテンツは、データファイル内の単一の物理レコードです。レコード区切り文字は、最後のレコード(ファイルの最後)の後に含まれます。
9101,ROGERS,CLERK,7902,17-DEC-10,1980.00,20,;9102,PETERSON,SALESMAN,7698,20-DEC-10,2600.00,30,2300.00;9103,WARREN,SALESMAN,7698,22-DEC-10,5250.00,30,2500.00;9104,"JONES, JR.",MANAGER,7839,02-APR-09,7975.00,20,;
FILLER句
次の制御ファイルは、 salおよびcomm列のデータフィールドにFILLER句を使用する方法を示しています。 EDB * Loaderはこれらのフィールドの値を無視し、対応する列をnullに設定します。
LOAD DATA
INFILE 'emp_fixed.dat'
BADFILE 'emp_fixed.bad'
APPEND
INTO TABLE emp
TRAILING NULLCOLS
(
empno POSITION (1:4),
ename POSITION (5:14),
job POSITION (15:23),
mgr POSITION (24:27),
hiredate POSITION (28:38),
sal FILLER POSITION (39:46),
deptno POSITION (47:48),
comm FILLER POSITION (49:56)
)
以前の固定幅フィールドの例と同じ固定幅データファイルを使用すると、表の結果行は次のようになります。
SELECT * FROM emp WHERE empno > 9100;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+------------------+----------+------+--------------------+-----+------+--------
9101 | ROGERS | CLERK | 7902 | 17-DEC-10 00:00:00 | | | 20
9102 | PETERSON | SALESMAN | 7698 | 20-DEC-10 00:00:00 | | | 30
9103 | WARREN | SALESMAN | 7698 | 22-DEC-10 00:00:00 | | | 30
9104 | JONES, JR. | MANAGER | 7839 | 02-APR-09 00:00:00 | | | 20
(4 rows)
バウンフィラー句
次の制御ファイルは、 ジョブおよびmgr列のデータフィールドにBOUNDFILLER句を使用する方法を示しています。 EDB * Loaderは、これらのフィールドの値を無視し、対応する列をFILLER句と同じ方法でNULLに設定します。しかし、FILLER句の列とは異なり、BOUNDFILLER句でカラムをカラムjobdescについて示されるように、発現に使用することが許可されています。
LOAD DATA
INFILE 'emp.dat'
BADFILE 'emp.bad'
APPEND
INTO TABLE empjob
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
empno,
ename,
job BOUNDFILLER,
mgr BOUNDFILLER,
hiredate FILLER,
sal FILLER,
deptno FILLER,
comm FILLER,
jobdesc ":job || ' for manager ' || :mgr"
)
この例で使用される区切り文字で区切られたデータファイルは次のとおりです。
9101,ROGERS,CLERK,7902,17-DEC-10,1980.00,20
9102,PETERSON,SALESMAN,7698,20-DEC-10,2600.00,30,2300.00
9103,WARREN,SALESMAN,7698,22-DEC-10,5250.00,30,2500.00
9104,"JONES, JR.",MANAGER,7839,02-APR-09,7975.00,20
次の表は、上記の制御ファイルとデータファイルを使用してロードされています。
CREATE TABLE empjob (
empno NUMBER(4) NOT NULL CONSTRAINT empjob_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
jobdesc VARCHAR2(25)
);
表の結果行は次のように表示されます。
SELECT * FROM empjob;
 
empno | ename | job | mgr | jobdesc
-------+------------+-----+-----+---------------------------
9101 | ROGERS | | | CLERK for manager 7902
9102 | PETERSON | | | SALESMAN for manager 7698
9103 | WARREN | | | SALESMAN for manager 7698
9104 | JONES, JR. | | | MANAGER for manager 7839
(4 rows)
長さ指定のフィールド型
次の例は、長さ指定を持つフィールド型節を含む制御ファイルです。
LOAD DATA
INFILE 'emp_fixed.dat'
BADFILE 'emp_fixed.bad'
APPEND
INTO TABLE emp
TRAILING NULLCOLS
(
empno CHAR(4),
ename CHAR(10),
job POSITION (15:23) CHAR(9),
mgr INTEGER EXTERNAL(4),
hiredate DATE(11) "DD-MON-YY",
sal DECIMAL EXTERNAL(8),
deptno POSITION (47:48),
comm POSITION (49:56) DECIMAL EXTERNAL(8)
)
ことに留意されたい POSITION句FIELDTYPE( 長さ 句があれば、各フィールドの定義は、2つの句の少なくとも一方を含むように、個別に、または組み合わせて使用することができます。
固定幅のフィールドを含む対応するデータファイルは次のとおりです。
9101ROGERS CLERK 790217-DEC-10 1980.0020
9102PETERSON SALESMAN 769820-DEC-10 2600.0030 2300.00
9103WARREN SALESMAN 769822-DEC-10 5250.0030 2500.00
9104JONES, JR.MANAGER 783902-APR-09 7975.0020
表の結果行は次のように表示されます。
SELECT * FROM emp WHERE empno > 9100;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+------------+----------+------+--------------------+---------+---------+--------
9101 | ROGERS | CLERK | 7902 | 17-DEC-10 00:00:00 | 1980.00 | | 20
9102 | PETERSON | SALESMAN | 7698 | 20-DEC-10 00:00:00 | 2600.00 | 2300.00 | 30
9103 | WARREN | SALESMAN | 7698 | 22-DEC-10 00:00:00 | 5250.00 | 2500.00 | 30
9104 | JONES, JR. | MANAGER | 7839 | 02-APR-09 00:00:00 | 7975.00 | | 20
(4 rows)
NULLIF句
次の例では、使用するジョブマネージャの従業員のためだけでなく、従業員がSALESMANではなく、部門30でない場合はnullに設定するにはCOMM列にnullに設定するsal列NULLIF句を。従業員がSALESMANであるか、または部門30のメンバーである言い換えれば、COMM値が受け入れられます。
以下は制御ファイルです:
LOAD DATA
INFILE 'emp_fixed_2.dat'
BADFILE 'emp_fixed_2.bad'
APPEND
INTO TABLE emp
TRAILING NULLCOLS
(
empno POSITION (1:4),
ename POSITION (5:14),
job POSITION (15:23),
mgr POSITION (24:27),
hiredate POSITION (28:38),
sal POSITION (39:46) NULLIF job = 'MANAGER',
deptno POSITION (47:48),
comm POSITION (49:56) NULLIF job <> 'SALESMAN' AND deptno <> '30'
)
対応するデータファイルは次のとおりです。
9101ROGERS CLERK 790217-DEC-10 1980.0020
9102PETERSON SALESMAN 769820-DEC-10 2600.0030 2300.00
9103WARREN SALESMAN 769822-DEC-10 5250.0030 2500.00
9104JONES, JR.MANAGER 783902-APR-09 7975.0020
9105ARNOLDS CLERK 778213-SEP-10 3750.0030 800.00
9106JACKSON ANALYST 756603-JAN-11 4500.0040 2000.00
9107MAXWELL SALESMAN 769820-DEC-10 2600.0010 1600.00
表の結果行は次のように表示されます。
SELECT empno, ename, job, NVL(TO_CHAR(sal),'--null--') "sal",
NVL(TO_CHAR(comm),'--null--') "comm", deptno FROM emp WHERE empno > 9100;
 
empno | ename | job | sal | comm | deptno
-------+------------+----------+----------+----------+--------
9101 | ROGERS | CLERK | 1980.00 | --null-- | 20
9102 | PETERSON | SALESMAN | 2600.00 | 2300.00 | 30
9103 | WARREN | SALESMAN | 5250.00 | 2500.00 | 30
9104 | JONES, JR. | MANAGER | --null-- | --null-- | 20
9105 | ARNOLDS | CLERK | 3750.00 | 800.00 | 30
9106 | JACKSON | ANALYST | 4500.00 | --null-- | 40
9107 | MAXWELL | SALESMAN | 2600.00 | 1600.00 | 10
(7 rows)
従業員JONES、JR SalカラムジョブがMANAGERなので nullです。
これらの従業員がSALESMANや部門30のメンバーのいずれかであることから、従業員PETERSON、WARREN、 アーノルズ 、およびMAXWELLのデータファイルからCOMMの値は、すべてのemp表COMM列にロードされています。
この従業員はどちらもSALESMANでもなく、部門30のメンバーであるため、従業員JACKSONのためのデータファイルの2000.00COMMの値は無視され、emp表COMM列がnullに設定されています。
フィールド式のSELECT文
次の例では 、フィールド定義の式にSELECTステートメントを使用して、列にロードする値を返します。
LOAD DATA
INFILE 'emp_fixed.dat'
BADFILE 'emp_fixed.bad'
APPEND
INTO TABLE emp
TRAILING NULLCOLS
(
empno POSITION (1:4),
ename POSITION (5:14),
job POSITION (15:23) "(SELECT dname FROM dept WHERE deptno = :deptno)",
mgr POSITION (24:27),
hiredate POSITION (28:38),
sal POSITION (39:46),
deptno POSITION (47:48),
comm POSITION (49:56)
)
SELECT文で使用されるdeptテーブルの内容は次のとおりです。
SELECT * FROM dept;
 
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
40 | OPERATIONS | BOSTON
(4 rows)
対応するデータファイルは次のとおりです。
9101ROGERS CLERK 790217-DEC-10 1980.0020
9102PETERSON SALESMAN 769820-DEC-10 2600.0030 2300.00
9103WARREN SALESMAN 769822-DEC-10 5250.0030 2500.00
9104JONES, JR.MANAGER 783902-APR-09 7975.0020
表の結果行は次のように表示されます。
SELECT * FROM emp WHERE empno > 9100;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+------------+----------+------+--------------------+---------+---------+--------
9101 | ROGERS | RESEARCH | 7902 | 17-DEC-10 00:00:00 | 1980.00 | | 20
9102 | PETERSON | SALES | 7698 | 20-DEC-10 00:00:00 | 2600.00 | 2300.00 | 30
9103 | WARREN | SALES | 7698 | 22-DEC-10 00:00:00 | 5250.00 | 2500.00 | 30
9104 | JONES, JR. | RESEARCH | 7839 | 02-APR-09 00:00:00 | 7975.00 | | 20
(4 rows)
ジョブ列には、データファイルのジョブ名の代わりにSELECTステートメントによって返されたdeptテーブルのdname列の値が含まれていることに注意してください
複数のINTO TABLE節
次の例は、複数の INTO TABLE句の使用方法を示しています 。この例では、 emp表と同じデータ定義を持つ2つの空の表が作成されます。次のCREATE TABLEコマンドは、元のempテーブルから行を挿入しないで、これら2つの空のテーブルを作成します。
CREATE TABLE emp_research AS SELECT * FROM emp WHERE deptno = 99;
CREATE TABLE emp_sales AS SELECT * FROM emp WHERE deptno = 99;
次の制御ファイルには、2つの INTO TABLEが含まれています 。また、 APPEND句がないので、 INSERTのデフォルト操作が使用されているため、 emp_researchおよびemp_salesテーブルが空である必要があります。
LOAD DATA
INFILE 'emp_multitbl.dat'
BADFILE 'emp_multitbl.bad'
DISCARDFILE 'emp_multitbl.dsc'
INTO TABLE emp_research
WHEN (47:48) = '20'
TRAILING NULLCOLS
(
empno POSITION (1:4),
ename POSITION (5:14),
job POSITION (15:23),
mgr POSITION (24:27),
hiredate POSITION (28:38),
sal POSITION (39:46),
deptno CONSTANT '20',
comm POSITION (49:56)
)
INTO TABLE emp_sales
WHEN (47:48) = '30'
TRAILING NULLCOLS
(
empno POSITION (1:4),
ename POSITION (5:14),
job POSITION (15:23),
mgr POSITION (24:27),
hiredate POSITION (28:38),
sal POSITION (39:46),
deptno CONSTANT '30',
comm POSITION (49:56) "ROUND(:comm + (:sal * .25), 0)"
)
WHEN句は、フィールドが48から47 20含有列により指定された場合、レコードはemp_researchテーブルに挿入され、その同じフィールド30が含まれている場合、レコードはemp_salesテーブルに挿入されることを指定します。どちらの条件も真でない場合、レコードはemp_multitbl.dscという破棄ファイルに書き込まれます。
指定された定数値が各レコードのDEPTNOに挿入されるようにCONSTANT句は、列DEPTNOのために与えられています。 CONSTANT句を使用する場合は、 定数定義が割り当てられている列名以外のフィールド定義内の唯一の句である必要があります。
最後に、 emp_sales表の commにSQL式が割り当てられます。カラム名にコロン文字(:)を接頭辞として付けることにより、式内でカラム名を参照することができます。
対応するデータファイルは次のとおりです。
9101ROGERS CLERK 790217-DEC-10 1980.0020
9102PETERSON SALESMAN 769820-DEC-10 2600.0030 2300.00
9103WARREN SALESMAN 769822-DEC-10 5250.0030 2500.00
9104JONES, JR.MANAGER 783902-APR-09 7975.0020
9105ARNOLDS CLERK 778213-SEP-10 3750.0010
9106JACKSON ANALYST 756603-JAN-11 4500.0040
従業員 ARNOLDSおよびJACKSON のレコードには、 WHEN句を満たさない47〜48桁目に1040が含まれているため 、EDB * Loaderはこれらの2つのレコードを破棄ファイルemp_multitbl.dscに書き込みます。以下:
9105ARNOLDS CLERK 778213-SEP-10 3750.0010
9106JACKSON ANALYST 756603-JAN-11 4500.0040
emp_researchおよびemp_sales表にロードされる行は次のとおりです
SELECT * FROM emp_research;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+------------+---------+------+--------------------+---------+------+--------
9101 | ROGERS | CLERK | 7902 | 17-DEC-10 00:00:00 | 1980.00 | | 20.00
9104 | JONES, JR. | MANAGER | 7839 | 02-APR-09 00:00:00 | 7975.00 | | 20.00
(2 rows)
 
SELECT * FROM emp_sales;
 
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+----------+----------+------+--------------------+---------+---------+--------
9102 | PETERSON | SALESMAN | 7698 | 20-DEC-10 00:00:00 | 2600.00 | 2950.00 | 30.00
9103 | WARREN | SALESMAN | 7698 | 22-DEC-10 00:00:00 | 5250.00 | 3813.00 | 30.00
(2 rows)
2.4 EDB * Loaderの呼び出し
EDB * Loaderを実行するには、スーパーユーザー権限が必要です。次のコマンドを使用して、コマンドラインからEDB * Loaderを呼び出します。
edbldr [ -d dbname ] [ -p port ] [ -h host ]
[ USERID={ username / password | username / | username | / } ]
CONTROL= control_file
[ DATA= data_file ]
[ BAD= bad_file ]
[ DISCARD= discard_file ]
[ DISCARDMAX= max_discard_recs ]
[ LOG= log_file ]
[ PARFILE= param_file ]
[ DIRECT={ FALSE | TRUE } ]
[ FREEZE={ FALSE | TRUE } ]
[ ERRORS= error_count ]
[ PARALLEL={ FALSE | TRUE } ]
[ ROWS= n ]
[ SKIP= skip_count ]
[ SKIP_INDEX_MAINTENANCE={ FALSE | TRUE } ]
[ edb_resource_group= group_name ]
説明
場合 -dオプション、-pオプション、または-hオプションが省略されている、データベース、ポート、およびホストのデフォルト値は、例えば、EDB-psqlのような他の高度なサーバーのユーティリティプログラムと同じ規則に従って決定されます。
前の構文図にリストされている、 -dオプション、 -pオプション、 -hオプション、およびPARFILEパラメータ以外のパラメータは、 パラメータ・ファイルで指定できます 。パラメタファイルは、 PARFILE = param_fileを使用してedbldrが呼び出されたときにコマンドラインで指定されます 。一部のパラメータは、制御ファイルのOPTIONS句で指定することができます。セクション2.3の制御ファイルの説明を参照してください。
仕様 CONTROL_FILE、DATA_FILE、bad_file、discard_file、LOG_FILE、及びparam_fileは、完全なディレクトリパスやファイル名に相対ディレクトリパスを含むことができます。ファイル名が単独または相対ディレクトリパスで指定されている場合、ファイルは存在する( control_filedata_file 、またはparam_fileの場合 )か、作成される( bad_filediscard_file 、またはlog_fileの場合)とみなされます edbldrが呼び出される現在の作業ディレクトリに移動します。
注:制御ファイルは、 edbldrが呼び出されるクライアントの文字セット・エンコーディング内に存在していなければなりません。クライアントがデータベースエンコーディングと異なるエンコーディングの場合、 edbldrを呼び出す前に、 PGCLIENTENCODING環境変数をクライアントのエンコーディングに設定する必要があります。これは、クライアントとデータベース・サーバーの間で文字セットの変換が正しく行われるようにするために行う必要があります。
edbldr を起動するために使用されるオペレーティング・システム・アカウントは、 control_filedata_file 、およびparam_fileで指定されたディレクトリーおよびファイルに対する読み取り許可を持っていなければなりません。
オペレーティングシステムアカウント enterprisedbには、 bad_filediscard_file 、およびlog_fileが書き込まれるディレクトリに対する書き込み権限が必要です。
注:それはCONTROL_FILE、DATA_FILE、bad_file、discard_file、およびLOG_FILEのファイル名は、それぞれ、.CTLの拡張、.DAT、.bad 、.dscファイル 、および.logのが含まれていること示唆しています。提供されたファイル名に拡張子が含まれていない場合、EDB * Loaderは実際のファイル名に前述の適切な拡張子が含まれているとみなします。
パラメーター
dbname
ロードするテーブルを含むデータベースの名前。
データベース・サーバーが接続を受け入れるポート番号。
ホスト
データベース・サーバーが実行されているホストのIPアドレス。
USERID = { ユーザー名 / パスワード | ユーザー名 / | ユーザー名 | /}
EDB * Loaderは ユーザー名で データベースに接続し ますusernameはスーパーユーザーでなければなりません。 passwordusernameのパスワードです。
場合 USERIDパラメータが省略され、EDB * Loaderは、 ユーザー名パスワード入力を求められます。 USERID = ユーザ名 /指定されている場合は、EDB * Loaderの1)はPGPASSFILEが設定されている場合は、環境変数PGPASSFILEで指定されたパスワードファイルを使用して、またはPGPASSFILEが設定されていない場合2).pgpass、パスワードファイル(Windowsシステムのpgpass.conf)を使用しています。 USERID = usernameが指定されている場合、EDB * Loaderはパスワードを要求しますUSERID = /を指定すると、オペレーティング・システム・アカウントをユーザー名として使用して接続が試行されます。
注意: Advanced Server接続環境変数PGUSERおよびPGPASSWORDは、EDB * Loaderによって無視されます。 PGPASSFILE環境変数とパスワードファイルについては、PostgreSQLコアのマニュアルを参照してください。
CONTROL = control_file
control_fileは、EDB * Loaderディレクティブを含む制御ファイルの名前を指定します。ファイル拡張子が指定されていない場合、 .ctlの拡張子が仮定されます。制御ファイルの説明については、 2.3項を参照してください。
DATA = data_file
data_fileは、ターゲット表にロードするデータを含むファイルの名前を指定します。ファイル拡張子が指定されていない場合、 .datの拡張子が仮定されます。 data_fileの説明については、 2.3項を参照してください。
注:コマンドラインでdata_fileを指定すると、制御ファイルで指定されたINFILE句が上書きされます。
悪い= bad_file
bad_fileは、エラーのためにロードできない入力データレコードを受け取るファイルの名前を指定します。 bad_fileの説明については、 2.3節を参照してください。
注意:コマンドラインでbad_fileを指定すると、制御ファイルに指定された任意のBADFILE句を上書きします。
DISCARD = discard_file
discard_fileは、表の選択基準を満たさない入力データ・レコードを受け取るファイルの名前です。セクション2.3discard_fileの説明を参照してください。
注:コマンド行のDISCARDパラメーターを使用してdiscard_fileを指定すると、制御ファイル内のDISCARDFILE文節がオーバーライドされます。
DISCARDMAX = max_discard_recs
max_discard_recsは、EDB * Loaderセッションを終了する前に入力データレコードから遭遇するかもしれない廃棄されたレコードの最大数です。セクション2.3max_discard_recsの説明を参照してください。
注:コマンド行のDISCARDMAXパラメーターを使用してmax_discard_recsを指定すると、制御ファイル内のDISCARDMAXまたはDISCARDS節がオーバーライドされます。
LOG = log_file
log_fileは、EDB * LoaderがEDB * Loaderセッションの結果を記録するファイルの名前を指定します。
場合 LOGパラメータが省略され、EDB * Loaderはedbldrが起動されたディレクトリ内の名前control_file_base .log というのログ・ファイルを作成します。 control_file_baseは、EDB * Loaderセッションで使用される制御ファイルの基本名です。オペレーティングシステムアカウントenterprisedbには、ログファイルが書き込まれるディレクトリに対する書き込み権限が必要です。
PARFILE = param_file
param_fileは、EDB * Loaderセッションのコマンドラインパラメータを含むファイルの名前を指定します。 -d-p 、および-hオプション以外のこのセクションに記載されているコマンドラインパラメータ、およびPARFILEパラメータ自体は、コマンドラインではなくparam_fileで指定できます。
与えられた任意のパラメータ param_fileは PARFILEオプションの前に、コマンドラインで指定され、同じパラメータを上書きします。コマンドラインでPARFILEオプションの後に表示されるパラメータは、 param_fileで指定されたものと同じパラメータを上書きします。
注意:他のEDB * Loaderのファイルとは異なり、デフォルトのファイル名はありませんか、Oracle SQL * Loaderの慣例により、一般的に拡張機能として、.PAR使用されるが、必要がありませんが、拡張子は、param_fileに対して仮定。
直接= {FALSE | TRUE}
DIRECTTRUEに設定されている場合 EDB * Loaderは、従来のパスロードではなくダイレクトパスロードを実行します。 DIRECTのデフォルト値はFALSEです。
ダイレクト・パス・ロードの詳細は、第 2.5 項を参照してください
FREEZE = {FALSE | TRUE}
設定し たデータが フリーズ 行でコピーする必要があることを示すために TRUE FREEZE。すべての現在および将来のトランザクションで可視であることが保証されたタプルは、トランザクションIDラップアラウンドを防ぐためにフリーズとしてマークされます。固定されたタプルの詳細については、PostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/routine-vacuuming.html
FREEZE オプション を使用する場合は、制御ファイルに データ読み込みタイプの TRUNCATE 指定する必要があります フリーズ は直接ロードではサポートされていません。
デフォルトでは、 FREEZE FALSE です。
 
エラー= error_count
error_countは、EDB * Loaderセッションを中止する前に許容されるエラーの数を指定します。デフォルトは50です。
パラレル= {FALSE | TRUE}
PARALLELTRUE設定すると、このEDB * Loaderセッションは、パラレル・ダイレクト・パス・ロードに参加する複数の同時EDB * Loaderセッションの1つであることを示します。 PARALLELのデフォルト値はFALSEです。
とき PARALLELが TRUE、DIRECTパラメータもTRUEに設定する必要があります。パラレル・ダイレクト・パスのロードの詳細は、 2.6項を参照してください。
ROWS = n
nは、EDB * Loaderが次のn行セットをロードする前にコミットする行数を指定します。
SKIP = skip_count
ロード開始前にスキップする必要のある入力データファイルの先頭のレコード数。デフォルトは 0です。
SKIP_INDEX_MAINTENANCE = {FALSE | TRUE}
TRUE設定すると、ダイレクト・パス・ロードの一部として索引メンテナンスは実行されず、ロードされた表の索引は無効としてマークされます。 SKIP _ INDEX _ MAINTENANCEのデフォルト値はFALSEです。
注意:パラレル・ダイレクト・パスのロード中、ターゲット表の索引は更新されず、ロードが完了した後は無効としてマークされます。
REINDEXコマンドを使用して索引を再構築することができますREINDEXコマンドの詳細については、 次のURLにあるPostgreSQLのコアドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-reindex.html
edb_resource_group = group_name
group_nameは、EDB * Loaderセッションを割り当てるEDB Resource Managerリソース・グループの名前を指定します
セッションに割り当てられたデフォルトのリソースグループ(たとえば、 ALTER ROLE ... SET edb_resource_groupコマンドでデフォルトリソースグループが割り当てられているEDB * Loaderセッションを実行しているデータベースユーザー )は、リソースグループによって上書きされますedbldrコマンド行で指定されたedb_resource_groupパラメーターで指定します。
次の例では、EDB * Loaderは 、現在の作業ディレクトリにあるemp.ctl という名前の制御ファイルを使用して呼び出され、 edbデータベースにテーブルをロードします。
$ /usr/edb/as11/bin/edbldr -d edb USERID=enterprisedb/password CONTROL=emp.ctl
EDB*Loader: Copyright (c) 2007-2018, EnterpriseDB Corporation.
 
Successfully loaded (4) records
次の例では、コマンド行から省略されているため、EDB * Loaderはユーザー名とパスワードの入力を要求します。さらに、不良ファイルおよびログファイルのファイルは、 BADおよびLOGコマンドラインパラメータで指定されます。
$ /usr/edb/as11/bin/edbldr -d edb CONTROL=emp.ctl BAD=/tmp/emp.bad LOG=/tmp/emp.log
Enter the user name : enterprisedb
Enter the password :
EDB*Loader: Copyright (c) 2007-2018, EnterpriseDB Corporation.
 
Successfully loaded (4) records
次の例では、前述の例と同じパラメータを使用して現在の作業ディレクトリにあるパラメータファイルを使用してEDB * Loaderを実行します。 SKIPエラーパラメータは、同様にパラメータ・ファイルのデフォルトから変更されています。パラメータ・ファイルemp.parには、次のものが含まれています。
CONTROL=emp.ctl
BAD=/tmp/emp.bad
LOG=/tmp/emp.log
SKIP=1
ERRORS=10
EDB * Loaderは、次のようにパラメータファイルを使用して呼び出されます。
$ /usr/edb/as11/bin/edbldr -d edb PARFILE=emp.par
Enter the user name : enterprisedb
Enter the password :
EDB*Loader: Copyright (c) 2007-2018, EnterpriseDB Corporation.
 
Successfully loaded (3) records
2.4.1 終了コード
EDB * Loaderが終了すると、次のコードのいずれかが返されます。
0
1
2
3
2.5 直接パスロード
ダイレクト・パス・ロードの間、EDB * Loaderはデータをデータベース・ページに直接書き込んでから、ディスクに同期します。従来の経路負荷に関連する挿入処理はバイパスされ、それにより性能が改善される。
挿入処理をバイパスすると、ターゲット表に存在する制約のタイプが減少します。ダイレクト・パス・ロードのターゲット表では、次のタイプの制約を使用できます。
ダイレクト・パス・ロードのターゲット表に対する制限は、次のとおりです。
注意:現在、EDB * Loaderのダイレクト・パス・ロードは、Oracle SQL * Loaderよりも制限があります。前述の制限は、ほとんどの場合、Oracle SQL * Loaderには適用されません。ダイレクト・パス・ロードで使用される制御ファイルには、次の制限が適用されます。
複数の表のロードはサポートされていません。つまり 、制御ファイルに指定できるINTO TABLE句は1つだけです。
FREEZE オプション は、ダイレクト・パス・ロードではサポートされません。
ダイレクト・パス・ロードを実行するには、次の例のようにDIRECT = TRUEオプションを追加します。
$ /usr/edb/as11/bin/edbldr -d edb USERID=enterprisedb/password CONTROL=emp.ctl DIRECT=TRUE
EDB*Loader: Copyright (c) 2007-2018, EnterpriseDB Corporation.
 
Successfully loaded (4) records
2.6 パラレルダイレクト・パス・ロード
ロード・プロセスを複数のセッションで同時に実行することにより、ダイレクト・パス・ロードのパフォーマンスをさらに向上させることができます。各セッションは、同じ表にダイレクト・パス・ロードを実行します。
同じ表が複数のセッションからロードされるため、表にロードする入力レコードを複数のデータファイルに分割して、各EDB * Loaderセッションが独自のデータファイルを使用し、同じレコードが複数回ロードされないようにする必要があります。表。
パラレル・ダイレクト・パス・ロードのターゲット表は、シングル・セッションで実行されるダイレクト・パス・ロードと同じ制限を受けます。
ダイレクト・パス・ロードのターゲット表に対する制限は、次のとおりです。
さらに、 APPEND句は、各EDB * Loaderセッションで使用される制御ファイルで指定する必要があります。
パラレル・ダイレクト・パス・ロードを実行するには、パラレル・ダイレクト・パス・ロードの各参加者ごとに別々のセッションでEDB * Loaderを実行します。このようなEDB * Loaderセッションの呼び出しには、 DIRECT = TRUEおよびPARALLEL = TRUEパラメーターが含まれていなければなりません
各EDB * Loaderセッションは独立したトランザクションとして実行されるため、並列セッションの1つが中断して変更をロールバックすると、他の並列セッションによって行われたロードには影響しません。
注意:パラレル・ダイレクト・パス・ロードでは、各EDB *ローダー・セッションは、ラウンドロビン方式でターゲット表に固定数のブロックを予約します。最後に割り当てられたチャンクの一部のブロックは使用されず、これらのブロックは未初期化のままです。その後、ターゲット・テーブルでVACUUMコマンドを使用すると、次のような未初期化ブロックに関する警告が表示されることがあります。
WARNING: relation "emp" page 98264 is uninitialized --- fixing
 
WARNING: relation "emp" page 98265 is uninitialized --- fixing
 
WARNING: relation "emp" page 98266 is uninitialized --- fixing
これは予期された動作であり、データの破損を示すものではありません。
ターゲット・テーブルのインデックスは、パラレル・ダイレクト・パス・ロード時には更新されないため、ロードが完了した後は無効としてマークされます。 REINDEXコマンドを使用して索引を再構築する必要があります。
次の例は、 empにパラレル・ダイレクト・パス・ロードを使用する方法を示しています。
注意: Advanced Serverに付属のサンプルempテーブルにパラレル・ダイレクト・パス・ロードを実行する場合は、最初にempテーブルを参照するトリガと制約を削除する必要があります。加えて、主キー列は、EMPNO、行の多数の挿入を可能にするために、この例ではNUMBERNUMBER(4)から拡大しました。
最初のセッションで使用される制御ファイルは次のとおりです。
LOAD DATA
INFILE '/home/user/loader/emp_parallel_1.dat'
APPEND
INTO TABLE emp
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
empno,
ename,
job,
mgr,
hiredate,
sal,
deptno,
comm
)
APPEND句は、パラレル・ダイレクト・パス・ロードのための制御ファイルで指定されなければなりません。
以下は、最初のセッションでのEDB * Loaderの呼び出しを示しています。 TRUE = TRUEPARALLEL = DIRECTパラメータを指定する必要があります。
$ /usr/edb/as11/bin/edbldr -d edb USERID=enterprisedb/password CONTROL=emp_parallel_1.ctl DIRECT=TRUE PARALLEL=TRUE
WARNING: index maintenance will be skipped with PARALLEL load
EDB*Loader: Copyright (c) 2007-2018, EnterpriseDB Corporation.
2番目のセッションで使用される制御ファイルは、次のように表示されます。最初のセッションで使用されたのと同じですが、別のデータファイルを使用することに注意してください。
LOAD DATA
INFILE '/home/user/loader/emp_parallel_2.dat'
APPEND
INTO TABLE emp
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
empno,
ename,
job,
mgr,
hiredate,
sal,
deptno,
comm
)
先行する制御ファイルは、次のように2番目のセッションで使用されます。
$ /usr/edb/as11/bin/edbldr -d edb USERID=enterprisedb/password CONTROL=emp_parallel_2.ctl DIRECT=TRUE PARALLEL=TRUE
WARNING: index maintenance will be skipped with PARALLEL load
EDB*Loader: Copyright (c) 2007-2018, EnterpriseDB Corporation.
EDB * Loaderは、それぞれのロード操作が完了したときに、各セッションで次のメッセージを表示します。
Successfully loaded (10000) records
次の問合せは、 emp表の索引が INVALIDとしてマークされていることを示しています
SELECT index_name, status FROM user_indexes WHERE table_name = 'EMP';
 
index_name | status
------------+---------
EMP_PK | INVALID
(1 row)
注意: user_indexesは、現行のユーザーが所有するOracleデータベースと互換性のある索引のビューです。
empテーブルのクエリは、次のようにREINDEXコマンドを使用して再構築されない限り、インデックスを利用しません。
REINDEX INDEX emp_pk;
user_indexesの 後続のクエリでは、インデックスがVALIDとしてマークされていることが示されます。
SELECT index_name, status FROM user_indexes WHERE table_name = 'EMP';
 
index_name | status
------------+--------
EMP_PK | VALID
(1 row)
 
2.7 リモートロード
EDB * Loaderは、 リモートローディング という機能をサポートしています 。リモートロードでは、ロードするテーブルを含むデータベースが、EDB * Loaderが入力データソースで呼び出された場所とは異なるホスト上のデータベースサーバー上で実行されています。
この機能は、大量のデータをロードし、データベースサーバーを実行しているホスト上に大きなデータファイルを作成したくない場合に便利です。
また、標準入力機能を使用して、別のプログラムやスクリプトなどのデータソースから直接EDB * Loaderにパイプすることもできます。この場合、EDB * Loaderはリモートデータベースにテーブルをロードします。これにより、EDB * Loaderのディスク上にデータファイルを作成する必要がなくなります。
標準入力を使用してリモート読み込みを実行するには、以下が必要です。
edbldrプログラムは、それがEDB * Loaderのセッションのためのデータソースで呼び出されるべきでクライアントホストにインストールする必要があります。
制御ファイルには INFILE 'stdin' という句が含まれていなければなりません。そのため、データを直接EDB * Loaderの標準入力にパイプすることができます。 INFILE句とEDB * Loader制御ファイルについては、 2.3項を参照してください。
EDB * Loaderを呼び出すときは、 -hオプションを使用して 、リモート・データベース・サーバーのIPアドレスを指定します。 EDB * Loaderの起動については、 2.4項を参照してください。
オペレーティングシステムのパイプ演算子( | )または入力リダイレクション演算子( < )を使用して、入力データをEDB * Loaderに供給します。
次の例では、 datasourceという名前のソースからパイプされたデータを使用して 192.168.1.14の データベースサーバー上で実行されているデータベースをロードし ます
datasource | ./edbldr -d edb -h 192.168.1.14 USERID=enterprisedb/password CONTROL=remote.ctl
標準入力の使用方法の別の例を次に示します。
./edbldr -d edb -h 192.168.1.14 USERID=enterprisedb/password CONTROL=remote.ctl < datasource
 
2.8 従来のパス・ロードによる表の更新
従来のパス・ロードでEDB * Loaderを使用して、表内の行を更新し、新しいデータを既存のデータとマージすることができます。 EDB * Loaderを呼び出して更新を実行すると、サーバーは、一致する主キーを持つ既存の行をテーブルから検索します。
EDB * Loaderを使用して表を更新するには、表に主キーが必要です。 EDB * Loaderを使用してパーティション表 更新することはできません
UPDATE を実行するには 、従来のパスロードを実行するときと同じ手順を使用します。
1。
UPDATE または INSERT する行 含む データファイルを作成します
2。
INFILE キーワードを 使用し てデータファイルの名前を指定 する制御ファイルを定義し ます。 EDB * Loaderコントロールファイルの構築については、 2.3 項を参照してください
3。
次の例では 、Advanced Serverサンプル・データとともに配布されるemp表を使用します。デフォルトでは、テーブルには次のものが含まれます。
edb=# select * from emp;
empno|ename | job | mgr | hiredate | sal | comm | deptno
-----+------+---------+------+--------------------+---------+-------+--------
7369 |SMITH |CLERK | 7902 | 17-DEC-80 00:00:00 | 800.00 | | 20
7499 |ALLEN |SALESMAN | 7698 | 20-FEB-81 00:00:00 | 1600.00 |300.00 | 30
7521 |WARD |SALESMAN | 7698 | 22-FEB-81 00:00:00 | 1250.00 |500.00 | 30
7566 |JONES |MANAGER | 7839 | 02-APR-81 00:00:00 | 2975.00 | | 20
7654 |MARTIN|SALESMAN | 7698 | 28-SEP-81 00:00:00 | 1250.00 |1400.00| 30
7698 |BLAKE |MANAGER | 7839 | 01-MAY-81 00:00:00 | 2850.00 | | 30
7782 |CLARK |MANAGER | 7839 | 09-JUN-81 00:00:00 | 2450.00 | | 10
7788 |SCOTT |ANALYST | 7566 | 19-APR-87 00:00:00 | 3000.00 | | 20
7839 |KING |PRESIDENT| | 17-NOV-81 00:00:00 | 5000.00 | | 10
7844 |TURNER|SALESMAN | 7698 | 08-SEP-81 00:00:00 | 1500.00 | 0.00 | 30
7876 |ADAMS |CLERK | 7788 | 23-MAY-87 00:00:00 | 1100.00 | | 20
7900 |JAMES |CLERK | 7698 | 03-DEC-81 00:00:00 | 950.00 | | 30
7902 |FORD |ANALYST | 7566 | 03-DEC-81 00:00:00 | 3000.00 | | 20
7934 |MILLER|CLERK | 7782 | 23-JAN-82 00:00:00 | 1300.00 | | 10
(14 rows)
次の制御ファイル( emp_update.ctl )は、表内のフィールドをカンマ区切りリストで指定します。制御ファイルは、 emp表に対してUPDATEを実行します。
LOAD DATA
INFILE 'emp_update.dat'
BADFILE 'emp_update.bad'
DISCARDFILE 'emp_update.dsc'
UPDATE INTO TABLE emp
FIELDS TERMINATED BY ","
(empno, ename, job, mgr, hiredate, sal, comm, deptno)
更新または挿入されているデータは、 emp_update.datファイルに保存されます。 emp_update.datには、
7521,WARD,MANAGER,7839,22-FEB-81 00:00:00,3000.00,0.00,30
7566,JONES,MANAGER,7839,02-APR-81 00:00:00,3500.00,0.00,20
7903,BAKER,SALESMAN,7521,10-JUN-13 00:00:00,1800.00,500.00,20
7904,MILLS,SALESMAN,7839,13-JUN-13 00:00:00,1800.00,500.00,20
7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1500.00,400.00,30
EDB * Loaderを起動して、データベース名( edb )、データベーススーパーユーザーの名前(および関連するパスワード)、および制御ファイルの名前( emp_update.ctl )を指定します。
edbldr -d edb userid = user_name / password control = emp_update.ctl
更新を実行すると、 empテーブルには次の情報が含まれます。
edb=# select * from emp;
empno|ename | job | mgr | hiredate | sal | comm | deptno
-----+------+---------+------+--------------------+---------+-------+--------
7369 |SMITH |CLERK | 7902 | 17-DEC-80 00:00:00 | 800.00 | | 20
7499 |ALLEN |SALESMAN | 7698 | 20-FEB-81 00:00:00 | 1600.00 |300.00 | 30
7521 |WARD |MANAGER | 7839 | 22-FEB-81 00:00:00 | 3000.00 |0.00 | 30
7566 |JONES |MANAGER | 7839 | 02-APR-81 00:00:00 | 3500.00 |0.00 | 20
7654 |MARTIN|SALESMAN | 7698 | 28-SEP-81 00:00:00 | 1500.00 |400.00 | 30
7698 |BLAKE |MANAGER | 7839 | 01-MAY-81 00:00:00 | 2850.00 | | 30
7782 |CLARK |MANAGER | 7839 | 09-JUN-81 00:00:00 | 2450.00 | | 10
7788 |SCOTT |ANALYST | 7566 | 19-APR-87 00:00:00 | 3000.00 | | 20
7839 |KING |PRESIDENT| | 17-NOV-81 00:00:00 | 5000.00 | | 10
7844 |TURNER|SALESMAN | 7698 | 08-SEP-81 00:00:00 | 1500.00 | 0.00 | 30
7876 |ADAMS |CLERK | 7788 | 23-MAY-87 00:00:00 | 1100.00 | | 20
7900 |JAMES |CLERK | 7698 | 03-DEC-81 00:00:00 | 950.00 | | 30
7902 |FORD |ANALYST | 7566 | 03-DEC-81 00:00:00 | 3000.00 | | 20
7903 |BAKER |SALESMAN |7521 | 10-JUN-13 00:00:00 | 1800.00 |500.00 | 20
7904 |MILLS |SALESMAN |7839 |13-JUN-13 00:00:00 |1800.00 |500.00 | 20
7934 |MILLER|CLERK | 7782 | 23-JAN-82 00:00:00 | 1300.00 | | 10
(16 rows)
 
 
現在 empテーブルにある3人の従業員の情報を含む行が更新され、新しい従業員( BAKERおよびMILLS )の行が追加されます。
3 EDB *ラップ
EDB * Wrapユーティリティは、独自のソースコードとプログラム(関数、ストアドプロシージャ、トリガ、およびパッケージ)を不正な調査から保護します。 EDB * Wrapプログラムは、SPLまたはPL / pgSQLのソースコード(平文)を含むファイルを、ほぼ不可能な形式で同じコードを含むファイルに変換します。難読化されたコードがあれば、そのコードをPostgreSQLサーバに送ることができ、サーバはそれらのプログラムを難読化された形式で保存します。 EDB * Wrapはあいまいなコードですが、テーブル定義はまだ公開されています。
ラップするものはすべて難読化された形式で保存されます。パッケージ全体をラップすると、パッケージ本体に含まれているプロトタイプと、パッケージ本体に含まれている関数とプロシージャが、難読化された形式で格納されます。
CREATE PACKAGEステートメントをラップすると 、パッケージAPIが他の開発者から隠されます。パッケージ本体には定義されているパッケージプロトタイプやその他のパブリック変数をユーザーが見ることができるように、パッケージ本体をラップすることはできますが、パッケージヘッダーは囲むことはできません。ユーザーがパッケージに含まれているプロトタイプを確認できるようにするには、EDBWrapを使用して、 'CREATE PACKAGE 'ステートメントを省略して、edbwrap入力ファイルのCREATE PACKAGE BODYステートメントのみを難読化します。パッケージのヘッダソースはプレーンテキストに格納され、パッケージ本体のソースとパッケージの関数とプロシージャは難読化されて格納されます。
:: EDB * wrap_one.pdf
ラップされると、ソースコードとプログラムをアンラップまたはデバッグすることはできません。リバースエンジニアリングは可能ですが、非常に困難です。
ソースファイル全体が1つのユニットにラップされます。任意のファイルが実行されたときに包まれたファイルに含まpsqlのメタコマンドが認識されません。 psqlメタコマンドを含む難読化されたファイルを実行すると、構文エラーが発生します。 edbwrapはSQLソースコードを検証しません。 - プレーンテキストフォームに構文エラーが含まれていると、 edbwrapはエラーにはなりません。代わりに、サーバーはエラーを報告し、難読化されたフォームを実行しようとするとファイル全体を中止します。
3.1 EDB *ラップを使用したソースコードの難読化
EDB * Wrapはコマンドラインユーティリティです。単一の入力ソースファイルを受け入れ、内容を難読化し、単一の出力ファイルを返します。 edbwrapユーティリティを呼び出すときは、難読化するソースコードを含むファイルの名前を指定する必要があります。 edbwrapが難読化されたコードの書式を書き込むファイルの名前を指定することもできます。 edbwrapは3つの異なるコマンドラインスタイルを提供します。最初のスタイルは、Oracleのwrapユーティリティと互換性があります。
edbwrap iname= input_file [oname= output_file ]
INAMEは=のinput_file引数は、入力ファイルの名前を指定します。 input_fileに拡張子が含まれていない場合、 edbwrapinput_file .sqlという名前のファイルを検索します
(任意である)ONAME = output_fileの引数は、出力ファイルの名前を指定します。 output_fileの拡張が含まれていない場合は、edbwrapは名前に.plb追加します。
あなたは、出力ファイル名を指定しない場合、入力ファイル名から接尾辞(通常.SQL)を取り除き、.plb追加edbwrap:edbwrapは、その名の入力ファイル名から導出されたファイルに書き込みます。
edbwrapは2つのコマンドラインスタイルを提供しています。
edbwrap --iname input_file [--oname output_file ]
edbwrap -i input_file [-o output_file ]
コマンドラインスタイルを混在させることもできます。入力ファイル名と出力ファイル名の派生規則は、使用するスタイルに関係なく同一です。
いったん edbwrapは、難読化コードを含むファイルを生産している、あなたは通常、EDB-PSQLなどのクライアントアプリケーションを使用して、PostgreSQLサーバにそのファイルを養います。サーバーは、難読化されたコードを行ごとに実行し、SPLおよびPL / pgSQLプログラムのソースコードをラップされた形式で格納します。
要約すると、EDB * Wrapでコードを難読化するには、次のようにします。
1。
2。
3。
次のシーケンスは、 edbwrapの機能を示して ます。
まず、 list_empプロシージャのソースコードを (プレーンテキスト形式で) 作成します
[bash] cat listemp.sql
CREATE OR REPLACE PROCEDURE list_emp
IS                                  
    v_empno         NUMBER(4);      
    v_ename         VARCHAR2(10);   
    CURSOR emp_cur IS               
        SELECT empno, ename FROM emp ORDER BY empno;
BEGIN                                               
    OPEN emp_cur;                                   
    DBMS_OUTPUT.PUT_LINE('EMPNO    ENAME');         
    DBMS_OUTPUT.PUT_LINE('-----    -------');       
    LOOP                                            
        FETCH emp_cur INTO v_empno, v_ename;        
        EXIT WHEN emp_cur%NOTFOUND;                 
        DBMS_OUTPUT.PUT_LINE(v_empno || '     ' || v_ename);
    END LOOP;                                               
    CLOSE emp_cur;                                          
END;                                                        
/                                                           
edb-psqlなどのクライアントアプリケーションを使用し list_empプロシージャをインポートできます。
[bash] edb-psql edb
Welcome to edb-psql 8.4.3.2, the EnterpriseDB interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands    
       \? for help with edb-psql commands
       \g or terminate with semicolon to execute query
       \q to quit                                     
 
edb=# \i listemp.sql
CREATE PROCEDURE
pg_procシステムテーブルを調べることによって、(サーバーに格納されている)平文ソースコードを表示できます。
edb=# SELECT prosrc FROM pg_proc WHERE proname = 'list_emp';
                            prosrc                            
--------------------------------------------------------------
                                                              
     v_empno         NUMBER(4);                               
     v_ename         VARCHAR2(10);                            
     CURSOR emp_cur IS                                        
         SELECT empno, ename FROM emp ORDER BY empno;         
 BEGIN                                                        
     OPEN emp_cur;                                            
     DBMS_OUTPUT.PUT_LINE('EMPNO    ENAME');                  
     DBMS_OUTPUT.PUT_LINE('-----    -------');                
     LOOP                                                     
         FETCH emp_cur INTO v_empno, v_ename;                 
         EXIT WHEN emp_cur%NOTFOUND;                          
         DBMS_OUTPUT.PUT_LINE(v_empno || '     ' || v_ename); 
     END LOOP;                                                
     CLOSE emp_cur;                                           
 END                                                          
(1 row)                                                       
 
edb=# quit
次に、EDB * Wrapで平文ファイルを難読化します。
[bash] edbwrap -i listemp.sql                                        
EDB*Wrap Utility: Release 8.4.3.2
 
Copyright (c) 2004-2013 EnterpriseDB Corporation.  All Rights Reserved.
 
Using encoding UTF8 for input
Processing listemp.sql to listemp.plb
 
Examining the contents of the output file (listemp.plb) file reveals that the code is obfuscated:
 
[bash] cat listemp.plb 
$__EDBwrapped__$                     
UTF8                                 
d+6DL30RVaGjYMIzkuoSzAQgtBw7MhYFuAFkBsfYfhdJ0rjwBv+bHr1FCyH6j9SgH
movU+bYI+jR+hR2jbzq3sovHKEyZIp9y3/GckbQgualRhIlGpyWfE0dltDUpkYRLN
/OUXmk0/P4H6EI98sAHevGDhOWI+58DjJ44qhZ+l5NNEVxbWDztpb/s5sdx4660qQ
Ozx3/gh8VkqS2JbcxYMpjmrwVr6fAXfb68Ml9mW2Hl7fNtxcb5kjSzXvfWR2XYzJf
KFNrEhbL1DTVlSEC5wE6lGlwhYvXOf22m1R2IFns0MtF9fwcnBWAs1YqjR00j6+fc
er/f/efAFh4=
$__EDBwrapped__$
ラップされたファイルの2行目にエンコーディング名が含まれていることがあります(この場合、エンコーディングはUTF8です)。ファイルを難読化すると、edbwrapはロケールを調べて入力ファイルのエンコーディングを推測します。たとえば、ロケールがen_US.utf8に設定されているときにedbwrapを実行している場合、edbwrapは入力ファイルがUTF8でエンコードされているとみなします。 edbwrapの実行後に出力ファイルを調べてください。ラップされたファイルに含まれるロケールが入力ファイルのエンコーディングと一致しない場合、ロケールを変更して入力ファイルを再ラップする必要があります。
プレーンテキストコードで動作するツールと同じツールを使用して、難読化されたコードをPostgreSQLサーバにインポートすることができます:
[bash] edb-psql edb
Welcome to edb-psql 8.4.3.2, the EnterpriseDB interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with edb-psql commands
       \g or terminate with semicolon to execute query
       \q to quit
 
edb=# \i listemp.plb
CREATE PROCEDURE
 
Now, the pg_proc system table contains the obfuscated code:
 
edb=# SELECT prosrc FROM pg_proc WHERE proname = 'list_emp';
                                    prosrc
----------------------------------------------------------------
 $__EDBwrapped__$
 UTF8
 dw4B9Tz69J3WOsy0GgYJQa+G2sLZ3IOyxS8pDyuOTFuiYe/EXiEatwwG3h3tdJk
 ea+AIp35dS/4idbN8wpegM3s994dQ3R97NgNHfvTQnO2vtd4wQtsQ/Zc4v4Lhfj
 nlV+A4UpHI5oQEnXeAch2LcRD87hkU0uo1ESeQV8IrXaj9BsZr+ueROnwhGs/Ec
 pva/tRV4m9RusFn0wyr38u4Z8w4dfnPW184Y3o6It4b3aH07WxTkWrMLmOZW1jJ
 Nu6u4o+ezO64G9QKPazgehslv4JB9NQnuocActfDSPMY7R7anmgw
 $__EDBwrapped__$
(1 row)
プレーンテキスト形式を呼び出すのと同じ方法で難読化されたコードを呼び出します。
edb =#exec list_emp;
EMPNO    ENAME
-----    -------
7369     SMITH
7499     ALLEN
7521     WARD
7566     JONES
7654     MARTIN
7698     BLAKE
7782     CLARK
7788     SCOTT
7839     KING
7844     TURNER
7876     ADAMS
7900     JAMES
7902     FORD
7934     MILLER
 
EDB-SPL Procedure successfully completed
edb=# quit
pg_dump使用してデータベースをバックアップすると、ラップされたプログラムはアーカイブファイルに難読化されたままです。
Postgresサーバによって生成される監査ログには、ラップされたプログラムがプレーンテキスト形式で表示されることに注意してください。ソースコードは、プログラムの実行中に生成されるSQLエラーメッセージでもプレーンテキストで表示されます。
注:この時点で、次のステートメントで作成されたオブジェクトのボディは、難読化された形式では格納されません。
CREATE [OR REPLACE] TYPE type_name AS OBJECT
CREATE [OR REPLACE] TYPE type_name UNDER type_name
CREATE [OR REPLACE] TYPE BODY type_name
4 ダイナミックランタイム計測ツールアーキテクチャ(DRITA)
DRITA(Dynamic Runtime Instrumentation Tools Architecture)を使用すると、DBAはカタログ・ビューを問い合せて 、個々のセッションまたはシステム全体のパフォーマンスに影響を及ぼす待機イベント を判別できます 。 DRITAは、各イベントの発生回数と待機時間を記録します。この情報を使用してパフォーマンスの問題を診断できます。 DRITAは最小のシステムリソースを消費しながらこの機能を提供します。
DRITAは、 スナップショット比較してシステムのパフォーマンスを評価します。スナップショットは、特定の時点におけるシステムパフォーマンスデータの保存されたセットです。各スナップショットは一意のID番号で識別されます。 DRITAレポート機能でスナップショットID番号を使用してシステムパフォーマンス統計を返すことができます。
4.1 DRITAの設定と使用
高度なサーバーの postgresqlconfファイルには、タイミングデータの収集を制御するtimed_statisticsという名前の構成パラメータが含まれています。有効なパラメータ値はTRUEまたはFALSEです。デフォルト値はFALSEです。
これは動的パラメータであり、 postgresql.confファイルで変更することも 、セッションの進行中に変更することもできます 。 DRITAを有効にするには、次のいずれかを行う必要があります。
postgresql.confファイルを変更しtimed_statisticsパラメータをTRUEに設定します。
または
EDB-PSQLクライアントを使用してサーバーに接続し、次のコマンドを呼び出します。
SET timed_statistics = TRUE
timed_statisticsパラメータを変更した後 、開始スナップショットを取得します。スナップショットは、各タイマーとイベントカウンタの現在の状態をキャプチャします。サーバーは、開始スナップショットと後のスナップショットを比較して、システムのパフォーマンスを測定します。
edbsnap()関数を使用して 、開始スナップショットを取得します。
edb=# SELECT * FROM edbsnap();
edbsnap
----------------------
Statement processed.
(1 row)
次に、評価したいワークロードを実行します。ワークロードが完了したら(またはワークロード中の戦略的なポイントで)、別のスナップショットを作成します。
edb=# SELECT * FROM edbsnap();
edbsnap
----------------------
Statement processed.
(1 row)
セッション中に複数のスナップショットをキャプチャできます。次に、DRITAの機能とレポートを使用してスナップショットを管理および比較し、パフォーマンス情報を評価します。
4.2 DRITA関数
DRITA機能を使用して待機情報を収集し、スナップショットを管理できます。 DRITA機能は、インストールがOracleデータベースと互換性があるかPostgreSQL互換モードで行われるかに関係なく、Advanced Server 10によって完全にサポートされています。
4.2.1 get_snaps()
get_snaps()関数は、現在のスナップショットのリストを返します。署名は次のとおりです。
get_snaps()
次の例は、 get_snaps()関数を使用してスナップショットのリストを表示する方法を示しています。
SELECT * FROM get_snaps();
get_snaps
------------------------------
1 25-JUL-18 09:49:04.224597
2 25-JUL-18 09:49:09.310395
3 25-JUL-18 09:49:14.378728
4 25-JUL-18 09:49:19.448875
5 25-JUL-18 09:49:24.52103
6 25-JUL-18 09:49:29.586889
7 25-JUL-18 09:49:34.65529
8 25-JUL-18 09:49:39.723095
9 25-JUL-18 09:49:44.788392
10 25-JUL-18 09:49:49.855821
11 25-JUL-18 09:49:54.919954
12 25-JUL-18 09:49:59.987707
(12 rows)
結果リストの最初の列にはスナップショットIDが表示されます。 2番目の列にはスナップショットがキャプチャされた日時が表示されます。
4.2.2 sys_rpt()
sys_rpt()関数は、システムが情報を待って返します。署名は次のとおりです。
sys_rpt( beginning_idending_idtop_n
パラメーター
開始 _ ID
開始 _ IDは、開始セッション識別子を表す整数値です。
エンディング _ ID
エンディング _ ID 終了セッション識別子を表す整数値です
top_n
top_nは返す行の数を表します。
次の例は、 sys_rpt()関数の呼び出しを示しています
SELECT * FROM sys_rpt(9, 10, 10);
sys_rpt
-----------------------------------------------------------------------------
WAIT NAME COUNT WAIT TIME % WAIT
---------------------------------------------------------------------------
wal flush 8359 1.357593 30.62
wal write 8358 1.349153 30.43
wal file sync 8358 1.286437 29.02
query plan 33439 0.439324 9.91
db file extend 54 0.000585 0.01
db file read 31 0.000307 0.01
other lwlock acquire 0 0.000000 0.00
ProcArrayLock 0 0.000000 0.00
CLogControlLock 0 0.000000 0.00
(11 rows)
結果セットに表示される情報は次のとおりです。
4.2.3 sess_rpt()
sess_rpt()関数は、セッションの待機情報を返します。署名は次のとおりです。
sess_rpt( beginning_idending_id、top_n
パラメーター
開始 _ ID
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_id 終了セッション識別子を表す整数値です
top_n
top_nは返す行の数を表します。
次の例は、 sess_rpt()関数の呼び出しを示しています
SELECT * FROM sess_rpt(8, 9, 10);
 
sess_rpt
---------------------------------------------------------------------------------------
ID USER WAIT NAME COUNT TIME % WAIT SES % WAIT ALL
--------------------------------------------------------------------------------------
3501 enterprise wal flush 8354 1.354958 30.61 30.61
3501 enterprise wal write 8354 1.348192 30.46 30.46
3501 enterprise wal file sync 8354 1.285607 29.04 29.04
3501 enterprise query plan 33413 0.436901 9.87 9.87
3501 enterprise db file extend 54 0.000578 0.01 0.01
3501 enterprise db file read 56 0.000541 0.01 0.01
3501 enterprise ProcArrayLock 0 0.000000 0.00 0.00
3501 enterprise CLogControlLock 0 0.000000 0.00 0.00
(10 rows)
結果セットに表示される情報は次のとおりです。
ID
4.2.4 sessid_rpt()
sessid_rpt()関数は、指定されたバックエンドのセッションID情報を返します。署名は次のとおりです。
sessid_rpt( beginning_idending_id、backend_id
 
パラメーター
beginning_id
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_id 終了セッション識別子を表す整数値です
backend_id
backend_id バックエンド識別子を表す整数値です
次のコードサンプルは、 sessid_rpt()の 呼び出しを示しています
SELECT * FROM sessid_rpt(8, 9, 3501);
 
sessid_rpt
---------------------------------------------------------------------------------------
ID USER WAIT NAME COUNT TIME % WAIT SES % WAIT ALL
--------------------------------------------------------------------------------------
3501 enterprise CLogControlLock 0 0.000000 0.00 0.00
3501 enterprise ProcArrayLock 0 0.000000 0.00 0.00
3501 enterprise db file read 56 0.000541 0.01 0.01
3501 enterprise db file extend 54 0.000578 0.01 0.01
3501 enterprise query plan 33413 0.436901 9.87 9.87
3501 enterprise wal file sync 8354 1.285607 29.04 29.04
3501 enterprise wal write 8354 1.348192 30.46 30.46
3501 enterprise wal flush 8354 1.354958 30.61 30.61
(10 rows)
結果セットに表示される情報は次のとおりです。
ID
4.2.5 sesshist_rpt()
sesshist_rpt()関数は、指定されたバックエンドのセッション待機情報を返します。署名は次のとおりです。
sesshist_rpt( snapshot_idsession_id
パラメーター
snapshot_id
snapshot_idは、 スナップショットを識別する整数値です。
セッションID
セッションID セッションを表す整数値です。
次の例は、 sesshist_rpt()関数の呼び出しを示しています
注:実際には1300を超える行が生成されたため、次の出力が短くなっています。
SELECT * FROM sesshist_rpt (9, 3501);
sesshist_rpt
---------------------------------------------------------------------------------------
ID USER SEQ WAIT NAME ELAPSED File Name # of Blk Sum of Blks
--------------------------------------------------------------------------------------
3501 enterprise 1 query plan 13 0 N/A 0 0
3501 enterprise 1 query plan 13 0 edb_password_history 0 0
3501 enterprise 1 query plan 13 0 edb_password_history 0 0
3501 enterprise 1 query plan 13 0 edb_password_history 0 0
3501 enterprise 1 query plan 13 0 edb_profile 0 0
3501 enterprise 1 query plan 13 0 edb_profile_name_ind 0 0
3501 enterprise 1 query plan 13 0 edb_profile_oid_inde 0 0
3501 enterprise 1 query plan 13 0 edb_profile_password 0 0
3501 enterprise 1 query plan 13 0 edb_resource_group 0 0
3501 enterprise 1 query plan 13 0 edb_resource_group_n 0 0
3501 enterprise 1 query plan 13 0 edb_resource_group_o 0 0
3501 enterprise 1 query plan 13 0 pg_attribute 0 0
3501 enterprise 1 query plan 13 0 pg_attribute_relid_a 0 0
3501 enterprise 1 query plan 13 0 pg_attribute_relid_a 0 0
3501 enterprise 1 query plan 13 0 pg_auth_members 0 0
3501 enterprise 1 query plan 13 0 pg_auth_members_memb 0 0
3501 enterprise 1 query plan 13 0 pg_auth_members_role 0 0
.
.
.
3501 enterprise 2 wal flush 149 0 N/A 0 0
3501 enterprise 2 wal flush 149 0 edb_password_history 0 0
3501 enterprise 2 wal flush 149 0 edb_password_history 0 0
3501 enterprise 2 wal flush 149 0 edb_password_history 0 0
3501 enterprise 2 wal flush 149 0 edb_profile 0 0
3501 enterprise 2 wal flush 149 0 edb_profile_name_ind 0 0
3501 enterprise 2 wal flush 149 0 edb_profile_oid_inde 0 0
3501 enterprise 2 wal flush 149 0 edb_profile_password 0 0
3501 enterprise 2 wal flush 149 0 edb_resource_group 0 0
3501 enterprise 2 wal flush 149 0 edb_resource_group_n 0 0
3501 enterprise 2 wal flush 149 0 edb_resource_group_o 0 0
3501 enterprise 2 wal flush 149 0 pg_attribute 0 0
3501 enterprise 2 wal flush 149 0 pg_attribute_relid_a 0 0
3501 enterprise 2 wal flush 149 0 pg_attribute_relid_a 0 0
3501 enterprise 2 wal flush 149 0 pg_auth_members 0 0
3501 enterprise 2 wal flush 149 0 pg_auth_members_memb 0 0
3501 enterprise 2 wal flush 149 0 pg_auth_members_role 0 0
.
.
.
3501 enterprise 3 wal write 148 0 N/A 0 0
3501 enterprise 3 wal write 148 0 edb_password_history 0 0
3501 enterprise 3 wal write 148 0 edb_password_history 0 0
3501 enterprise 3 wal write 148 0 edb_password_history 0 0
3501 enterprise 3 wal write 148 0 edb_profile 0 0
3501 enterprise 3 wal write 148 0 edb_profile_name_ind 0 0
3501 enterprise 3 wal write 148 0 edb_profile_oid_inde 0 0
3501 enterprise 3 wal write 148 0 edb_profile_password 0 0
3501 enterprise 3 wal write 148 0 edb_resource_group 0 0
3501 enterprise 3 wal write 148 0 edb_resource_group_n 0 0
3501 enterprise 3 wal write 148 0 edb_resource_group_o 0 0
3501 enterprise 3 wal write 148 0 pg_attribute 0 0
3501 enterprise 3 wal write 148 0 pg_attribute_relid_a 0 0
3501 enterprise 3 wal write 148 0 pg_attribute_relid_a 0 0
3501 enterprise 3 wal write 148 0 pg_auth_members 0 0
3501 enterprise 3 wal write 148 0 pg_auth_members_memb 0 0
3501 enterprise 3 wal write 148 0 pg_auth_members_role 0 0
.
.
.
3501 enterprise 24 wal write 130 0 pg_toast_1255 0 0
3501 enterprise 24 wal write 130 0 pg_toast_1255_index 0 0
3501 enterprise 24 wal write 130 0 pg_toast_2396 0 0
3501 enterprise 24 wal write 130 0 pg_toast_2396_index 0 0
3501 enterprise 24 wal write 130 0 pg_toast_2964 0 0
3501 enterprise 24 wal write 130 0 pg_toast_2964_index 0 0
3501 enterprise 24 wal write 130 0 pg_toast_3592 0 0
3501 enterprise 24 wal write 130 0 pg_toast_3592_index 0 0
3501 enterprise 24 wal write 130 0 pg_type 0 0
3501 enterprise 24 wal write 130 0 pg_type_oid_index 0 0
3501 enterprise 24 wal write 130 0 pg_type_typname_nsp_ 0 0
(1304 rows)
結果セットに表示される情報は次のとおりです。
ID
SEQ
4.2.6 purgesnap()
purgesnap()関数は、スナップショット・テーブルからのスナップショットの範囲をパージします。署名は次のとおりです。
purgesnap( beginning_id、 ending_id
パラメーター
開始 _ ID
開始 _ IDは、開始セッション識別子を表す整数値です。
エンディング _ ID
エンディング _ ID 終了セッション識別子を表す整数値です
purgesnapは() 初め _ idending_id(包括的)の間のすべてのスナップショットを削除します。
SELECT * FROM purgesnap(6, 9);
 
purgesnap
------------------------------------
Snapshots in range 6 to 9 deleted.
(1 row)
呼び出しの例を実行した後get_snaps()関数は、スナップショットが6〜9は、スナップショット・テーブルからパージされたことを示しています。
SELECT * FROM get_snaps();
get_snaps
------------------------------
1 25-JUL-18 09:49:04.224597
2 25-JUL-18 09:49:09.310395
3 25-JUL-18 09:49:14.378728
4 25-JUL-18 09:49:19.448875
5 25-JUL-18 09:49:24.52103
10 25-JUL-18 09:49:49.855821
11 25-JUL-18 09:49:54.919954
12 25-JUL-18 09:49:59.987707
(8 rows)
4.2.7 truncsnap()
使用するスナップショットテーブルからすべてのレコードを削除するにはtruncsnap()関数を。署名は次のとおりです。
truncsnap()
例えば:
SELECT * FROM truncsnap();
 
truncsnap
----------------------
Snapshots truncated.
(1 row)
呼び出し truncsnap()関数を呼び出した後get_snaps()関数は、すべてのレコードがスナップショット表から削除されていることを示しています。
SELECT * FROM get_snaps();
get_snaps
-----------
(0 rows)
4.3 Statspack AWRレポートのシミュレーション
この項で説明する関数は、 Oracle Statspack / AWR(自動ワークロード・リポジトリ)レポートに含まれる情報に匹敵する情報を返します。スナップショットを取ると、システムカタログテーブルのパフォーマンスデータが履歴テーブルに保存されます。下記の報告機能は、2つのスナップショットの相違点を報告します。
レポート関数は個別に実行することも、 edbreport()関数を呼び出して5つの関数をすべて実行することもできます。
4.3.1 edbreport()
edbreport()関数は、他のレポート機能からのデータに加えて、追加のシステム情報を含みます。署名は次のとおりです。
edbreport(beginning_id、ending_id)
パラメーター
beginning_id
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_idは、終了セッション識別子を表す整数値です
edbreport()関数の呼び出しは、システム情報と他のstatspack関数によって返されたレポートを含む複合レポートを返します。
SELECT * FROM edbreport(9, 10);
edbreport
---------------------------------------------------------------------------------------
EnterpriseDB Report for database acctg 25-JUL-18
Version: PostgreSQL 11.0 (EnterpriseDB Advanced Server 11.0.2) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18), 64-bit
Begin snapshot: 9 at 25-JUL-18 09:49:44.788392
End snapshot: 10 at 25-JUL-18 09:49:49.855821
Size of database acctg is 173 MB
Tablespace: pg_default Size: 231 MB Owner: enterprisedb
Tablespace: pg_global Size: 719 kB Owner: enterprisedb
Schema: pg_toast_temp_1 Size: 0 bytes Owner: enterprisedb
Schema: public Size: 158 MB Owner: enterprisedb
レポートの概要に表示される情報には、データベース名とバージョン、現在の日付、開始日と終了日のスナップショットの日時、データベースと表スペースの詳細、およびスキーマ情報が含まれます。
Top 10 Relations by pages
TABLE RELPAGES
-----------------------------------------------------
pgbench_accounts 16394
pgbench_history 391
pg_proc 145
pg_attribute 92
pg_depend 81
pg_collation 60
edb$stat_all_indexes 46
edb$statio_all_indexes 46
pg_description 44
edb$stat_all_tables 29
トップ10ページ単位の関係セクションに表示される情報は次のとおりです。
 
 
Top 10 Indexes by pages
INDEX RELPAGES
-----------------------------------------------------
pgbench_accounts_pkey 2745
pg_depend_reference_index 68
pg_depend_depender_index 63
pg_proc_proname_args_nsp_index 53
pg_attribute_relid_attnam_index 25
pg_description_o_c_o_index 24
pg_attribute_relid_attnum_index 17
pg_proc_oid_index 14
pg_collation_name_enc_nsp_index 12
edb$stat_idx_pk 10
ページ別トップ10インデックスに 表示される情報は次のとおりです。
Top 10 Relations by DML
SCHEMA RELATION UPDATES DELETES INSERTS
----------------------------------------------------------------------------
public pgbench_accounts 117209 0 1000000
public pgbench_tellers 117209 0 100
public pgbench_branches 117209 0 10
public pgbench_history 0 0 117209
Top 10 Relations by DML」セクションに表示される情報は次のとおりです。
 
DATA from pg_stat_database
DATABASE NUMBACKENDS XACT COMMIT XACT ROLLBACK BLKS READ BLKS HIT HIT RATIO
-------------------------------------------------------------------------------------
acctg 0 8261 0 117 127985 99.91
レポートのpg_stat_databaseセクションのDATAに 表示される情報は次のとおりです。
 
DATA from pg_buffercache
RELATION BUFFERS
-------------------------------------------
pgbench_accounts 16665
pgbench_accounts_pkey 2745
pgbench_history 751
edb$statio_all_indexes 94
edb$stat_all_indexes 94
edb$stat_all_tables 60
edb$statio_all_tables 56
edb$session_wait_history 34
edb$statio_idx_pk 17
pg_depend 17
レポートのpg_buffercacheセクションのDATAに 表示される情報は次のとおりです。
注意: pg_buffercacheからDATAのレポートを取得するには、 pg_buffercacheモジュールがデータベースにインストールされている必要があります。 CREATE EXTENSIONコマンドを使用してインストールを実行します。
詳細については 、CREATE EXTENSIONコマンドでPostgreSQLのコアのドキュメントを参照してください。
https://www.postgresql.org/docs/11/static/sql-createextension.html
DATA from pg_stat_all_tables ordered by seq scan
SCHEMA RELATION SEQ SCAN REL TUP READ IDX SCAN IDX TUP READ INS UPD DEL
-----------------------------------------------------------------------------------------------------------------------
public pgbench_branches 8258 82580 0 0 0 8258 0
public pgbench_tellers 8258 825800 0 0 0 8258 0
pg_catalog pg_class 7 3969 92 80 0 0 0
pg_catalog pg_index 5 950 31 38 0 0 0
pg_catalog pg_namespace 4 144 5 4 0 0 0
pg_catalog pg_database 2 12 7 7 0 0 0
pg_catalog pg_am 1 1 0 0 0 0 0
pg_catalog pg_authid 1 10 2 2 0 0 0
sys callback_queue_table 0 0 0 0 0 0 0
sys edb$session_wait_history 0 0 0 0 125 0 0
segスキャンで順序付けられたpg_stat_all_tables DATAに 表示される情報には、次のものが含まれます。
INS
UPD
DEL
 
DATA from pg_stat_all_tables ordered by rel tup read
SCHEMA RELATION SEQ SCAN REL TUP READ IDX SCAN IDX TUP READ INS UPD DEL
-----------------------------------------------------------------------------------------------------------------------
public pgbench_tellers 8258 825800 0 0 0 8258 0
public pgbench_branches 8258 82580 0 0 0 8258 0
pg_catalog pg_class 7 3969 92 80 0 0 0
pg_catalog pg_index 5 950 31 38 0 0 0
pg_catalog pg_namespace 4 144 5 4 0 0 0
pg_catalog pg_database 2 12 7 7 0 0 0
pg_catalog pg_authid 1 10 2 2 0 0 0
pg_catalog pg_am 1 1 0 0 0 0 0
sys callback_queue_table 0 0 0 0 0 0 0
sys edb$session_wait_history 0 0 0 0 125 0 0
reltup readセクションで注文されたpg_stat_all_tables DATAに 表示される情報には、 次のものが含まれます。
INS
UPD
DEL
 
DATA from pg_statio_all_tables
SCHEMA RELATION HEAP HEAP IDX IDX TOAST TOAST TIDX TIDX
READ HIT READ HIT READ HIT READ HIT
-----------------------------------------------------------------------------------------------------------------
public pgbench_accounts 32 25016 0 49913 0 0 0 0
public pgbench_tellers 0 24774 0 0 0 0 0 0
public pgbench_branches 0 16516 0 0 0 0 0 0
public pgbench_history 53 8364 0 0 0 0 0 0
pg_catalog pg_class 0 199 0 187 0 0 0 0
pg_catalog pg_attribute 0 198 0 395 0 0 0 0
pg_catalog pg_proc 0 75 0 153 0 0 0 0
pg_catalog pg_index 0 56 0 33 0 0 0 0
pg_catalog pg_amop 0 48 0 56 0 0 0 0
pg_catalog pg_namespace 0 28 0 7 0 0 0 0
pg_statio_all_tables データセクションに表示される情報は次のとおりです。
 
DATA from pg_stat_all_indexes
 
SCHEMA RELATION INDEX IDX SCAN IDX TUP READ IDX TUP FETCH
-------------------------------------------------------------------------------------------------------------------------
public pgbench_accounts pgbench_accounts_pkey 16516 16679 16516
pg_catalog pg_attribute pg_attribute_relid_attnum_index 196 402 402
pg_catalog pg_proc pg_proc_oid_index 70 70 70
pg_catalog pg_class pg_class_oid_index 61 61 61
pg_catalog pg_class pg_class_relname_nsp_index 31 19 19
pg_catalog pg_type pg_type_oid_index 22 22 22
pg_catalog edb_policy edb_policy_object_name_index 21 0 0
pg_catalog pg_amop pg_amop_fam_strat_index 16 16 16
pg_catalog pg_index pg_index_indexrelid_index 16 16 16
pg_catalog pg_index pg_index_indrelid_index 15 22 22
pg_stat_all_indexes DATAセクションに表示される情報は次のとおりです。
 
DATA from pg_statio_all_indexes
 
SCHEMA RELATION INDEX IDX BLKS READ IDX BLKS HIT
------------------------------------------------------------------------------------------------------------------
public pgbench_accounts pgbench_accounts_pkey 0 49913
pg_catalog pg_attribute pg_attribute_relid_attnum_index 0 395
sys edb$stat_all_indexes edb$stat_idx_pk 1 382
sys edb$statio_all_indexes edb$statio_idx_pk 1 382
sys edb$statio_all_tables edb$statio_tab_pk 2 262
sys edb$stat_all_tables edb$stat_tab_pk 0 259
sys edb$session_wait_history session_waits_hist_pk 0 251
pg_catalog pg_proc pg_proc_oid_index 0 142
pg_catalog pg_class pg_class_oid_index 0 123
pg_catalog pg_class pg_class_relname_nsp_index 0 63
pg_statio_all_indexes DATAセクションに表示される情報は次のとおりです。
 
System Wait Information
 
WAIT NAME COUNT WAIT TIME % WAIT
---------------------------------------------------------------------------
wal flush 8359 1.357593 30.62
wal write 8358 1.349153 30.43
wal file sync 8358 1.286437 29.02
query plan 33439 0.439324 9.91
db file extend 54 0.000585 0.01
db file read 31 0.000307 0.01
other lwlock acquire 0 0.000000 0.00
ProcArrayLock 0 0.000000 0.00
CLogControlLock 0 0.000000 0.00
システム待機情報セクションに表示される 情報は次のとおりです。
 
Database Parameters from postgresql.conf
 
PARAMETER SETTING CONTEXT MINVAL MAXVAL
-------------------------------------------------------------------------------------------------------------------------
allow_system_table_mods off postmaster
application_name psql.bin user
archive_command (disabled) sighup
archive_mode off postmaster
archive_timeout 0 sighup 0 1073741823
array_nulls on user
authentication_timeout 60 sighup 1 600
autovacuum on sighup
autovacuum_analyze_scale_factor 0.1 sighup 0 100
autovacuum_analyze_threshold 50 sighup 0 2147483647
autovacuum_freeze_max_age 200000000 postmaster 100000 2000000000
autovacuum_max_workers 3 postmaster 1 262143
autovacuum_multixact_freeze_max_age400000000 postmaster 10000 2000000000
autovacuum_naptime 60 sighup 1 2147483
autovacuum_vacuum_cost_delay 20 sighup -1 100
.
.
.
postgresql.conf Database Parametersセクションに表示される情報は次のとおりです。
4.3.2 stat_db_rpt()
署名は次のとおりです。
stat_db_rpt( beginning_idending_id
パラメーター
beginning_id
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_idは、終了セッション識別子を表す整数値です
次の例は、 stat_db_rpt()関数を示しています。
SELECT * FROM stat_db_rpt(9, 10);
stat_db_rpt
---------------------------------------------------------------------------------------
DATA from pg_stat_database
 
DATABASE NUMBACKENDS XACT COMMIT XACT ROLLBACK BLKS READ BLKS HIT HIT RATIO
-------------------------------------------------------------------------------------
acctg 0 8261 0 117 127985 99.91
(5 rows)
 
レポートのpg_stat_databaseセクションのDATAに 表示される情報は次のとおりです。
4.3.3 stat_tables_rpt()
署名は次のとおりです。
FUNCTION_NAME( beginning_id、ending_id、top_n、範囲
パラメーター
beginning_id
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_idは、終了セッション識別子を表す整数値です
top_n
top_nは返す行の数を表します。
範囲
スコープは、関数が統計を返すテーブルを決定します。 SYSUSERまたはALLを指定します。
SYSは、関数がシステム定義のテーブルに関する情報を返す必要があることを示します。テーブルは、 pg _ cataloginformation _ schema 、またはsysのいずれかのスキーマに格納されている場合、システムテーブルとみなされます
USERは、関数がユーザー定義のテーブルに関する情報を返す必要があることを示します。
ALLは、関数がすべてのテーブルに関する情報を返すように指定します。
stat_tables_rpt()関数は、2部構成のレポートを返します。レポートの最初の部分には次のものが含まれます。
SELECT * FROM stat_tables_rpt(8, 9, 10, 'ALL');
 
stat_tables_rpt
----------------------------------------------------------------------------
DATA from pg_stat_all_tables ordered by seq scan
 
SCHEMA RELATION SEQ SCAN REL TUP READ IDX SCAN IDX TUP READ INS UPD DEL
-----------------------------------------------------------------------------------------------------------------------
public pgbench_branches 8249 82490 0 0 0 8249 0
public pgbench_tellers 8249 824900 0 0 0 8249 0
pg_catalog pg_class 7 3969 92 80 0 0 0
pg_catalog pg_index 5 950 31 38 0 0 0
pg_catalog pg_namespace 4 144 5 4 0 0 0
pg_catalog pg_am 1 1 0 0 0 0 0
pg_catalog pg_authid 1 10 2 2 0 0 0
pg_catalog pg_database 1 6 3 3 0 0 0
sys callback_queue_table 0 0 0 0 0 0 0
sys edb$session_wait_history 0 0 0 0 125 0 0
segスキャンで順序付けられたpg_stat_all_tables DATAに 表示される情報には、次のものが含まれます。
INS
UPD
DEL
レポートの2番目の部分は次のとおりです。
 
DATA from pg_stat_all_tables ordered by rel tup read
 
SCHEMA RELATION SEQ SCAN REL TUP READ IDX SCAN IDX TUP READ INS UPD DEL
-----------------------------------------------------------------------------------------------------------------------
public pgbench_tellers 8249 824900 0 0 0 8249 0
public pgbench_branches 8249 82490 0 0 0 8249 0
pg_catalog pg_class 7 3969 92 80 0 0 0
pg_catalog pg_index 5 950 31 38 0 0 0
pg_catalog pg_namespace 4 144 5 4 0 0 0
pg_catalog pg_authid 1 10 2 2 0 0 0
pg_catalog pg_database 1 6 3 3 0 0 0
pg_catalog pg_am 1 1 0 0 0 0 0
sys callback_queue_table 0 0 0 0 0 0 0
sys edb$session_wait_history 0 0 0 0 125 0 0
(29 rows)
reltup readセクションで注文されたpg_stat_all_tables DATAに 表示される情報には、 次のものが含まれます。
INS
UPD
DEL
4.3.4 statio_tables_rpt()
署名は次のとおりです。
statio_tables_rpt( beginning_id、ending_id、top_n、 範囲
パラメーター
beginning_id
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_idは、終了セッション識別子を表す整数値です
top_n
top_nは返す行の数を表します。
範囲
スコープは、関数が統計を返すテーブルを決定します。 SYSUSERまたはALLを指定します。
SYSは、関数がシステム定義のテーブルに関する情報を返す必要があることを示します。テーブルは、 pg _ cataloginformation _ schema 、またはsysのいずれかのスキーマに格納されている場合、システムテーブルとみなされます
USERは、関数がユーザー定義のテーブルに関する情報を返す必要があることを示します。
ALLは、関数がすべてのテーブルに関する情報を返すように指定します。
statio_tables_rpt()関数が含まれているレポートを返します。
SELECT * FROM statio_tables_rpt(9, 10, 10, 'SYS');
 
statio_tables_rpt
-------------------------------------------------------------------------------------------------------------------
DATA from pg_statio_all_tables
 
SCHEMA RELATION HEAP HEAP IDX IDX TOAST TOAST TIDX TIDX
READ HIT READ HIT READ HIT READ HIT
-----------------------------------------------------------------------------------------------------------------
sys edb$stat_all_indexes 8 18 1 382 0 0 0 0
sys edb$statio_all_index 8 18 1 382 0 0 0 0
sys edb$statio_all_table 5 12 2 262 0 0 0 0
sys edb$stat_all_tables 4 10 0 259 0 0 0 0
sys edb$session_wait_his 2 6 0 251 0 0 0 0
sys edb$session_waits 1 4 0 12 0 0 0 0
sys callback_queue_table 0 0 0 0 0 0 0 0
sys dual 0 0 0 0 0 0 0 0
sys edb$snap 0 1 0 2 0 0 0 0
sys edb$stat_database 0 2 0 7 0 0 0 0
(15 rows)
pg_statio_all_tables データセクションに表示される情報は次のとおりです。
4.3.5 stat_indexes_rpt()
署名は次のとおりです。
stat_indexes_rpt( beginning_idending_id、top_n、scope
パラメーター
beginning_id
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_idは、終了セッション識別子を表す整数値です
top_n
top_nは返す行の数を表します。
範囲
スコープは、関数が統計を返すテーブルを決定します。 SYSUSERまたはALLを指定します。
SYSは、関数がシステム定義のテーブルに関する情報を返す必要があることを示します。テーブルは、 pg _ cataloginformation _ schema 、またはsysのいずれかのスキーマに格納されている場合、システムテーブルとみなされます
USERは、関数がユーザー定義のテーブルに関する情報を返す必要があることを示します。
ALLは、関数がすべてのテーブルに関する情報を返すように指定します。
stat_indexes_rpt()関数が含まれているレポートを返します。
edb=# SELECT * FROM stat_indexes_rpt(9, 10, 10, 'ALL');
stat_indexes_rpt
----------------------------------------------------------------------------------------------------------------------------
DATA from pg_stat_all_indexes
 
SCHEMA RELATION INDEX IDX SCAN IDX TUP READ IDX TUP FETCH
-------------------------------------------------------------------------------------------------------------------------
public pgbench_accounts pgbench_accounts_pkey 16516 16679 16516
pg_catalog pg_attribute pg_attribute_relid_attnum_index 196 402 402
pg_catalog pg_proc pg_proc_oid_index 70 70 70
pg_catalog pg_class pg_class_oid_index 61 61 61
pg_catalog pg_class pg_class_relname_nsp_index 31 19 19
pg_catalog pg_type pg_type_oid_index 22 22 22
pg_catalog edb_policy edb_policy_object_name_index 21 0 0
pg_catalog pg_amop pg_amop_fam_strat_index 16 16 16
pg_catalog pg_index pg_index_indexrelid_index 16 16 16
pg_catalog pg_index pg_index_indrelid_index 15 22 22
(14 rows)
pg_stat_all_indexes DATAセクションに表示される情報は次のとおりです。
4.3.6 statio_indexes_rpt()
署名は次のとおりです。
statio_indexes_rpt( beginning_idending_id、top_n、scope
パラメーター
beginning_id
beginning_idは、開始セッション識別子を表す整数値です。
ending_id
ending_idは、終了セッション識別子を表す整数値です
top_n
top_nは返す行の数を表します。
範囲
スコープは、関数が統計を返すテーブルを決定します。 SYSUSERまたはALLを指定します。
SYSは、関数がシステム定義のテーブルに関する情報を返す必要があることを示します。テーブルは、 pg _ cataloginformation _ schema 、またはsysのいずれかのスキーマに格納されている場合、システムテーブルとみなされます
USERは、関数がユーザー定義のテーブルに関する情報を返す必要があることを示します。
ALLは、関数がすべてのテーブルに関する情報を返すように指定します。
statio_indexes_rpt()関数が含まれているレポートを返します。
edb=# SELECT * FROM statio_indexes_rpt(9, 10, 10, 'SYS');
 
statio_indexes_rpt
--------------------------------------------------------------------------------------------------------------------
DATA from pg_statio_all_indexes
 
SCHEMA RELATION INDEX IDX BLKS READ IDX BLKS HIT
------------------------------------------------------------------------------------------------------------------
pg_catalog pg_attribute pg_attribute_relid_attnum_index 0 395
sys edb$stat_all_indexes edb$stat_idx_pk 1 382
sys edb$statio_all_indexes edb$statio_idx_pk 1 382
sys edb$statio_all_tables edb$statio_tab_pk 2 262
sys edb$stat_all_tables edb$stat_tab_pk 0 259
sys edb$session_wait_history session_waits_hist_pk 0 251
pg_catalog pg_proc pg_proc_oid_index 0 142
pg_catalog pg_class pg_class_oid_index 0 123
pg_catalog pg_class pg_class_relname_nsp_index 0 63
pg_catalog pg_type pg_type_oid_index 0 45
(14 rows)
pg_statio_all_indexesからDATAに 表示される情報には、次の情報が含まれます。
4.4 パフォーマンスチューニングに関する推奨事項
パフォーマンスチューニングのためにDRITAレポートを使用するには、特定のレポートの上位5つのイベントを確認し、不十分な割合でリソースを使用するイベントを探します。合理化されたシステムでは、ユーザーI / Oがおそらく最大数の待機を構成します。待機時間は、CPU使用量と合計時間のコンテキストで評価する必要があります。時間の残りがCPU時間によって消費される場合、2時間の合計測定間隔のうち2分を要した場合、イベントは重要ではない可能性があります。応答時間(CPU「仕事」時間または他の「待機」時間)の中で、全体の時間の最も高いパーセンテージを消費するコンポーネントを評価する必要があります。
イベントを評価するときは、
WAL関連の待機は、 wal_buffersの サイズが 小さい ことを示して いる 可能性があります
パフォーマンスレビューには、ハードウェア、オペレーティングシステム、ネットワーク、およびアプリケーションのSQL文を注意深く監視する必要があります。
4.5 イベントの説明
次の表に、DRITAによって表示される基本的な待機イベントを示します。
サーバーは、 CREATE を同時に実行できない短期間のロックを待機しています テーブルスペース または ドロップ TABLESPACE コマンド。
軽量ロックの待機イベントが発生すると、それらもDRITAによって表示されます。 軽量ロックは 、共有メモリ内の特定のデータ構造を保護するために使用されます。
特定の待機イベントは、 軽量のロックトランシェ と呼ばれる、関連する軽量ロックのグループの1つを待機しているサーバープロセスが原因である可能性があります 。個々の軽量ロックトランシェはDRITAでは表示されませんが、その合計は他のlwlock acquireという単一のイベントで表示されます。
DRITAで表示される軽量ロックのリストと説明については、28.2項を参照してくださいで入手可能なPostgreSQLのコアのドキュメントに統計情報 コレクタを
https://www.postgresql.org/docs/11/static/monitoring-stats.html
セクション28.2.2。 統計情報の 表示 、軽量ロックは待機イベント 種類]列には軽量ロックを指定表28-4 _ 待つ イベントの説明に記載されています。
次の例では、軽量ロック ProcArrayLockCLogControlLockWALBufMappingLock 、およびXidGenLockを表示します。
postgres=# select * from sys_rpt(40,70,20);
sys_rpt
----------------------------------------------------------------------------
WAIT NAME COUNT WAIT TIME % WAIT
---------------------------------------------------------------------------
wal flush 56107 44.456494 47.65
db file read 66123 19.543968 20.95
wal write 32886 12.780866 13.70
wal file sync 32933 11.792972 12.64
query plan 223576 4.539186 4.87
db file extend 2339 0.087038 0.09
other lwlock acquire 402 0.066591 0.07
ProcArrayLock 135 0.012942 0.01
CLogControlLock 212 0.010333 0.01
WALBufMappingLock 47 0.006068 0.01
XidGenLock 53 0.005296 0.01
(13 rows)
DRITAには、特定のAdvanced Server製品機能に関連する待機イベントも表示されます。
これらのAdvanced Server機能固有の待機イベントと その他のlwlock取得イベントは、次の表にリストされています。
5 謝辞
PostgreSQLの8.3、8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10、及び11は、PostgreSQL文書に共通するこのガイドの部分のためのベースラインを提供し、ここに認められています。
この EnterpriseDBソフトウェアおよびドキュメンテーションの一部は 、以下の著作物を使用することができ、その使用はここで認められます。
PostgreSQLのドキュメント、データベース管理システム
PostgreSQLはPostgreSQLグローバル開発グループ著作権©1996-2018に基づき、以下のカリフォルニア大学ライセンスの条件に基づいて配布されています。
Postgres95は カリフォルニア大学リージェントの著作権©1994-5。
上記の著作権表示と本項および次の2つの段落がすべてのコピーに記載されていれば、無償で、かつ書面による合意なしに、本ソフトウェアおよびその文書を使用、複製、改変、および配布することが許可されます。
いかなる場合においても、カリフォルニア大学は、カリフォルニア大学が実施していたとしても、ソフトウェアおよびその文書の使用に起因する損害を含む、直接的、間接的、偶発的、派生的、派生的損害に対する賠償責任を負わないものとしますそのような損害の可能性を知らされた。
カリフォルニア州立大学は、商品性および特定目的への適合性の黙示的な保証を含む(ただしこれらに限定されない)いかなる保証も特に断ります。本契約に基づいて提供される本ソフトウェアは、現状のままであり、カリフォルニア州立大学は、保守、サポート、更新、拡張または改変を提供する義務を負いません。