TT最典型的應用,就是TT背景連接配接一個oracle資料庫,TT隻保留少量的最需要的資料以提供最快的通路速度,爾背景oracle資料庫則用來保留所 有的資料,在TT需要的時候,可以從oracle裡面自動抽取資料到TT,當然,TT裡面的資料也可以自動同步到oracle,這個功能,是目前其他記憶體 型資料庫暫時無法提供的,或者不可能做到這麼好的,畢竟TT和oracle是同一家公司的産品,當然能夠更好的無縫內建了。
在TT裡面,cache有下面幾種類型
1.read only
資料從oracle 自動重新整理到 TT裡面,TT裡面無法做修改。
典型應用是在TT裡面儲存隻讀的産品資訊,使用者資訊等等,定期從oracle重新整理該資訊
2.異步寫
資料在TT裡面更新,異步傳遞到oracle 。
這種比較适合在TT上面做事務性操作,然後同步到oracle
3.同步寫
資料在TT裡面更新,同步傳遞到oracle 。
這種比較适合在TT上面做事務性操作,然後同步到oracle
4.人工管理的cache
在這種模式下,資料可以同時在TT和oracle裡面更新,自動同步到對方。
這種方式最靈活,但是需要考慮資料沖突的問題,比如同時在oracle和TT上面修改統一條記錄,怎麼處理。
當然TT提供了基于時間戳的處理機制。
同步的原理是在oracle上面更新的資料會通過trigger捕獲記錄下來,然後通過cache agent定期來擷取這些資訊同步到TT。
而TT上的同步則是通過分析TT的記錄檔來獲得做了那些DML操作,然後通過cache agent同步到oracle .
由于我們第一次安裝TT的時候,沒有安裝 cache connect to oracle ,是以還無法實作和oracle的通信,
是以首先我們需要做得就是安裝 cache connect to oracle .
如果在配置cache之前,沒有安裝oracle client,請先安裝好oracle client 。
TT支援如下版本的oracle client
9.2.0.8 or above
10.1.0.5 or above
10.2.0.1 or above
很簡單的操作步驟,還是執行 setup.sh
./setup.sh -installCache ,然後安裝提示,一路next下去,就ok了,詳細資訊請看下面的log
[[email protected] linux86]$ ./setup.sh -installCache
There is 1 TimesTen instance installed locally :
1) tt70 (TimesTen7.0.5.0.0)
NOTE: There is only one instance which can be upgraded.
Instance Name : tt70
Product Installed : TimesTen7.0.5.0.0
Installation Directory : /oracle/timesten/TimesTen/tt70
BitLevel : 32
Component Installed : Client/Server and DataManager
Daemon Port : 17000
Would you like to upgrade this instance? [ yes ]
Extracting Cache Connect to Oracle ...
The following variables have been set in the file :
/oracle/timesten/TimesTen/tt70/bin/ttThunk
ORACLE_HOME=/oracle/product/10.2.0/db_1
LD_LIBRARY_PATH=/oracle/timesten/TimesTen/tt70/lib:/oracle/product/10.2.0/db_1/lib32:/oracle/product/10.2.0/db_1/network/lib32:/oracle/product/10.2.0/db_1/lib:/oracle/product/10.2.0/db_1/network/lib
Would you like to enable the Cache Connect to Oracle Administrator? [ yes ]
What TCP/IP port number would you like Cache Connect to Oracle Administrator to listen on? [ 17004 ]
NOTE: To access the TimesTen Cache Connect to Oracle Administrator
go to the url: http://localhost:17004/cache
Restarting the daemon ...
TimesTen Daemon stopped.
TimesTen Daemon startup OK.
End of TimesTen installation.
然後檢查timesten 使用者的.bash_profile檔案,确認 ORACLE_HOME是否設定為正确的oracle client的安裝目錄,
确認LD_LIBRARY_PATH ,一定要包含
$ORACLE_HOME/lib:$ORACLE_HOME/network/lib
然後在oracle上面建立 使用者,以便TT用來連接配接到oracle
sqlplus '/as sysdba'
create user tt identified by tt;
grant connect,resource to tt;
然後修改我們建立的wzy_tt70 data store的系統級DSN(info/sys.odbc.ini),加上如下資訊
#oracle資料庫使用者名
UID=tt
#oracle資料庫連接配接sid
OracleId=rac1
#oracle資料庫密碼
OraclePwd=tt
修改後的完整DSN如下(注意:DatabaseCharacterSet必須和oracle的一緻):
[wzy_tt70]
Driver=/oracle/timesten/TimesTen/tt70/lib/libtten.so
DataStore=/oracle/timesten/TimesTen/tt70/info/wzy/wzy
DatabaseCharacterSet=WE8ISO8859P1
Authenticate=0
PermSize=64
TempSize=16
UID=tt
OracleId=rac1
OraclePwd=tt
在oracle client端的tnsnames.ora 裡面添加一個名字叫rac1(對應上面定義的OracleId)的别名,如下
RAC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac1)
)
)
在oracle裡面建立一個測試表
sqlplus tt/[email protected]
create table t1(id number(2) primary key);
開始建立cache group ,
ttIsql wzy_tt70
Command>call ttCacheUidPwdSet('tt','tt'); #設定連接配接到oracle的使用者名和密碼
Command>call ttCacheStart; #啟動cache
建立一個read only的文法如下
CREATE READONLY CACHE GROUP readcache AUTOREFRESH INTERVAL 1 SECONDS FROM t1 (id number(2) not null primary key);
注意:from t1後面是跟oracle裡面需要同步的表的名字,一定要有同樣的列和字段類型,而且一定要有pk或者非空的唯一性索引字段
一個隻讀的cache group建立好了,然後從oracle裡面load一次資料,用如下文法:
LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;
然後在oracle裡面insert資料,看看是否能在TT裡面出現。
建立一個同步的cache group文法如下:
CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP update_t1
FROM t1 (id number(2) not null primary key);
其他的都和建立read only的文法一樣。。。
那我們最關心的應該還是建立一個使用者管理的cache group,因為隻有使用者管理的cache group ,才能實作
雙向的資料同步,資料可以在oracle上面修改,也可以在TT上修改,都能及時同步到對方。
建立一個使用者管理的cache group文法如下:
CREATE USERMANAGED CACHE GROUP update_anywhere_t1
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 5 SECONDS
FROM t1(id number(2) primary key,PROPAGATE);
其他的操作和read only一樣,比如建立完成之後,需要第一次load資料 。
其中:MODE INCREMENTAL 說明我們從oracle裡面是用增量的方式同步資料(會在oracle上面自動建立trigger和額外的表來記錄oracle dml的資訊),INTERVAL 5 SECONDS 定義每5S從oracle同步一次資訊, 爾 PROPAGATE 則定義 TT的dml操作需要同步到 oracle 。。。