Timesten重建用户,datastore
- 格式:docx
- 大小:28.85 KB
- 文档页数:4
Timesten重建用户,datastore一、实例背景:在测试环境中需要在内存库上将bill用户下的所有对象全部删除,然后再从正式环境中将其bill用户下的对象导入测试环境的bill用户下。
二、操作总结(比较白话,没有直接写最终的操作方法,而是记录了所有错误经过)1、沿袭操作ORACLE数据库的思想,在这种情况下,一般会首先DROP掉bill用户(drop 用户的同时,删除该用户下所有对象),然后重建bill用户,再从正式环境中将其bill 用户下的对象导入测试环境的bill用户下。
操作步骤:Command> drop user bill;15167: Cannot drop a user that is currently connected第1种报错:很明显,oracle也有这样的情况,当前有链接,不能drop,停下应用应该就能避免这个错了,还这么报错的话就不知道是谁连这个库了,直接杀session吧!是不是要问怎么杀session,我当时也这么问自己的,很自然的就想当然一把,借鉴一下oracle的经验吧,从v$session系统视图里找出要杀的session,alter system kill session。
其实压根不是这么回事,因为根本就没有v$session这么个视图,怎么办呢,timesten肯定不会杀不了session的,最笨的办法就是先把tt库停了,ttDaemonAdmin –stop,(停之前做个Command>call ttckpt;)然后再起来ttDaemonAdmin –start,这样以前的不管什么session也没了;可是这样太粗鲁了,咱们还是有温柔一点的方法的,ttxactadmin dsn 这条命令就能解决啦,是不是很难记,光记个起停就很烦了,其实执行下这个命令就知道这就是查出支持那个session的系统PID,查出来直接kill,既然是要找个pid,那ps –ef 足够了。
OK,经过一番努力session终于杀死了,重新drop下试试吧!Command> drop user bill;15168: Cannot drop a user that owns database objects (TABLE BILL.A)The command failed.第2种报错:看字面意思就是,不能删除有对象的用户,换句话说不就是删用户前要先把它的对象都删了,查看了下Timesten的文档对于drop user的描述:DescriptionBefore you can drop a user:∙The user must exist either internally or externally in the database.∙You must drop objects that the user owns.∙When replication is configured, this statement is replicated.这个描述写了对执行drop user前应该确认的事,第一条是废话,没这个用户肯定没法子drop了;第二条就是上面那个错误的原因了,存在对象的用户不能被drop;第三条看意思是存在复制关系的时候drop用户这条操作也会被复制的,就是备机的这个用户也会被drop 掉,测试环境限制,没能试试,不过相信oracle的文档不会忽悠人的。
现在似乎情况已经明朗了,造语句一个一个对象的删吧,嗯我查了下,对象也就几百个,找出来慢慢删这实在不符合我的懒惰品质,于是借助google和度娘开始找寻别的方法完成这个任务。
终于发现了data store这个东西,bill用户就是建立在一个叫做master1的datastore上的,那么直接destroy掉这个datastore再重新建个datastore,再在上面建用户bill可以么,事实证明是可以的。
先看看datastore是什么吧,官方的解释:DataStoreThe database path name uniquely identifies the physical database. It is the full path name of the database and the file name prefix, for example: C:\data\AdminData. This name is not a file name. The actual database file names have suffixes, such as .ds0 and .log0, for example C:\data\AdminData.ds0 and C:\data\AdminData.log0.这段话就是告诉我们datastore是数据库文件名的前缀,没太多的意义,再来看看一些培训材料上怎么说的:TimesTen中一个data store可以等同于为一个数据库。
一个TimesTen实例可以同时管理多个data store。
一个data store的组成:在文件系统上有2个checkpoint文件: dsname.ds0, dsname.ds1。
在文件系统上包含若干事务日志文件: dsname.logn ( n从0开始,依次累加)包含3个系统保留的文件: dsname.res0,dsname.res1,dsname.res2操作系统中一块共享内存段。
这段意思话是说datastore和oracle的用户是一个级别的。
好像逻辑上不太好理解。
由此可以推断destroy datastore和在oracle上drop user属于一个级别的操作。
1、首先摧毁数据库:在使用的数据库也是不能摧毁的。
$ttDaemonAdmin –stop;ttDaemonAdmin –start;ttdestroy master12、重建datastore,创建datastore需要2个条件,一是得建立数据文件和日志文件的目录,二是编写配置文件:安装目录下找到info/sys.odbc.ini添加配置:[master1]Driver=/ttadm/ttadm1/TimesTen/billmdb/lib/libtten.aDataStore=/ttadm/ttadm1/billdata/master1DatabaseCharacterSet=AL32UTF8Connections=512ConnectionCharacterSet=ZHS16GBKPermSize=30720RecoveryThreads=32TempSize=2048Preallocate=1LogFileSize=1024AutoCreate=0CkptFrequency=600LogBufMB=1024LogDir=/ttadm/ttadm1/mdblogWaitForConnect=0PLSQL=1PLSQL_TIMEOUT=0LockWait=2CkptRate=50摧毁datastore时不会删除这些配置,只需检查下即可。
执行ttisql dsn创建datastore:>ttisql master1connect "DSN=master1";833: Data store /ttadm/ttadm1/billdata/master1 not foundThe command failed.Done.万恶的错误码,没找到master1这个datastore,来看看这个命令ttisql master1,它在有datastore的时候可以连接,没有的时候会创建,现在很明显这个命令只尝试了连接这个动作,没有进行创建,肯定是哪里有问题的。
创建datastore只会和俩个地方有关联,目录和配置文件,目录是死的,不会有问题,查看下配置文件,AutoCreate=0,罪魁祸首就是它了,这个参数在不设定的时候会默认为1,所以大多数材料上看不到它的影子,但是这里设定了,就不可以自动创建datastore了,官方注释:修改参数AutoCreate=1;重新执行ttisql dsn创建datastore:等了一段时间发现依然没有创建成功,而且磁盘空间越来越小,再次检查配置文件。
和数据文件大小相关的参数有:PermSize=30720TempSize=2048修改小些:PermSize=64TempSize=64Destroy掉先前没有完全创建成功的datastore,再次执行ttisql dsn创建datastore:几分钟后,创建成功,关闭数据库,将先前修改过的配置文件改回来,再次启动进入后,创建需要的用户:创建用户Command> create user bill identified by bill;赋给用户管理权限Command> grant admin to bill;最后,使用bill用户登录数据库,将正式环境中bill用户下的对象导入。
三、总结这种重建用户的方法有自己的局限性,在datastore下有多个用户时就不可以用了。
就只能查出对象进行drop了(还有没有别的方法,在以后的学习中再挖掘)。
付:查看用户对象的方法:●列出表:tables| alltables [tablename]●查看表结构:desc[sribe] tablename●查看索引:indexes| allindexes [tablename]●查看视图:views | allviews●查看序列:sequences | allsequences●查看同义词:synonyms | allsynonyms●查看函数:functions | allfunctions●查看存储过程:procedures | allprocedures●查看包:packages | allpackages。