次の各項では、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 ZONE
TIMESTAMP WITH LOCAL TIME ZONE
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
UROWID
BFILE
次のTimesTenデータ型はOracle Databaseではサポートされていません。
TT_CHAR
TT_VARCHAR
TT_NCHAR
TT_NVARCHAR
TT_BINARY
TT_VARBINARY
TINYINT
およびTT_TINYINT
TT_SMALLINT
TT_INTEGER
TT_BIGINT
TT_DECIMAL
TT_DATE
TIME
およびTT_TIME
TT_TIMESTAMP
ノート: TimesTenNCHAR データ型およびNVARCHAR2 データ型はUTF-16 としてエンコードされます。Oracle Database NCHAR データ型およびNVARCHAR2 データ型は、UTF-16 またはUTF-8 としてエンコードされます。
Oracle Database |
TimesTenでは、Oracle Databaseでサポートされている次の演算子および条件がサポートされています。
-
(単項)+、-、*、/
=、<、>、<=、>=、<>、!=
||
IS NULL
, IS NOT NULL
LIKE
(Oracle DatabaseのLIKE
演算子は後続の空白を無視しますが、TimesTenの場合は無視しません)BETWEEN
IN
NOT IN
(リスト)AND
OR
+
(外部結合)ANY
, SOME
ALL
(リスト)EXISTS
UNION
MINUS
INTERSECT
AND
演算を実行する場合、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でサポートされている次の関数がサポートされています。
ABS
ADD_MONTHS
ASCIISTR
AVG
CAST
CEIL
COALESCE
CONCAT
COUNT
CHR
DECODE
DENSE_RANK
EMPTY_BLOB
EMPTY_CLOB
EXTRACT
FIRST_VALUE
FLOOR
GREATEST
GROUP_ID
GROUPING
GROUPING_ID
INSTR
LAST_VALUE
LEAST
LENGTH
LOWER
LPAD
LTRIM
MAX
MIN
MOD
MONTHS_BETWEEN
NCHR
NLS_CHARSET
NLS_CHARSET_NAME
NLSSORT
NULLIF
NUMTOYMINTERVAL
NUMTODSINTERVAL
NVL
POWER
RANK
REPLACE
ROUND
ROW_NUMBER
RPAD
RTRIM
SIGN
SQRT
SUBSTR
SUM
SYS_CONTEXT
SYSDATE
TO_BLOB
TO_CLOB
TO_CHAR
TO_DATE
TO_LOB
TO_NCLOB
TO_NUMBER
TRIM
TRUNC
UID
UNISTR
UPPER
USER
次のTimesTen関数はOracle Databaseではサポートされていません。
CURRENT_USER
GETDATE
ORA_SYSDATE
SESSION_USER
SYSTEM_USER
TIMESTAMPADD
TIMESTAMPDIFF
TT_HASH
TT_SYSDATE
TimesTenおよびOracle Databaseでは、リテラルN'\UNNNN
'に関して異なる解釈をします。TimesTenでは、N'\u
nnnn
'
(ここでは、nnnn
は数値)は、コードnnnn
を使用する各国語文字セットの文字として解釈されます。Oracle Databaseでは、N'\u
nnnn
'
は、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では、\u
xyzw
構文(\ufe4a
のように、xyzw
にUnicode値を代入)を使用して、文字列内でUnicode値(4桁の16進数)を表すことができます(NCHAR
およびNVARCHAR2
の場合のみ)。
\u
xyzw
表記法は、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 <= |