主コンテンツへ
Oracle® TimesTen Application-Tier Database Cacheユーザーズ・ガイド
リリース18.1
E98634-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

C TimesTenデータベースとOracle Databaseの互換性

次の各項では、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オペレーション・ガイド』のトランザクションの管理に関する説明を参照してください。

APIの互換性

次の項では、TimesTen Cacheとの互換性の問題があるJDBCおよびODBC APIのメソッドを示します。

JDBC APIの互換性

JDBCに適用される互換性の問題は次のとおりです。

  • JDBCデータベース・メタデータ関数はTimesTenメタデータを返します。Oracleメタデータが必要な場合は、Oracle Databaseに直接接続します。

  • 接続属性および文属性のset/getはTimesTen上で実行されます。

  • Oracle java.sql.ResultSetメタデータ(長さ、型、ラベル)はすべて、TimesTenデータ型の長さで返されます。返される列ラベルはTimesTenの列ラベルです。

  • Oracle拡張機能(oracle.sqlおよびoracle.jdbcパッケージ)はサポートされていません。

  • Javaストアド・プロシージャはTimesTenではサポートされていません。

java.sql.Connection

次のConnectionメソッドに互換性の問題はありません。

close()
commit()
createStatement()
prepareCall()
prepareStatement()
rollback()
setAutoCommit()

次のメソッドは、TimesTenでローカルに実行されます。

getCatalog()
getMetaData
get/setTransactionIsolation()
isReadOnly()
isClosed()
nativeSQL()
setCatalog()
setReadOnly()

ノート:

get/setTransactionIsolation()メソッドの制限については、トランザクション・セマンティクスを参照してください。

isClosed()メソッドはTimesTen接続ステータスのみを返します。


java.sql.Statement

次のStatementメソッドに互換性の問題はありません。

addBatch()
clearBatch()
close()
execute()
executeBatch()
executeQuery()
executeUpdate()
getResultSet()
getUpdateCount()
getWarnings()

次のメソッドは、TimesTenでローカルに実行されます。

cancel()
get/setMaxFieldSize()
get/setMaxRows()
get/setQueryTimeout()
getMoreResults()
setEscapeProcessing()
setCursorName()

java.sql.ResultSet

次のResultSetメソッドに互換性の問題はありません。

close()
findColumn(int) and findColumn(string)
getXXX(number) and getXXX(name)
getXXXStream(int) and getXXXStream(string)
getMetaData()

java.sql.PreparedStatement

次のPreparedStatementメソッドに互換性の問題はありません。

addBatch()
close()
execute()
executeUpdate()
executeQuery()
getResultSet()
getUpdateCount()
setXXX()
setXXXStream()

次のメソッドは、TimesTenでローカルに実行されます。

cancel()
get/setMaxFieldSize()
get/setMaxRows()
get/setQueryTimeout()
getMoreResults()
setEscapeProccessing()
setCursorName()

java.sql.CallableStatement

java.sql.Statementおよびjava.sql.PreparedStatementインタフェースの場合と同じ制限が、CallableStatementに適用されます。

  • WRITETHROUGHキャッシュ・グループでは、PassThrough=1の場合、ストアド・プロシージャで非表示になっているかトリガーによって発生した間接DML操作が、Oracleへのキャッシュ接続によって検出されずに渡される可能性があります。

  • READONLYキャッシュ・グループ表から更新、挿入または削除するストアド・プロシージャは、別のトランザクションで非同期的に自動リフレッシュされます。したがって、ストアド・プロシージャが実行されていた同じトランザクション内に変更は表示されず、変更がキャッシュ表に自動リフレッシュされる前に時間がかかる場合があります。

java.sql.ResultSetMetaData

次の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()の各メソッドはサポートされません。

ODBC APIの互換性

表C-1に、ODBC関数の互換性を示します。

表C-1 TimesTen CacheとのODBC関数の互換性

関数名 互換性

SQLBindParameter

TimesTenのデフォルトの動作は、Oracle Databaseの動作と一致します。詳細は、Oracle TimesTen In-Memory Database C開発者ガイドのパラメータのバインドと文の実行を参照してください。

SQLBrowseConnectSQLColumnPrivilegesSQLExtendedFetchSQLMoreResultsSQLSetPosSQLSetScrollOptions、SQLTablePrivileges

サポート対象外

SQLCancel

制限がいくつかあります。特に、SQLCancelはTimesTen Cache管理操作を取り消すことができません。詳細は、Oracle TimesTen In-Memory Database C開発者ガイドのODBC 2.5関数サポートのSQLCancelエントリを参照してください。

SQLGetCursorName

制限がいくつかあります。詳細は、Oracle TimesTen In-Memory Database C開発者ガイドのODBC 2.5関数サポートのSQLGetCursorNameエントリを参照してください。


SQLの互換性

この項では、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マテリアライズド・ビューをキャッシュできます。キャッシュ・グループは、手動でロードおよびフラッシュする必要があります。

Oracle Databaseパーティション表のキャッシュ

TimesTenは表レベルでOracle Databaseパーティション表をキャッシュできますが、個々のパーティションはキャッシュできません。次に、パーティション表に対する処理がキャッシュ・グループにどう影響するかを示します。

  • パーティションを持つ表に対するDDL操作は、データ・ロスがないかぎりキャッシュ・グループに影響しません。たとえば、データのあるパーティションが切り捨てられた場合、AUTOREFRESH処理は対応するキャッシュ対象の表からデータを削除しません。

  • すべてのキャッシュ・グループ操作で、WHERE句は個々のパーティションまたはサブパーティションを参照できません。表の単一パーティションを定義しようとすると、エラーが返されます。

非スキーマ・オブジェクト

TimesTenでは、Oracle Databaseでサポートされているスキーマ・オブジェクトの一部が認識されません。文でこれらのオブジェクトが処理または使用されると、TimesTenは構文エラーを返します。TimesTenは文をOracle Databaseに渡します。サポートされていないオブジェクトは、次のとおりです。


コンテキスト
ディレクトリ
エディション
リストア・ポイント
ロール
ロールバック・セグメント
表領域

Oracle DatabaseとTimesTenの表の相違

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
Oracle Databaseが提供する型
ユーザー定義の型

次の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

ノート:

TimesTen NCHARデータ型およびNVARCHAR2データ型はUTF-16としてエンコードされます。Oracle Database NCHARデータ型およびNVARCHAR2データ型は、UTF-16またはUTF-8としてエンコードされます。

Oracle Database NCHAR列またはNVARCHAR2列をキャッシュするには、Oracle Database NLS_NCHAR_CHARACTERSETエンコーディングがAL32UTF8ではなくAL16UTF16である必要があります。


SQL演算子

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

2つのビット・ベクトル式のビット単位AND演算を実行する場合、TimesTenでは2つの式間にアンパサンド文字(&)が使用され、Oracle Databaseでは2つの式が引数として指定されたBITAND関数が使用されます。

SELECT文

TimesTenでは、Oracle DatabaseでサポートされているSELECT文の次の句がサポートされています。

  • FOR UPDATE

  • ORDER BY(NULLS FIRSTおよびNULLS LASTを含む)

  • GROUP BY(ROLLUPGROUPING_SETSおよびグループ化式リストを含む)

  • 表の別名

  • 列の別名

  • コンストラクタを使用する副問合せのファクタリング句

Oracle Databaseでは、過去のある時点でのデータベースに対する問合せ(昨日の時点での表に対する問合せなど)を行う、フラッシュバック問合せがサポートされています。TimesTenでは、フラッシュバック問合せをサポートしていません。

TimesTenでは、CONNECT BY句がサポートされていません。

SQL副問合せ

TimesTenでは、Oracle Databaseでサポートされている次の副問合せがサポートされています。


IN (副問合せ)
>、<、= ANY (副問合せ)
>、=、< SOME (副問合せ)
EXISTS (副問合せ)
>、=、< (スカラー副問合せ)
DELETE/UPDATEWHERE句内の副問合せ
FROM句内の副問合せ
副問合せのファクタリング句(WITHコンストラクタ)

ノート:

検証不能スカラー副問合せとは、実行時までその単一行結果セット・プロパティを決定できないスカラー副問合せのことです。TimesTenでは、問合せ全体で1つ以下の検証不能スカラー副問合せを許容できますが、この副問合せはOR式には指定できません。

SQL関数

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'\unnnn'(ここでは、nnnnは数値)は、コードnnnnを使用する各国語文字セットの文字として解釈されます。Oracle Databaseでは、N'\unnnn'は、6つのリテラル文字として解釈されます。\uは、エスケープとして処理されません。この違いにより予想外の動作が発生します。たとえば、リテラルを含むWHERE句を使用したキャッシュ・グループのロードは失敗する可能性があります。また、これは、動的ロードに影響を与える可能性もあります。アプリケーションでは、リテラルではなく、UNISTR SQL関数を使用する必要があります。

SQL式

TimesTenでは、Oracle Databaseでサポートされている次の式がサポートされています。


列参照
順序
NULL
()
バインディング・パラメータ
CASE
ROWID疑似列
ROWNUM疑似列

TimesTenおよびOracle Databaseでは、リテラルに関して異なる解釈をします。『Oracle TimesTen In-Memory Database SQLリファレンス』の定数に関する説明のHexadecimalLiteralを参照してください。

INSERT/DELETE/UPDATE/MERGE文

TimesTenでは、Oracle Databaseでサポートされている次のDML文がサポートされています。

  • INSERT INTO ... VALUES

  • INSERT INTO ... SELECT

  • UPDATE WHERE式(副問合せが含まれる場合があります)

  • DELETE WHERE式(副問合せが含まれる場合があります)

TimesTenでは、新しい値が古い値と同じ場合を除き、主キー値の更新はサポートされません。

TimesTenのみのSQLおよび組込みプロシージャ

この項では、Oracle DatabaseではサポートされていないTimesTenのSQL文とSQL関数および組込みプロシージャを示します。PassThrough= 3を設定すると、次の文はOracle Databaseに渡されて実行され、エラーが発生します。

  • すべてのTimesTenキャッシュ・グループのDDLおよびDML文(CREATE CACHE GROUPDROP CACHE GROUPALTER CACHE GROUPLOAD CACHE GROUPUNLOAD CACHE GROUPREFRESH CACHE GROUPおよびFLUSH CACHE GROUPを含む)。

  • すべてのTimesTenレプリケーション管理DDL文(CREATE REPLICATIONDROP REPLICATIONALTER REPLICATIONCREATE ACTIVE STANDBY PAIRALTER 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.
      

PL/SQLコンストラクト

TimesTenでは、Oracle Databaseでサポートされているストアド・プロシージャ・コンストラクト、関数、データ型、パッケージおよびパッケージ本体のサブセットがサポートされています。詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』を参照してください。

Oracle Databaseデータ型とTimesTenデータ型の間のマッピング

TimesTenキャッシュ表の列に対してデータ型を選択する場合は、Oracle Database表の列のデータ型を考慮し、キャッシュ表の列に対して同等または互換性のあるデータ型を選択してください。


ノート:

パススルーを含め、TimeTenのキャッシュはOracle Database ROWIDデータ型をサポートしません。ただし、SQL問合せのSELECTリストで指定されている場合は、ROWIDデータ型をCHAR(18)データ型にキャストできます。

次の例では、ROWIDデータ型をキャストしないときに返されるエラーを示します。次に、この例では、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に示します。

表C-2 キー列で使用可能なデータ型マッピング

Oracle Databaseデータ型 TimesTenデータ型

NUMBER(p,s)

NUMBER(p,s)

ノート: DECIMAL(p,s)またはNUMERIC(p,s)も使用できます。これらはNUMBER(p,s)の別名です。

NUMBER(p,0)

INTEGER

TT_TINYINT

TT_SMALLINT

TT_INTEGER

TT_BIGINT

NUMBER(p,0)

NUMBER

TT_TINYINT

TT_SMALLINT

TT_INTEGER

TT_BIGINT

NUMBER

CHAR(n)

CHAR(n)

VARCHAR2(n)

VARCHAR2(n)

RAW(n)

VARBINARY(n)

DATE

DATE

TIMESTAMP(n)

TIMESTAMP(n)

NCHAR(n)

NCHAR(n)

NVARCHAR2(n)

NVARCHAR2(n)


表C-3に、キャッシュ表のキー以外の列のデータ型マッピングを示します。

表C-3 キー以外の列で使用可能なデータ型マッピング

Oracle Databaseデータ型 TimesTenデータ型

NUMBER(p,s)

NUMBER(p,s)

REAL

FLOAT

BINARY_FLOAT

DOUBLE

BINARY_DOUBLE

NUMBER(p,0)

INTEGER

TT_TINYINT

TT_SMALLINT

TT_INTEGER

TT_BIGINT

NUMBER(p,0)

FLOAT

BINARY_FLOAT

DOUBLE

BINARY_DOUBLE

NUMBER

TT_TINYINT

TT_SMALLINT

TT_INTEGER

TT_BIGINT

NUMBER

REAL

FLOAT

BINARY_FLOAT

DOUBLE

BINARY_DOUBLE

CHAR(n)

CHAR(n)

VARCHAR2(n)

VARCHAR2(n)

RAW(n)

VARBINARY(n)

LONG

VARCHAR2(n)

ここで、nは、VARCHAR2データ型に対して定義された範囲内の任意の有効な値に設定できます。

LONG RAW

VARBINARY(n)

ここで、nは、VARBINARYデータ型に対して定義された範囲内の任意の有効な値に設定できます。

DATE

DATE

TIMESTAMP(0)

TIMESTAMP(n)

TIMESTAMP(n)

FLOAT(n)

ノート: DOUBLEおよびFLOATが含まれ、いずれもFLOAT(126)に相当します。REALも含まれますが、これはFLOAT(63)に相当します。

FLOAT(n)

BINARY_DOUBLE

ノート: FLOAT(126)は、DOUBLEとして宣言できます。FLOAT(63)は、REALとして宣言できます。

BINARY_FLOAT

BINARY_FLOAT

BINARY_DOUBLE

BINARY_DOUBLE

NCHAR(n)

NCHAR(n)

NVARCHAR2(n)

NVARCHAR2(n)

CLOB

VARCHAR2(n)

ここで、1 <= n <= 4 MBです。

BLOB

VARBINARY(n)

ここで、1 <= n <= 4 MBです。

NCLOB

NVARCHAR2(n)

ここで、1 <= n <= 2 MBです。