次の各項では、TimesTenデータベースとOracle Databaseの互換性の問題を示します。リストは完全なものではなく、特に注意が必要な領域を示すものです。
TimesTenデータベースとOracle Database間の次の相違について考慮します。
TimesTenとOracleのデータベース・メタデータは別々に保存されます。詳細は、「APIの互換性」を参照してください。
TimesTenデータベースとOracle Databaseには異なるトランザクションの分離モデルがあります。詳細は、「トランザクション・セマンティクス」を参照してください。
TimesTenデータベースとOracle Databaseには異なる接続および文のプロパティがあります。たとえば、TimesTenでは、カタログ名、スクロール可能なカーソル、更新可能なカーソルはサポートされていません。
順序は、キャッシュされず、TimesTenデータベースと対応するOracle Database間で同期化されません。詳細は、「SQL式」を参照してください。
Oracle Databaseトリガーおよびストアド・プロシージャの副作用は、自動リフレッシュ処理または手動リフレッシュ処理が完了して初めてTimesTenデータベースに反映されます。
TimesTenとOracle Databaseのトランザクション・セマンティクスの相違は、次のとおりです。
Oracle Databaseシリアライズ可能トランザクションは、トランザクションをシリアライズできないため、コミット時に失敗する可能性があります。TimesTenはロックを使用してシリアライズ可能性を実現します。
Oracle Databaseは、マルチバージョン一貫性モデルを使用することによって、文レベルの一貫性およびトランザクション・レベルの一貫性の両方を提供できます。TimesTenは、文レベルの一貫性を提供しません。TimesTenは、シリアライズ可能な分離を使用することによって、トランザクション・レベルの一貫性を提供します。
Oracle Databaseユーザーは、SQLを介して明示的に表をロックできます。このロック機能は、TimesTenではサポートされていません。
Oracle Databaseではセーブポイントがサポートされていますが、TimesTenではサポートされていません。
Oracle Databaseでは、トランザクションを読取り専用または読取り/書込みに設定できます。これはTimesTenではサポートされていません。
TimesTenの分離レベルおよびトランザクション・セマンティクスの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクションの管理に関する説明を参照してください。
次の項では、TimesTen Cacheとの互換性の問題があるJDBCおよびODBC APIのメソッドを示します。
JDBCに適用される互換性の問題は次のとおりです。
JDBCデータベース・メタデータ関数はTimesTenメタデータを返します。Oracleメタデータが必要な場合は、Oracle Databaseに直接接続します。
接続属性および文属性のset/getはTimesTen上で実行されます。
Oracle java.sql.ResultSetメタデータ(長さ、型、ラベル)はすべて、TimesTenデータ型の長さで返されます。返される列ラベルはTimesTenの列ラベルです。
Oracle拡張機能(oracle.sqlおよびoracle.jdbcパッケージ)はサポートされていません。
Javaストアド・プロシージャはTimesTenではサポートされていません。
次のConnectionメソッドに互換性の問題はありません。
close() commit() createStatement() prepareCall() prepareStatement() rollback() setAutoCommit()
次のメソッドは、TimesTenでローカルに実行されます。
getCatalog() getMetaData get/setTransactionIsolation() isReadOnly() isClosed() nativeSQL() setCatalog() setReadOnly()
|
ノート: get/setTransactionIsolation()メソッドの制限については、トランザクション・セマンティクスを参照してください。
|
次のStatementメソッドに互換性の問題はありません。
addBatch() clearBatch() close() execute() executeBatch() executeQuery() executeUpdate() getResultSet() getUpdateCount() getWarnings()
次のメソッドは、TimesTenでローカルに実行されます。
cancel() get/setMaxFieldSize() get/setMaxRows() get/setQueryTimeout() getMoreResults() setEscapeProcessing() setCursorName()
次のResultSetメソッドに互換性の問題はありません。
close() findColumn(int) and findColumn(string) getXXX(number) and getXXX(name) getXXXStream(int) and getXXXStream(string) getMetaData()
次のPreparedStatementメソッドに互換性の問題はありません。
addBatch() close() execute() executeUpdate() executeQuery() getResultSet() getUpdateCount() setXXX() setXXXStream()
次のメソッドは、TimesTenでローカルに実行されます。
cancel() get/setMaxFieldSize() get/setMaxRows() get/setQueryTimeout() getMoreResults() setEscapeProccessing() setCursorName()
java.sql.Statementおよびjava.sql.PreparedStatementインタフェースの場合と同じ制限が、CallableStatementに適用されます。
WRITETHROUGHキャッシュ・グループでは、PassThrough=1の場合、ストアド・プロシージャで非表示になっているかトリガーによって発生した間接DML操作が、Oracleへのキャッシュ接続によって検出されずに渡される可能性があります。
READONLYキャッシュ・グループ表から更新、挿入または削除するストアド・プロシージャは、別のトランザクションで非同期的に自動リフレッシュされます。したがって、ストアド・プロシージャが実行されていた同じトランザクション内に変更は表示されず、変更がキャッシュ表に自動リフレッシュされる前に時間がかかる場合があります。
次のResultSetMetaDataメソッドに互換性の問題はありません。
getColumnCount() getColumnType() getColumnLabel() getColumnName() getTableName() isNullable()
次のメソッドは、TimesTenでローカルに実行されます。
getSchemaName() getCatalogName() getColumnDisplaySize() getColumnType() getColumnTypeName() getPrecision() getScale() isAutoIncrement() isCaseSensitive() isCurrency() isDefinitelyWritable() isReadOnly() isSearchable() isSigned() isWritable()
ストリームに関連する互換性の問題は次のとおりです。
JDBCドライバは、executeQuery()またはnext()メソッドの呼出し時に、データをインメモリー・バッファに完全にフェッチします。getXXXStream()エントリ・ポイントは、このバッファからデータを読み取るストリームを返します。
Oracleでは、最大2GBのlongまたはlong RAWデータがサポートされます。キャッシュされると、TimesTenはLONGデータをVARCHAR2データに変換します。TimesTenはLONG RAWデータをVARBINARYデータに変換します。VARCHAR2およびVARBINARYデータ型はいずれも、最大4,194,304 (222)バイトまで格納できます。
アプリケーションがgetXXXStream()を呼び出さない場合でも、常にLONG/LONG RAWデータがストリームされます。
TimesTenではmark()、markSupported()およびreset()の各メソッドはサポートされません。
表C-1に、ODBC関数の互換性を示します。
表C-1 TimesTen CacheとのODBC関数の互換性
| 関数名 | 互換性 |
|---|---|
|
|
TimesTenのデフォルトの動作は、Oracle Databaseの動作と一致します。詳細は、Oracle TimesTen In-Memory Database C開発者ガイドのパラメータのバインドと文の実行を参照してください。 |
|
|
サポート対象外 |
|
|
制限がいくつかあります。特に、 |
|
|
制限がいくつかあります。詳細は、Oracle TimesTen In-Memory Database C開発者ガイドのODBC 2.5関数サポートの |
この項では、TimesTenとOracle DatabaseのSQL実装を比較します。TimesTenでサポートされていないか、または別のセマンティクスでサポートされているOracle Database SQL機能のリストを提供することが目的です。
TimesTenでは、Oracle Databaseでサポートされているスキーマ・オブジェクトの一部が認識されません。文でこれらのオブジェクトが処理または使用されると、TimesTenは構文エラーを返します。TimesTenは文をOracle Databaseに渡します。サポートされていないオブジェクトは、次のとおりです。
CREATE DATABASE文により作成されたオブジェクトCREATE JAVA文により作成されたオブジェクトTimesTenではビューおよびマテリアライズド・ビューがサポートされていますが、Oracle Databaseビューはキャッシュできません。TimesTenでは、AUTOREFRESHキャッシュ・グループ属性およびPROPAGATEキャッシュ表属性を使用しないユーザー管理キャッシュ・グループに、Oracle Databaseマテリアライズド・ビューをキャッシュできます。キャッシュ・グループは、手動でロードおよびフラッシュする必要があります。
TimesTenは表レベルでOracle Databaseパーティション表をキャッシュできますが、個々のパーティションはキャッシュできません。次に、パーティション表に対する処理がキャッシュ・グループにどう影響するかを示します。
パーティションを持つ表に対するDDL操作は、データ・ロスがないかぎりキャッシュ・グループに影響しません。たとえば、データのあるパーティションが切り捨てられた場合、AUTOREFRESH処理は対応するキャッシュ対象の表からデータを削除しません。
すべてのキャッシュ・グループ操作で、WHERE句は個々のパーティションまたはサブパーティションを参照できません。表の単一パーティションを定義しようとすると、エラーが返されます。
TimesTenでは、Oracle Databaseでサポートされているスキーマ・オブジェクトの一部が認識されません。文でこれらのオブジェクトが処理または使用されると、TimesTenは構文エラーを返します。TimesTenは文をOracle Databaseに渡します。サポートされていないオブジェクトは、次のとおりです。
TimesTenではサポートされていないOracle Database表の機能は、次のとおりです。
ON DELETE SET NULL
チェック制約
外部キー自身が定義されている表を参照する外部キー
次のOracle Databaseデータ型はTimesTenではサポートされていません。
TIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONEINTERVAL YEAR TO MONTHINTERVAL DAY TO SECONDUROWIDBFILE次のTimesTenデータ型はOracle Databaseではサポートされていません。
TT_CHARTT_VARCHARTT_NCHARTT_NVARCHARTT_BINARYTT_VARBINARYTINYINTおよびTT_TINYINTTT_SMALLINTTT_INTEGERTT_BIGINTTT_DECIMALTT_DATETIMEおよびTT_TIMETT_TIMESTAMP
|
ノート: TimesTenNCHARデータ型およびNVARCHAR2データ型はUTF-16としてエンコードされます。Oracle Database NCHARデータ型およびNVARCHAR2データ型は、UTF-16またはUTF-8としてエンコードされます。
Oracle Database |
TimesTenでは、Oracle Databaseでサポートされている次の演算子および条件がサポートされています。
- (単項)+、-、*、/=、<、>、<=、>=、<>、!=||IS NULL, IS NOT NULLLIKE (Oracle DatabaseのLIKE演算子は後続の空白を無視しますが、TimesTenの場合は無視しません)BETWEENINNOT IN (リスト)ANDOR+ (外部結合)ANY, SOMEALL (リスト)EXISTSUNIONMINUSINTERSECTAND演算を実行する場合、TimesTenでは2つの式間にアンパサンド文字(&)が使用され、Oracle Databaseでは2つの式が引数として指定されたBITAND関数が使用されます。TimesTenでは、Oracle DatabaseでサポートされているSELECT文の次の句がサポートされています。
FOR UPDATE
ORDER BY(NULLS FIRSTおよびNULLS LASTを含む)
GROUP BY(ROLLUP、GROUPING_SETSおよびグループ化式リストを含む)
表の別名
列の別名
コンストラクタを使用する副問合せのファクタリング句
Oracle Databaseでは、過去のある時点でのデータベースに対する問合せ(昨日の時点での表に対する問合せなど)を行う、フラッシュバック問合せがサポートされています。TimesTenでは、フラッシュバック問合せをサポートしていません。
TimesTenでは、Oracle Databaseでサポートされている次の副問合せがサポートされています。
IN (副問合せ)>、<、= ANY (副問合せ)>、=、< SOME (副問合せ)EXISTS (副問合せ)>、=、< (スカラー副問合せ)DELETE/UPDATEのWHERE句内の副問合せFROM句内の副問合せWITHコンストラクタ)
|
ノート: 検証不能スカラー副問合せとは、実行時までその単一行結果セット・プロパティを決定できないスカラー副問合せのことです。TimesTenでは、問合せ全体で1つ以下の検証不能スカラー副問合せを許容できますが、この副問合せはOR式には指定できません。 |
TimesTenでは、Oracle Databaseでサポートされている次の関数がサポートされています。
ABSADD_MONTHSASCIISTRAVGCASTCEILCOALESCECONCATCOUNTCHRDECODEDENSE_RANKEMPTY_BLOBEMPTY_CLOBEXTRACTFIRST_VALUEFLOORGREATESTGROUP_IDGROUPINGGROUPING_IDINSTRLAST_VALUELEASTLENGTHLOWERLPADLTRIMMAXMINMODMONTHS_BETWEENNCHRNLS_CHARSETNLS_CHARSET_NAMENLSSORTNULLIFNUMTOYMINTERVALNUMTODSINTERVALNVLPOWERRANKREPLACEROUNDROW_NUMBERRPADRTRIMSIGNSQRTSUBSTRSUMSYS_CONTEXTSYSDATETO_BLOBTO_CLOBTO_CHARTO_DATETO_LOBTO_NCLOBTO_NUMBERTRIMTRUNCUIDUNISTRUPPERUSER次のTimesTen関数はOracle Databaseではサポートされていません。
CURRENT_USERGETDATEORA_SYSDATESESSION_USERSYSTEM_USERTIMESTAMPADDTIMESTAMPDIFFTT_HASHTT_SYSDATETimesTenおよびOracle Databaseでは、リテラルN'\UNNNN'に関して異なる解釈をします。TimesTenでは、N'\unnnn'(ここでは、nnnnは数値)は、コードnnnnを使用する各国語文字セットの文字として解釈されます。Oracle Databaseでは、N'\unnnn'は、6つのリテラル文字として解釈されます。\uは、エスケープとして処理されません。この違いにより予想外の動作が発生します。たとえば、リテラルを含むWHERE句を使用したキャッシュ・グループのロードは失敗する可能性があります。また、これは、動的ロードに影響を与える可能性もあります。アプリケーションでは、リテラルではなく、UNISTR SQL関数を使用する必要があります。
TimesTenでは、Oracle Databaseでサポートされている次の式がサポートされています。
NULL()CASE式ROWID疑似列ROWNUM疑似列TimesTenおよびOracle Databaseでは、リテラルに関して異なる解釈をします。『Oracle TimesTen In-Memory Database SQLリファレンス』の定数に関する説明のHexadecimalLiteralを参照してください。
TimesTenでは、Oracle Databaseでサポートされている次のDML文がサポートされています。
INSERT INTO ... VALUES
INSERT INTO ... SELECT
UPDATE WHERE式(副問合せが含まれる場合があります)
DELETE WHERE式(副問合せが含まれる場合があります)
TimesTenでは、新しい値が古い値と同じ場合を除き、主キー値の更新はサポートされません。
この項では、Oracle DatabaseではサポートされていないTimesTenのSQL文とSQL関数および組込みプロシージャを示します。PassThrough= 3を設定すると、次の文はOracle Databaseに渡されて実行され、エラーが発生します。
すべてのTimesTenキャッシュ・グループのDDLおよびDML文(CREATE CACHE GROUP、DROP CACHE GROUP、ALTER CACHE GROUP、LOAD CACHE GROUP、UNLOAD CACHE GROUP、REFRESH CACHE GROUPおよびFLUSH CACHE GROUPを含む)。
すべてのTimesTenレプリケーション管理DDL文(CREATE REPLICATION、DROP REPLICATION、ALTER REPLICATION、CREATE ACTIVE STANDBY PAIR、ALTER ACTIVE STANDBY PAIRおよびDROP ACTIVE STANDBY PAIRを含む)。
FIRST n句。
ROWS m TO n句。
すべてのTimesTen組込みプロシージャ。『Oracle TimesTen In-Memory Databaseリファレンス』の組込みプロシージャに関する説明を参照してください。
文字およびUnicode文字列に関するTimesTen固有の構文は、PassThrough=3を使用している場合、常にOracle Database構文に変換されるわけではありません。
|
ノート: TimesTenでのUnicode文字列のサポートの詳細は、Oracle TimesTen In-Memory Databaseリファレンスの文字およびUnicode文字列を参照してください。 |
\046を指定すると、TimesTenでは&記号に変換されますが、Oracle Databaseにパススルーされる際にはこの記号に変換されません。\xyz表記法は、Oracle Databaseでサポートされていません。Oracle Databaseに文字を送信するには、その文字の10進値を使用してCHR()関数内で引数として渡します。
TimesTenでは、\uxyzw構文(\ufe4aのように、xyzwにUnicode値を代入)を使用して、文字列内でUnicode値(4桁の16進数)を表すことができます(NCHARおよびNVARCHAR2の場合のみ)。
\uxyzw表記法は、Oracle Databaseでサポートされていません。したがって、Oracle DatabaseにパススルーされるNCHAR列またはNVARCHAR2のUnicode文字列は、u文字を使用せずに、UNISTR()関数内の引数として渡す必要があります。
次の例では、Unicode値'0063'および'0064' (それぞれ文字aおよびb)が挿入されます。PassThrough=3を使用しているため、この文はOracle Databaseで実行されます。したがって、TimesTenで実行された場合と同じように、u文字を指定しません。
Command> INSERT INTO my_tab VALUES (UNISTR(n'\0063\0064')); 1 row inserted.
TimesTenでは、Oracle Databaseでサポートされているストアド・プロシージャ・コンストラクト、関数、データ型、パッケージおよびパッケージ本体のサブセットがサポートされています。詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』を参照してください。
TimesTenキャッシュ表の列に対してデータ型を選択する場合は、Oracle Database表の列のデータ型を考慮し、キャッシュ表の列に対して同等または互換性のあるデータ型を選択してください。
|
ノート: パススルーを含め、TimeTenのキャッシュはOracle DatabaseROWIDデータ型をサポートしません。ただし、SQL問合せのSELECTリストで指定されている場合は、ROWIDデータ型をCHAR(18)データ型にキャストできます。
次の例では、 Command> SET PASSTHROUGH 3; Passthrough command has set autocommit off. Command> SELECT ROWID FROM dual; 5115: Unsupported type mapping for column ROWID The command failed. Command> SELECT CAST (ROWID AS CHAR(18)) FROM DUAL; < AAAAB0AABAAAAEoAAA > 1 row found. |
主キーおよび外部キーの列は、キー以外の列と区別されます。キャッシュ表のキー列で使用可能なデータ型マッピングを表C-2に示します。
| Oracle Databaseデータ型 | TimesTenデータ型 |
|---|---|
|
|
ノート: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表C-3に、キャッシュ表のキー以外の列のデータ型マッピングを示します。
| Oracle Databaseデータ型 | TimesTenデータ型 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ここで、 |
|
|
ここで、 |
|
|
|
|
|
|
|
ノート: |
ノート: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ここで、1 <= |
|
|
ここで、1 <= |
|
|
ここで、1 <= |