TimesTen內存數據庫-第二章 快速開始

這章將討論怎樣使用SQL語句來創建並管理簡單的緩存集合。也可使用基於瀏覽器的Cache Administrator來創建緩存集合。

安裝TimesTen和Oracle

在能夠創建緩存集合之前,必須安裝TimesTen和Oracle環境。完成以下任務:

1. 在TimesTen主機上安裝Oracle Client。

2. 創建必需的Oracle帳號。

3. 創建一個TimesTen帳號。

4. 創建TimesTen DSN。

在TimesTen主機上安裝Oracle Client

Cache Connect to Oracle特性使用Oracle共享庫來與Oracle數據庫進行通信。可以通過在安裝了TimesTen的機器上安裝Oracle Client來安裝這些庫文件。安裝Oracle 9Client或Oracle Database 10g。Oracle客戶端的版本不必與Oracle服務器端的版本相同。Cache Connect支持下面的Oracle客戶端和服務器端的版本:

• Oracle 10g Release 2 (Oracle 10.2.0.1.0 或之後)

• Oracle 10g Release 1 (Oracle 10.1.0.5.0或之後)

• Oracle 9i Release 2 (Oracle 9.2.0.8.0或之後)

安裝Oracle Client時,選擇Application User Installation Type。不必專門配置一個服務目錄來用於Cache Connect to Oracle,所以可以跳過安裝過程的這一步。

安裝Oracle Client以後,安裝TimesTen。

注意:如果在安裝Oracle Client之前安裝了TimesTen,必須重新啓動操作系統(Windows)或TimesTen(UNIX)。

創建必需的Oracle帳號

在能夠使用Cache Connect to Oracle之前,必須從數據庫管理員處獲得一個Oracle帳號。如果操作者實際擁有數據庫管理權限,則在Oracle服務器上打開命令窗口並啓動SQL*Plus,以系統管理員身份登錄:

sqlplus system/password@Oracle_Service_Name

例如,爲了在由連接串、system1確定的Oracle數據庫上給testuser創建一個新Oracle帳號,操作如下:

sqlplus system/manager@system1

SQL> CREATE USER testuser IDENTIFIED BY 11;

SQL> GRANT connect, resource, create any trigger TO cddbo;

SQL> COMMIT;

SQL> EXIT

爲了與本章餘下的部分討論的一些示例緩存集合操作保持一致,Oracle用戶爲cddbo,口令爲11,並且是system1中的一個Oracle帳號。

在TimesTen上創建一個帳號

作爲實例管理者,使用ttIsql工具來連接到數據存儲TT_tt70_32.。數據存儲實例由TimesTen在安裝時定義,用來使實例管理者能夠執行數據存儲連接管理任務。

然後使用CREATE USER和GRANT語句來創建一個名爲cddbo的用戶,擁有ADMIN和DDL權限:

ttIsql TT_tt70_32.

Command> CREATE USER pgmrnew IDENTIFIED BY 'pgmrnew';

Command> GRANT ADMIN, DDL TO pgmrnew;

注意:此帳號必須與Oracle數據庫帳號和口令相同。

創建TimesTen DSN

在Window系統中,創建一簡單的TimesTen系統數據存儲(System DSN),名稱爲cddboDSN。

關於cddboDSN,設置如下:

• Data Store Path and Name:c:/temp/ cddbods

• Permanent Data Sz (MB):16

• Temporary Data Sz (MB):16

• User ID:pgmrnew(此ID也用作Oracle User ID)

• Oracle ID:orcl

• Oracle Password:pgmrnew

• DatabaseCharacterSet:ZHS16GBK。此數據庫字符集必須與Oracle數據庫字符集相同。爲了得到Oracle數據庫字符集信息,在Oracle數據庫上輸入下列查詢:

SELECT value FROM nls_database_parameters

WHERE parameter='NLS_CHARACTERSET';

對於其餘設置,使用缺省值。

創建READONLY緩存集合

在已經安裝TimesTen和Oracle並進行配置以後,就可以創建緩存集合。

這部分將討論怎樣創建一個簡單READONLY緩存集合,以緩存Oracle數據庫中單一表中的內容。儘管一個緩存集合可以由多個表組成,這裏只緩存一個Oracle表以保持示例的簡單。

圖 2.1 顯示一個緩存一單個Oracle表的READONLY緩存集合。

圖2.1 簡單READONLY緩存集合

clip_image008

第1步:創建一Oracle表

圖 2.2 創建一Oracle表

clip_image010

連接到新帳號並創建一數據表:

sqlplus testuser/mypsswrd@system1

SQL> CREATE TABLE readtab (a NUMBER NOT NULL PRIMARY KEY,

b VARCHAR2(31));

然後插入一些記錄並進行提交:

SQL> INSERT INTO readtab VALUES (1, 'hello');

1 row created.

SQL> INSERT INTO readtab VALUES (2, 'world');

1 row created.

SQL> COMMIT;

Commit completed.

第2步:創建緩存集合

圖 2.3 創建READONLY緩存集合

clip_image012

使用ttIsql工具來連接cddboDSN數據存儲。在命令提示符下,使用ttCacheUidPwdSet程序來傳遞緩存管理用戶ID和口令作爲參數。然後調用ttCacheStart程序來爲數據存儲啓動緩存代理。在這個示例中,緩存管理用戶ID是cddbo,並且口令爲11:

> ttIsql cddboDSN

Command> call ttCacheUidPwdSet('pgmrnew','pgmrnew');

Command> call ttCacheStart;

接下來,使用CREATE CACHE GROUP語句來創建名爲readcache的READONLY緩存集合,用來在TimesTen中緩存Oracle表tsr20_user的內容:

Command> CREATE READONLY CACHE GROUP readcache

> AUTOREFRESH INTERVAL 5 SECONDS

> FROM tsr20_user

>(code char(5) NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL);

第3步:加載緩存集合

加載Oracle表中的內容到緩存集合表中。

Command> LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;

185 cache instances affected.

檢查tsr20_user表的內容:

Command> SELECT * FROM tsr20_user;

< -000, test >

……………………

< 05999, 系統管理員05999 >

185 rows found

使用ttIsql cachegroups命令來檢查READCACHE緩存集合的定義:

Command> cachegroups;

Cache Group TESTUSER.READCACHE:

Cache Group Type: Read Only

Autorefresh: Yes

Autorefresh Mode: Incremental

Autorefresh State: On

Autorefresh Interval: 5 Seconds

Root Table: PGMRNEW.TSR20_USER

Table Type: Read Only

1 cache group found.

第4步:更新Oracle表

圖 2.4 使用Oracle更新自動刷新TimesTen

clip_image014

使用SQL*Plus,插入多行到READTAB並提交事務:

SQL> INSERT INTO readtab VALUES (3, 'Hello');

1 row created.

SQL> INSERT INTO readtab VALUES (4, 'Again');

1 row created.

SQL> COMMIT;

Commit completed.

5秒之後,TimesTen將從Oracle自動刷新緩存數據。在ttIsql中檢查READTAB表的內容:

Command> SELECT * FROM readtab;

< 1, hello >

< 2, world >

< 3, Hello >

< 4, Again >

4 rows found

第5步:刪除緩存集合

在TimesTen窗口中,使用DROP CACHE GROUP語句從TimesTen數據存儲中刪除緩存集合:

Command> DROP CACHE GROUP readcache;

第6步:停止緩存集合

調用ttCacheStop程序停止數據存儲的緩存代理:

Command> call ttCacheStop;

激活SQL passthrough特性

這部分將討論怎樣在DSN中設置PassThrough屬性來命令TimesTen通過SQL定向到Oracle。

圖 2.5 顯示從一個應用將SQL傳遞到Oracle表。緩存表通過自動刷新機制從Oracle接收更新。

圖 2.5 從Cache Group to Oracle傳遞SQL

clip_image016

第1步:創建新的TimesTen DSN

在Window系統中,創建一新的TimesTen系統數據源(System DSN),名稱爲cddboPT,使用與指定給cddboDSN的相同的屬性。另外,設置PassThrough屬性值爲‘2’,以直接傳遞不在緩存集合中的Oracle表的查詢和程序調用到Oracle。

對於cddboPT,設置如下:

• Data Store Path and Name: c:/temp/cgPT2d

• Permanent Data Sz (MB): 16

• Temporary Data Sz (MB): 16

• User ID: pgmrnew (此ID也用作Oracle User ID)

• Oracle ID: orcl

• Oracle Password: pgmrnew

• PassThrough: 2

• DatabaseCharacterSet: ZHS16GBK。此數據庫字符集必須與Oracle數據庫字符集相同。爲了得到Oracle數據庫字符集信息,在Oracle數據庫上輸入下列查詢:

SELECT value FROM nls_database_parameters

WHERE parameter='NLS_CHARACTERSET';

對於其餘設置,使用缺省值。

第2步:創建READONLY緩存集合

圖 2.6 創建READONLY緩相聚集合

clip_image018

在TimesTen窗口中,連接到DSN cddboPT,設置緩存管理用戶ID和口令,啓動緩存代理,並創建READONLY緩存集合:

ttIsql cgPT2

Command> call ttCacheUidPwdSet('pgmrnew','pgmrnew');

Command> call ttCacheStart;

Command> CREATE READONLY CACHE GROUP readcache

> AUTOREFRESH INTERVAL 5 SECONDS

> FROM tsr20_user

> (code char(5) NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL);

第3步:加載緩存集合

加載Oracle表的內容到緩存集合表中。

Command> LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;

4 cache instances affected.

第4步:更新緩存集合表

圖 2.7 更新TimesTen緩存集合表

clip_image020

使用ttIsql,插入一些行到tsr20_user:

Command> INSERT INTO tsr20_user VALUES ('0001','Just','00000', 'dd','0000','1',NULL);

1 row inserted.

Command> INSERT INTO tsr20_user VALUES ('0002',' Passing ','00000', 'dd','0000','1',NULL);

1 row inserted.

Command> INSERT INTO tsr20_user VALUES ('0002',' Through ','00000', 'dd','0000','1',NULL);

1 row inserted.

使用SQL*Plus檢查 check the contents of the readtab table on Oracle:

SQL> SELECT * FROM tsr20_user;

CODE NAME

---------- -------------------------------

-000 test

……………………

05999 系統管理員05999

187 rows selected.

然後使用ttIsql檢查TimesTen中表tsr20_user的內容:

Command> SELECT * FROM tsr20_user;

< -000, test >

……………………

< 05999, 系統管理員05999 >

187 rows found

第5步:刪除緩存集合

使用ttIsql,輸入DROP CACHE GROUP語句來從TimesTen數據存儲中刪除緩存集合:

Command> DROP CACHE GROUP readcache;

第6步:停止緩存代理

調用ttCacheStop程序來停止數據存儲的緩存代理:

Command> call ttCacheStop;

創建緩存集合任務列表

表 2.1 創建緩存集合任務列表

任務序號

任 務

1

確保已經安裝Cache Connect to Oracle。使用ttIsql來驗證:

connect “uid=myuid;pwd=mypwd;OraclePWD=mypwd;passthrough=3”;

SELECT COUNT(*) FROM DUAL;

exit

此查詢應該返回1。如果不是,則檢查以下內容:

• 設置以下環境變更:ORACLE_HOME、LD_LIBRARY_PATH、SHLIB_PATH

• 緩存管理用戶ID和口令,以及Oracle ID

• Oracle服務器的狀態

2

對所有要創建的緩存集合設計緩存集合計劃。可能使用Cache

Administrator。

3

確保有足夠的資源來加載所有的緩存集合。

設置First Connection屬性:

• PermSize – 可以首先創建緩存集合,然後使用ttSize工具來估算PermSize屬性的值。必須估算要使用ttSize工具進行緩存的行數。

• TempSize – 沒有必要的意義。

• DatabaseCharacterSet – 確保它與Oracle數據庫字符集相匹配。

文件系統大小推薦:

• 數據存儲目錄應足夠大以處理兩個檢查點文件。每個檢查點文件的最大值爲20 MB + PermSize

• 日誌目錄應足夠大以處理積累在檢查點之間的日誌文件。注意,如果在自動刷新間隔期間Oracle表中有大量的更新,自動刷新事務可能相當大。 一個對於日誌目錄大小的處理規則是使它等於數據存儲的大小加上3倍的LogFileSize的3倍。

• 臨時目錄應放在快速文件系統中,以提高執行大事務的速度。可以通過設置TMPDIR環境變量(UNIX)或TEMP環境變更(Window)來指定臨時目錄用於自動刷新操作。在設置環境變量之後,重新啓動TimesTen

Daemon(UNIX)或機器(Window)。一個很大自動刷新事務在臨時目錄中要求很大空間。

4

如果緩存集合是自動刷新或異步寫方式,要設置緩存管理用戶ID和口令。緩存管理用戶ID必須是一個Oracle用戶,並且必須有相應的權限。

5

啓動緩存代理。如果計劃使用非日誌模式(參閱第7步),則跳過此步。

6

創建並提交所有的緩存集合。

7

(選項)使用非日誌模式加載緩存集合。

爲了更快執行和降低資源使用,可以在非日誌模式中加載緩存集合。非日誌模式的缺點是:

• 所有到TimesTen數據存儲已存在的連接必須停止。

• 加載操作不能進行復制。

執行下列任務來使用非日誌模式加載緩存集合:

a. 如果正在運行的話,停止緩存代理、複製代理以及TimesTen服務。

b. 斷開所有連接到TimesTen數據存儲的應用。

c. 使用First Connection attributesLogging=0、DurableCommits=0、LockLevel=1屬性連接到數據存儲。.

d. 爲每個集合發送下列SQL語句:LOAD CACHE GROUP

cache_group_name COMMIT EVERY 0 ROWS。

e. 在加載每個緩存集合之後,提交事務併發送一個檢查點。

f. 使用日誌重新將應用連接到TimesTen數據存儲。

g. 啓動緩存代理。

8

如果需要複製,則在緩存集合表上創建TimesTen複製計劃。

9

如果要複製緩存集合表或緩存集合是異步寫(AWT)方式,則啓動複製代理。

注意:當複製代理正在運行時,不能創建或刪除AWT緩存集合。

10

加載緩存集合並提交(如果不執行第7步)。使用LOAD

CACHE GROUP cache_group_name COMMIT EVERY ROWS。對於n的推薦值爲256。


發佈了41 篇原創文章 · 獲贊 16 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章