1. 安装
从oracle的网站(http://www.oracle.com/technology/global/cn/software/products/timesten/index.html)下载,timesten的安装文件。
将下载文件解压后,出现linux86文件夹,执行setup.sh,步骤如下
○ 输入安装的数据库实例的名字,默认是tt70
○ 选择你要安装的数据库的类型:1是纯内存数据库,2是oracle的前端缓存型内存数据库。
○ 选择你要安装的客户端和服务端类型:1数据库和客户端,2只安装数据库,3只安装客户端
○ 选择你的安装目录 如:/opt/tt70
○ 创建文件夹并解压安装
○ 选择你数据实例文件的存储目录 如:/var/timesten/tt70
○ 该数据库实例的监听端口默认为 17000
○ 设置该实例access control
Access Control 提供了一个对TimesTen的一个初级的权限保护功能,它只是对谁能通过正常的途径(比如ttisql、JDBC及ODBC)访问到相应的Data Store做了初级的限制;但并不是说,它对在操作系统级别上对Data Store的文件 以及 Log 文件的访问做除了安全保障。比如 root 用户,即使它不是TimesTen的用户,但root用户可以做他想做的任何事情,比如删除Data Store文件等。所以安装的时候一定要注意,一般建议设置为 yes,Yes时才允许TimesTen创建新的用户
如果在不更改监听端口的情况下,你可以在安装的时候除了access control选项
2. linux内核参数:
i. share memory:timesten需要使用共享内存,你可以通过以下命令在不启动的情况下更改该值。
/sbin/sysctl -w kernel.shmmax=2147483648
可以通过以下两种命令来查看更新后共享内存的值
/sbin/sysctl -a
或者
cat /proc/sys/kernel/shmmax
ii. kernel.sem: timesten的一个数据库就是一个timesten的子进程,要想设置 kernel.sem是semaphores的缩写,你可以通过以下命令查看当前值
cat /proc/sys/kernel/sem
查看的默认结果是 250 32000 32 128
这四个值分别是
SEMMSL SEMMNS SEMOPM SEMMNI (对于这个四个值得解释,你可以通过man proc命令查询他们的解释。
如当oracle DB初始化参数文件中PROCESSES参数设置较大时,需要调整SEMAPHORES设置
SEMMSL应该设置为服务器中各个实例中最大的PROCESSES参数+10,例如,当最大的PROCESSES参数为5000时,SEMMSL应设置为5010。
SEMMNS参数应设置为SEMMSL*SEMMNI,接上例SEMMSL为5010,SEMMNS参数应为(5010*128)=641280。
SEMOPM参数应设置与SEMMSL参数相同,接上例此处应设置为5010
你可以通过以下命令在不启动的情况下设置这个值,
echo "5010 641280 5010 128" > /proc/sys/kernel/sem
也可以同通过在/etc/sysctl.conf中增加 kernel.sem = 5010 641280 5010 128的方式修改该值。
3. timesten的服务端配置
安装好后(默认实例文件存储目录/var/timesten/tt70),在/var/timesten目录下的文件sys.odbc.ini中配置datasource。
i. 配置DSN的类型:
你需要现在[ODBC Data Sources]后面声明你要添加的DSN的驱动类型,TimesTen 7.0 Driver为服务端,TimesTen 7.0 Client Driver为client端
ii. 配置服务端DSN:
以下是一个默认的tt70的datasource的配置:
[TT_tt70] //DSN名称
Driver=/opt/TimesTen/tt70/lib/libtten.so //驱动,无需更改
DataStore=/var/TimesTen/tt70/TT_tt70 //数据库文件的存储地址。
DatabaseCharacterSet=UTF8
如果你想添加一个你自己的datasource,你可以在文件中添加类似的一段配置。
以下是timesten的一个配置例子
[MD_TEST] //DSN名称
Driver=/opt/TimesTen/tt70/lib/libtten.so
DataStore=/var/TimesTen/tt70/md_test
DatabaseCharacterSet=UTF8
UID=oracle //登录的用户ID
PWD=Datuu(jiankong) //数据库密码
PermSize=1300 //永久内存区的大小,即DataStore的大小,单位为M
Connections=1500 //最大连接数,要小于内核参数kernel.sem的
你可以参考文章 http://blog.chinaunix.net/u2/64350/showart_504614.html 了解timesten连接的其他属性。
iii. 用户权限
关于timesten的用户权限,在timesten的用户默认使用系统用户,当你配置的DSN没有配置UID和PWD属性时,你需以root用户权限登录,登录后默认的数据库用户即为root用户。如果你像使用其他用户,你需要在linux系统中创建该用户,或者直接在timesten中通过create user 用户名 identified by '密码’ 命令创建用户,并且直接赋予该用户权限,grant all to 用户名。这样你在C/S模式下连接DSN该使该用户的用户名和密码才能登录,登录后便是该用户的表空间
4. timesten的客户端配置
如同timesten的服务端配置一样,你需要在[ODBC Data Sources]声明你的DSN的驱动类型,客户端的驱动为TimesTen 7.0 Client Driver。配置格式如下:
[RunDataCS_tt70] 客户端的DSN名称
TTC_SERVER=192.168.2.15:17200 Server端的ip地址和端口号
TTC_SERVER_DSN=RunData_tt70 要连接的数据库的DSN名称
5. 使用表的LRU规则
timesten表可以使用LRU规则,在某个DSN的datastore的内存到达一定阀值的时候进行自动清理,在创建表的建表语最后加入AGING LRU ON语句或者通过alter语句使表的LRU有效。
timesten的内建存储过程ttAgingLRUConfig(LowUsageThreshHold, HighUsageThreshHold,
AgingCycle)
LowUsageThreshHold 内存的使用率到达该值(百分比),停止清理
HighUsageThreshHold 内存的使用率到达该值时开始清理,清理阀值
AgingCycle 多少时间检查一次阀值
6. timesten的一些基本命令
i. Ttisql 和csttisql
ttisql命令和csttisql命令是分别连接本地DSN和远程DSN的命令。Ttisql DSN名称即可登陆该DSN,如:ttisql RunData_DT_CLIENTUSER
ii. Ttadmin
指定内存加载策略。
ttadmin -ramPolicy always 指定datestore的数据一直在内存中。
iii. Ttdestory
销毁某个datestore,某些连接参数(如:DatabaseCharacterSet,PermSize等)更改需要重建datestore,这样就需要销毁
该datestore,使用命令ttdestory dsn就可以销毁这个datestore。datestore的创建,实在配置了DSN后第一次连接执行时,
由timesten自动创建。
iv. Ttdaemonadmin
启动,关闭,重启 timesten的命令。
你可以查看http://logzgh.itpub.net/post/3185/450050 了解更多的timesten的基本命令。
你也可以通过获取timesten的官方文档,更深入的了解http://www.oracle.com/technology/global/cn/documentation/timesten_doc.html
一、TT的启停
停服务:
1、停止复制与cache 进程;
2、停掉server进程 ;
3、卸载内存(对于RAM为手动管理的)
4、停掉 Daemon
启服务:
与停服务操作相反。
注:操作命令见(二、三)
二、RAM管理
1、设置内存手动策略
ttadmin -ramloadtt_1122ttadmin -ramunload tt_1122
三、复制进程与cache 进程的启停
1、复制进程管理
ttAdmin -repStop tt_1122
Command> call ttrepstop ;
Command> call ttrepstart ;
2、cache 进程管理
Command> call ttCacheStop;Command> call ttCacheStart;
3、Daemon进程管理
ttDaemonAdmin -stop
ttDaemonAdmin -start
4、服务的管理(类似于oracle中的监听)
ttDaemonAdmin -startserver
ttDaemonAdmin -stopserver
性能优化
一、查看事务信息
ttxactadmin tt_1122 (查看一个DSN下的所有事务等待)
ttxactadmin -xact 1.1640 tt_1122 (查看一个具体的事务)
二、事务回滚
ttxactadmin -xactIdRollback <xid> <DSN>
ttXactAdmin -xactIdRollback 8.223901 tt_1122
三、根据SQLid 找语句
可以依据 ttXactAdmin 中的SqlCmdID 找到具体的SQL语句
Command> cmdcache by cmdid xxx;
四、找内存中缓存的SQL语句
我们可以通过以下命令去查看当前内存中执行过的SQL语句。
cmdcache [[by {sqlcmdid | querytext | owner}] <query_substring>
该命令后可以跟三种类型的参数,sqlid ,查询语句,owner
例子:
Command> cmdcache exp ;
< 104919183080, 2048, 0, 1, 0, 1, 5720, TIMESTEN , select count(st.id) from
....
五、执行计划
The syntax for the explain command is as follows:
explain [plan for] {[.] | sqlcmdid |
| !}
例: Command> explain sqlcmdid 104901635296 ;
Query Optimizer Plan:
.....
例2: Command> explain select * from dual ;
六、统计信息收集
语法:
CALL ttOptEstimateStats ( '表或用户', 1, '51 PERCENT' );
可以在服务器上部署以下小脚本,用以自动手机统计信息:
[timesten@memdb01 daily_scripts]$ cat collecte_stats.sh
#!/usr/bin/env bash
# This script is used for collecting statistic
. ~/.bash_profile
ttisql "dsn=tt_order;uid=ord;pwd=ord"
set timing on
call ttOptEstimateStats('',1,'100 PERCENT');
connect "dsn=tt_order;uid=ord2;pwd=ord2";
call ttOptEstimateStats('',1,'100 PERCENT');
EOF
exit
注: 第一个参数为空,表示对用户进行收集,否则是收集表的统计信息。
故障收集与问题诊断
一、查看cg最近十次刷新状态
ttisql "dsn=tt_rpt;uid=cacheuser;pwd=xxx;oraclepwd=xxx"
Command> call ttcacheautorefreshstatsget('user1','testcache');
< 9878968, 2015-02-05 09:38:57.000000, 335808300, 4423, 0, 0, 0, 0, 0, 6100, 0, 78430307, 7329877383, 78339899, 14916250, InProgress, 0, 78958692, 100, 2015-02-05 09:36:37.000000, 0 >
< 9878968, 2015-02-05 09:36:57.000000, 335688290, 4422, 72870, 20759, 1939631, 20759, 67850, 4080, 940, 78430307, 7329877383, 78339899, 14916250, Complete, 20785, 78958692, 100, 2015-02-05 09:36:37.000000, 0 >
< 9878968, 2015-02-05 09:34:57.000000, 335568280, 4421, 78170, 20993, 1972278, 20993, 73350, 3960, 860, 78409548, 7327937752, 78319140, 14843380, Complete, 21273, 78937907, 100, 2015-02-05 09:31:22.000000, 0 >
.....
二、查看TT实例的参数配置情况
ttIsql -connstr "dsn=tt_1122" -e "vertical on; version; select sysdate from dual; call tthostnameget; vertical off; call ttrepstateget; call ttconfiguration; call ttlogholds; monitor; exit;"
三、当cg 数据积压后需收集以下信息(开SR的时候oracle 工程师可能会要求提供这些信息)
1、用cache info.sql 输出oracle端有多少实例连接
拷贝以下路径的 cacheinfo.sql脚本到可登陆sqlplus 路径,并在目标Oracle数据库中执行该脚本。
% cd TimesTen_install_dir/oraclescripts
% sqlplus cacheuser/oracle@xxx
SQL> @cacheInfo
2、 ttCapture 输出信息
e.g. ttCapture
ttCapture -dest "/home/timesten" tt_1122
3、 ttSchema -connstr "dsn="
ttschema -list all tt_mdjk >> schema_1122.txt
4、 ttIsql -connstr "dsn=" -e "vertical on; version; select sysdate from dual; call tthostnameget; vertical off; call ttrepstateget; call ttconfiguration; call ttlogholds; monitor; exit;"
5、 All ttmesg, tterror, ttcwmesg and ttcwerror logs ( default location is TimesTen info directory )
6、All .inval, .assert or .trace files ( find in database directory )
四、其它关键信息的收集
建议收集以下信息,方便故障时问题的诊断。
1、call ttbackupstatus ; (建议每30分钟收集一次)
示例脚本:
[timesten@memdb02 ~]$ cat /sdb2/scripts/ttbackupstatus.sh
#!/usr/bin/env bash
. ~/.bash_profile
ttisql tt_mat
spool /sdb2/scripts/ttbackupstatus_info_mat.txt append
select sysdate from dual ;
call ttbackupstatus ;
EOF
exit;
2、call ttbookmark ; (建议每30分钟收集一次)
示例脚本:
[timesten@memdb02 ~]$ cat /sdb2/scripts/ttbookmark_mat.sh
#!/usr/bin/env bash
. ~/.bash_profile
ttisql tt_mat
spool /sdb2/scripts/ttbookmark_info_mat.txt append
select sysdate from dual ;
call ttbookmark ;
EOF
exit;
3、call ttckpthistory ; (建议每30分钟收集一次)
示例脚本:
[timesten@memdb02 ~]$ cat /sdb2/scripts/ttckpthistory_mat.sh
#!/usr/bin/env bash
. ~/.bash_profile
ttisql tt_mat
spool /sdb2/scripts/ttckpthistory_info_mat.txt append
select sysdate from dual ;
call ttckpthistory ;
EOF
exit;
4、call ttlogholds ; (建议每30分钟收集一次)
示例脚本:
[timesten@memdb02 ~]$ cat /sdb2/scripts/ttlogholds_mat.sh
#!/usr/bin/env bash
. ~/.bash_profile
ttisql tt_mat
spool /sdb2/scripts/ttlogholds_info_mat.txt append
select sysdate from dual ;
call ttlogholds ;
EOF
exit;
5、 sys.monitor 表的信息(建议每分钟收集一次)
示例脚本:
#!/usr/bin/env bash
. ~/.bash_profile
ttisql "dsn=tt_mat"
spool /data/sys_monitor_date/t_monitor_mat.txt append
select sysdate , a.* from sys.monitor a ;
exit
备份与还原
1、表机构的备份
ttschema -list all tt_1122 >> backup_db.txt
2、数据的导出导入
---数据快速备份和恢复
导出数据: ttBulkCp -o mystore mytbl mytbl.dump
导入数据: ttBulkCp -i -e mytbl.err mystore mytbl mytbl.dump
3、实例的备份与还原
增备:
ttbackup -dir /home/timesten/ttbackup -type fileIncrorFull tt_1122
ttbackup -dir /home/timesten/ttbackup -type incrementablStop tt_1122
普通备份:
ttBackup -dir /sdb2/backup_dir/tt_1122_backup -connstr "DSN=tt_1122"
4、恢复
$ ttRestore -dir /home/timesten/ttbackup -connstr "DSN=tt_1122"
Restore started ...
Restore complete
恢复之后建议cachegroup 全部删掉重建。
如果直接恢复报错的话,可以 ttDestroy tt_1122 一下
5、查询 tns的位置 ttModInstall -tns_admin