求教Oracle内存数据库timesten的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教Oracle内存数据库timesten的使用相关的知识,希望对你有一定的参考价值。

最近在研究oracle+timesten的使用,看了一些文档,对timesten的应用场景,功能,性能等方面有一定的认识,本人也在linux下安装了oracle 11g 和timesten11..我有一些问题想请教一下高人:
1,timesten怎么使用?比如oracle想在linux使用可以用sqlplus命令,也有plsql,toad等图形软件工具操作。但是timesten怎么使用,有没有一些相关的图形软件?最好提供一个操作实例
2,想做一个高数据量运转的一个平台,我有一些想法不知道对不对。oracle是不是可以把数据表同步给timesten,timesten加载到内存里面?有驱动支持可以直接用php和jdbc连接timesten数据库么?可以的话,能给个实例么?不可以的话,那怎么有效的通过oracle有效的利用timesten?
3,求timesten或者oracle+timesten的相关手册
谢谢大家了,我最想要的是实例和操作流程,给我个操作例子吧
________________________________
实例,实例...能给我个实例么??

然后通过如下的程序代码进行访问

import java.sql.*;
import javax.sql.*;
public class Tttest
public static void main(String args[])

//远程连接需要的url,程序和TT不在一台服务器。需要按照上节的方法,提前定义好DSN
String URL = "jdbc:timesten:client:dsn=wzyCS_tt70";
//本地连接需要的url,程序和TT在同一台服务器
//String URL = "jdbc:timesten:direct:dsn=wzy_tt70";

Connection con = null;
try
//加载TT的驱动程序
Class.forName("com.timesten.jdbc.TimesTenDriver");
catch (ClassNotFoundException ex) ex.printStackTrace();

try

//获得连接
con = DriverManager.getConnection(URL);
System.out.println("connected");
//创建jdbc 语句
java.sql.Statement st=con.createStatement();
//执行sql 查询操作
java.sql.ResultSet rs=st.executeQuery("select * from test");
while (rs.next())

//取出结果集
System.out.println(rs.getString("id"));


//关闭连接
con.close();
// Handle any errors
catch (SQLException ex)
ex.printStackTrace();



如果TT工作正常,DSN定义正常,我们就能看到java程序输出 结果了。
除了刚开始的url和driver不一样以外,其他的都是标准的jdbc语法,很简单,也很强大。
参考技术A 在重研所多个项目中都有内存数据库的应用,但重研所应用的内存数据库有多 timesten
个版本,没有统一的版本,目前以FastDb占主流。普遍存在以下问题,访问方式不符合SQL92规范,不支持客户服务器模式,没有完整的API,可靠性不高,和数据库之间的数据互操作困难等等。 近期和Oracle技术工程师作了一次关于TimesTen,Oracle10G,Oracle9i的交流。在交流中,Oracle的工程师比较详细地介绍了Oracle的内存数据库TimesTen.因此在与Oracle技术工程师交流过程中,根据重研所的需求情况特别关注了一下TimesTen. ORACLE和Times Ten公司6月20日在上海宣布,双方已就甲骨文收购Times Ten正式达成最终协议。Times Ten公司是一家私有的实时数据管理软件供应商,主要为电信、网络、证券交易等行业提供基础架构软件,并用这种软件进行事件管理、交易和数据的工作。其在全球的客户包括Amdocs、亚斯贝克通信公司、爱立信、JP摩根、nec、诺基亚、斯普林特、美国航空等。这家公司目前支持的系统包括实时计费系统、股票交易系统、呼叫中心系统、航线运营系统等。ORACLE收购Times Ten标志 Oracle进入内存数据库领域。
编辑本段官方定义
Times Ten官方定义:TimesTen?/Cache (Cache) is a real-time dynamic data caching system. It includes TimesTen‘s in-memory database and data exchange technologies. Together, they enable applications to combine the real-time performance of TimesTen with the large storage capacity of an RDBMS.
编辑本段特点
Times Ten 特点: 符合RDBMS标准的独立内存数据库 timesten
服务 支持SQL92 支持 ODBC & JDBC 高性能 可以作为Oracle数据库的前端Cache,目前不支持其他数据库 支持本地的高速访问和网络访问方式 可靠性高。支持完整日志,支持镜像复制功能。 不是开源代码,需要较高费用 目前不支持存储过程和触发器

如何查看timesten表结构?

1 Oracle的Schema用户
$ sqlplus sysprod as sysdba
CREATE USER oratt IDENTIFIED BY oracle;
GRANT CREATE SESSION, RESOURCE TO oratt;
alter user oratt quota unlimited on users;

2TimesTen端的Schema用户,与Oracle数据库端一致
$ ttisql ttdb
create user oratt identified by timesten;
grant create session, create table to oratt;

2 TimesTen端的Cache管理员
CREATE USER cacheadm IDENTIFIED BY timesten;
GRANT CREATE SESSION, CACHE_MANAGER, CREATE ANY TABLE, DROP ANY TABLE TO, ALTER ANY TABLE,www.cungun.com DELETE ANY TABLE ,SELECT ANY TABLE to cacheadm;

ttisql "uid=oratt;pwd=timesten;dsn=ttdb"
ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb"
测试连接TimesTen页游数据库
[timestenrac2 conf]$ ttisql "uid=oratt;pwd=timesten;dsn=ttdb"

Copyright (c) 1996, 2021, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
connect "uid=oratt;pwd=;dsn=ttdb";
Connection successful: DSN=TTDB;UID=oratt;DataStore=/u01/database/data/ttdb;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8;DRIVER=/home/oracle/tt181/install/lib/libtten.so;LogBufMB=256;LogBufParallelism=8;LogDir=/u01/database/log;PermSize=512;TempSize=64;OracleNetServiceName=prod;
(Default setting AutoCommit=1)
Command> exit
Disconnecting...
Done.
[timestenrac2 conf]$ ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb"
Copyright (c) 1996, 2021, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
connect "uid=cacheadm;pwd=;dsn=ttdb";
Connection successful: DSN=TTDB;UID=cacheadm;DataStore=/u01/database/data/ttdb;DatabaseCharacterSet=AL32UTF8;ConnectiwwwwwwonCharacterSet=AL32UTF8;DRIVER=/home/oracle/tt181/install/lib/libtten.so;LogBufMB=256;LogBufParallelism=8;LogDir=/u01/database/log;PermSize=512;TempSize=64;OracleNetServiceName=prod;
(Default setting AutoCommit=1)
Command>

3 Oracle端的Cache管理员
此管理员用户名为cacheadm, 口令为oracle。该用户名与Timeten端cache管理员相同
先切换到指定目录 ,因为此目录下有需执行的SQL脚本:

cd $TIMESTEN_HOME/install/oraclescripts
sqlplus sysprod as sysdba

执行以下SQL:
CREATE TABLESPACE cachetblsp DATAFILE \'cachetblsp.dbf\' SIZE 100M;

CREATE USER cacheadm IDENTIFIED BY oracle DEFAULT TABLESPACE cachetblsp QUOTA UNLIMITED ON cachetblsp;

grantCacheAdminPrivileges "cacheadm"

4在TimesTen中缓存Oracle Cache管理员的口令
使用timesten cache管理员登录:
这个密码是Cache Agent后台用的,执行如autorefresh这样的操作,就得预先用ttCacheUidPwdSet存起来。
$ ttIsql "DSN=ttdb;UID=cacheadm;PWD=timesten;OraclePWD=oracle" <<<<<这里有两个密码,一个是TT端cacheadm,一个是Oracle数据库端cacheadm
call ttCacheUidPwdSet(\'cacheadm\',\'oracle\'); <<<<存储Oracle数据库端cacheadm的密码

注意:DNS文件中OracleNetServiceName的设置,必须与tnsnames.ora中保持一致,也就是这个到Oracle的自动任务需要使用网络连接,这个配置要一致才能找到
Oracle数据库,前面cacheadm和其密码都存好了,也就可以自动执行一些数据维护任务,比如自动定时刷新数据。

5缓存功能测试
(1)在Oracle库中创建测试表(基表)
$ sqlplus oratt/oracleprod
CREATE TABLE readtab (keyval NUMBER NOT NULL PRIMARY KEY, str VARCHAR2(32));

插入数据:
INSERT INTO readtab VALUES (1, \'Hello\');
COMMIT;

(2)赋权给缓存管理员cacheadm,该用户对表readtab有select对象权限,对writetab有select,insert,update,delete对象权限。

GRANT SELECT ON readtab TO cacheadm;

(3)启动缓存代理
$ ttAdmin -cacheStart ttdb
从ttstatus可以查看当前缓存代理进程,截取ttstatus的部分信息
Type PID Context Connection Name ConnID
Cache Agent 5991 0x0000000001251e10 Marker(140183514806016) 6
Cache Agent 5991 0x00007f7eb00a4ae0 LogSpaceMon(140183516911360) 7
Cache Agent 5991 0x00007f7eb801ec70 Timer 3
Cache Agent 5991 0x00007f7ebc0c8820 Refresher(S,5000) 4
Cache Agent 5991 0x00007f7ebc1fa330 BMReporter(140183512700672) 5
Cache Agent 5991 0x00007f7ec004a1f0 Refresher(S,5000)(140183510595 1
Cache Agent 5991 0x00007f7f0807e9d0 Handler 2

$ ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb;oraclepwd=oracle"
CREATE READONLY CACHE GROUP readcache <<<<<<创建只读缓存组
AUTOREFRESH INTERVAL 5 SECONDS <<<<<<5秒自动刷新一次
FROM oratt.readtab <<<<<<刷新对象oratt.readtab表,这里页定义了该表
(keyval NUMBER NOT NULL PRIMARY KEY, str VARCHAR2(32));

缓存组信息如下:
Command> cachegroup

Cache Group CACHEADM.READCACHE:

Cache Group Type: Read Only
Autorefresh: Yes
Autorefresh Mode: Incremental
Autorefresh State: On
Autorefresh Interval: 5 Seconds
Autorefresh Status: ok
Aging: No aging defined

Root Table: ORATT.READTAB
Table Type: Read Only

(4) 刷新操作,Oracle与TimesTen数据一致:

$ ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb;oraclepwd=oracle"
LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;
Oracle端查询
SQL> select * from oratt.readtab;

KEYVAL STR


2 World
1 Hello
3 Hallo
4 Four
5 Five
6 Six

6 rows selected.

TimesTen端查询
Command> select * from readtab;
< 1, Hello >
< 2, World >
< 3, Hallo >
< 4, Four >
< 5, Five >
< 6, Six >
6 rows found.

目前Oracle数据库端与TimesTen端数据同步,后续当Oracle数据库端表readtab数据变更,则TimesTen端数据自动安装同步。

以上是关于求教Oracle内存数据库timesten的使用的主要内容,如果未能解决你的问题,请参考以下文章

为啥选用Oracle TimesTen In-Memory Database

Ignite内存计算平台与Oracle TimesTen Scaleout对比

oracle数据库哪个表存着host与port

TimesTen与Oracle数据库的兼容性

oracle PL/SQL语句题目求教!

如何查看timesten表结构?