?? _docs_ja.utf8.txt
字號:
@advanced_1000_h1
進歩したトピックス
@advanced_1001_a
Result Sets
@advanced_1002_a
大きなオブジェクト
@advanced_1003_a
リンクテーブル
@advanced_1004_a
トランザクション分離
@advanced_1005_a
#Multi-Version Concurrency Control (MVCC)
@advanced_1006_a
クラスタリング / 高可用性
@advanced_1007_a
2フェーズコミット
@advanced_1008_a
互換性
@advanced_1009_a
Windowsサービスとして実行する
@advanced_1010_a
ODBCドライバ
@advanced_1011_a
ACID
@advanced_1012_a
永続性問題
@advanced_1013_a
リカバーツールを使用する
@advanced_1014_a
ファイルロックプロトコル
@advanced_1015_a
SQLインジェクションに対する防御
@advanced_1016_a
#Restricting Class Loading and Usage
@advanced_1017_a
セキュリティプロトコル
@advanced_1018_a
汎用一意識別子 (UUID)
@advanced_1019_a
システムプロパティから読み込まれた設定
@advanced_1020_a
#Setting the Server Bind Address
@advanced_1021_a
用語集とリンク
@advanced_1022_h2
Result Sets
@advanced_1023_h3
行數の制限
@advanced_1024_p
アプリケーションから結果が返される前に、全ての行はデータベースによって読み取られます。 サーバー側のカーソルは現在サポートされていません。もし最初の數行がアプリケーションに読み取られたら、 result setサイズはパフォーマンスを改善するために制限されます。これは、クエリーの LIMIT を使用することで 実現できます (例: SELECT * FROM TEST LIMIT 100)、または Statement.setMaxRows(max) を使用します。
@advanced_1025_h3
大きなResult Set と外部ソート
@advanced_1026_p
1000行以上のresult setのために、結果はディスクにバッファーされます。 もし ORDER BY が使用されていたら、ソートは、外部ソートアルゴリズムを使用して 完了しています。このケースでは、それぞれの行のブロックはクイックソートを使用してソートされ、 ディスクに書き込まれています; データを読み込んでいる時、ブロックは一緒にマージされます。
@advanced_1027_h2
大きなオブジェクト
@advanced_1028_h3
大きなオブジェクトのソートと読み込み
@advanced_1029_p
メモリに収まらないオブジェクトは可能であるなら、 データ型は CLOB (テキストデータ) または BLOB (バイナリーデータ) が使用されるべきです。 これらのデータ型に関して、オブジェクトはストリームを使用して、完全にメモリから読み込まれるというわけではありません。 BLOB を保存するためには、PreparedStatement.setBinaryStream を使用します。 CLOB を使用するためには、PreparedStatement.setCharacterStream を使用します。 BLOB を読み込みためには、ResultSet.getBinaryStream を使用し、CLOB を読み込むために ResultSet.getCharacterStream を使用します。もし クライアント / サーバーモードが使用されていたら、 BLOB と CLOB データはアクセス時に完全にメモリから読み込まれます。このケースでは、メモリによって BLOB と CLOB のサイズは制限されています。
@advanced_1030_h2
リンクテーブル
@advanced_1031_p
このデータベースはリンクテーブルをサポートしています。これは、 現在存在しないテーブルは、ただ他のデータベースへリンクするという意味です。 このようなリンクを作るには、CREATE LINKED TABLE ステートメントを使用します:
@advanced_1032_p
この時、通常の方法でテーブルにアクセスすることが可能です。このテーブルにデータを挿入する時、 制限があります: テーブルに行を挿入、または更新する時、insertステートメントで設定されていないNULLと値は、 両方ともNULLとして挿入されます。目的のテーブルのデフォルト値がNULL以外なら、 望みどおりの効果は得られません。
@advanced_1033_p
各リンクテーブルの新しい接続は開かれます。多くのリンクテーブルが使用されている時、一部データベースにとってこれは問題となり得ます。Oracle XEでは、接続の最大數を増加することができます。Oracle XEは次の値の変更後、再起動する必要があります:
@advanced_1034_h2
トランザクション分離
@advanced_1035_p
このデータベースは次のトランザクション分離レベルをサポートしています:
@advanced_1036_b
Read Committed (コミット済み読み取り)
@advanced_1037_li
これはデフォルトレベルです。
read lockは早急に解除されます。 このレベルを使用する時、高い同時並行性が可能です。
これは多數のデータベースシステムで使用される分離レベルです。
@advanced_1038_li
これを有効にするには、 SQLステートメント 'SET LOCK_MODE 3' を実行します。
@advanced_1039_li
または、;LOCK_MODE=3 をデータベースURLに付け加えます: jdbc:h2:~/test;LOCK_MODE=3
@advanced_1040_b
Serializable (直列化)
@advanced_1041_li
これを有効にするには、 SQLステートメント 'SET LOCK_MODE 1' を実行します。
@advanced_1042_li
または、;LOCK_MODE=1 をデータベースURLに付け加えます: jdbc:h2:~/test;LOCK_MODE=1
@advanced_1043_b
Read Uncommitted (非コミット読み取り)
@advanced_1044_li
このレベルの意味は、トランザクション分離は無効だということです。
@advanced_1045_li
これを有効にするには、SQLステートメント 'SET LOCK_MODE 0' を実行します
@advanced_1046_li
または、;LOCK_MODE=0 をデータベースURLに付け加えます: jdbc:h2:~/test;LOCK_MODE=0
@advanced_1047_p
分離レベル "serializable" を使用している時、ダーティリード、反復不可能読み取り、 ファントムリードを防ぐことができます。
@advanced_1048_b
Dirty Reads (ダーティリード)
@advanced_1049_li
他の接続によるコミットされていない変更を読み取ることができる、という意味です。
@advanced_1050_li
実行可能: read uncommitted (非コミット読み取り)
@advanced_1051_b
Non-Repeatable Reads (反復不可能読み取り)
@advanced_1052_li
ひとつの接続が行を読み取り、 他の接続が行を変更し、コミットすると、最初の接続は同じ行を再読し、新しい結果を取得します。
@advanced_1053_li
実行可能: read uncommitted (非コミット読み取り)、read committed (コミット済み読み取り)
@advanced_1054_b
Phantom Reads (ファントムリード)
@advanced_1055_li
ひとつの接続が條件を使って行の集まりを読み取り、 他の接続がこの條件を壊して行を挿入し、コミットした時、最初の接続は同じ條件を使って再読し、 新しい行を取得します。
@advanced_1056_li
実行可能: read uncommitted (非コミット読み取り)、read committed (コミット済み読み取り)
@advanced_1057_h3
テーブルレベルロック
@advanced_1058_p
#The database allows multiple concurrent connections to the same database. To make sure all connections only see consistent data, table level locking is used by default. This mechanism does not allow high concurrency, but is very fast. Shared locks and exclusive locks are supported. Before reading from a table, the database tries to add a shared lock to the table (this is only possible if there is no exclusive lock on the object by another connection). If the shared lock is added successfully, the table can be read. It is allowed that other connections also have a shared lock on the same object. If a connection wants to write to a table (update or delete a row), an exclusive lock is required. To get the exclusive lock, other connection must not have any locks on the object. After the connection commits, all locks are released. This database keeps all locks in memory.
@advanced_1059_h3
ロックタイムアウト
@advanced_1060_p
もし接続がオブジェクト上でロックを取得できないのであれば、一定時間待機します (ロックタイムアウト)。この時間の間、うまくいけば接続はロックコミットを保有し、 この時、ロックを取得することが可能です。他の接続がロックを解除しないため、 これが不可能であれば、失敗した接続がロックタイムアウト例外を取得します。 それぞれの接続に個別にロックタイムアウトを設定することができます。
@advanced_1061_h2
#Multi-Version Concurrency Control (MVCC)
@advanced_1062_p
#The MVCC feature allows higher concurrency than using (table level or row level) locks. When using MVCC in this database, delete, insert and update operations will only issue a shared lock on the table. Table are still locked exclusively when adding or removing columns, when dropping the table, and when using SELECT ... FOR UPDATE. Connections only 'see' committed data, and own changes. That means, if connection A updates a row but doesn't commit this change yet, connection B will see the old value. Only when the change is committed, the new value is visible by other connections (read committed). If multiple connections concurrently try to update the same row, this database fails fast: a concurrent update exception is thrown.
@advanced_1063_p
#To use the MVCC feature, append MVCC=TRUE to the database URL:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -