Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33877
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5
  • 用 户 组: 普通用户
  • 注册时间: 2017-09-11 08:57
文章分类
文章存档

2013年(16)

分类: Oracle

2013-04-25 17:20:40

Timesten重建用户,datastore

一、实例背景:

在测试环境中需要在内存库上将bill用户下的所有对象全部删除,然后再从正式环境中将其bill用户下的对象导入测试环境的bill用户下。

二、操作总结(比较白话,没有直接写最终的操作方法,而是记录了所有错误经过)

1、沿袭操作ORACLE数据库的思想,在这种情况下,一般会首先DROPbill用户(drop用户的同时,删除该用户下所有对象),然后重建bill用户,再从正式环境中将其bill用户下的对象导入测试环境的bill用户下。

   操作步骤:

   Command> drop user bill;
15167: Cannot drop a user that is currently connected
1种报错: oracle也有这样的情况,当前有链接,不能drop,停下应用应该就能避免这个错了,停掉进程后,还这么报错的话就不知道是谁连这个库了,直接杀session吧!
Timesten不能向oracle一样,从v$session系统视图里找出要杀的sessionalter system kill session,因为根本就没有v$session这么个视图。
Timesten停掉数据库后session自然就掉了,ttDaemonAdmin –stop,(停之前做个Command>call ttckpt;)然后再起来ttDaemonAdmin –start,不建议这么做,咱们还是有温柔一点的方法的,ttxactadmin dsn 这条命令就能解决,执行下这个命令就知道这就是查出支持那个session的系统PID,查出来kill掉。
经过一番努力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的描述:

Description

Before 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掉。
现在似乎情况已经明朗了,造语句一个一个对象的删吧,这个测试环境该用户的对象不多,大概几百个,不过一个个的drop也很耗时。最后找到另一种方法:我们发现bill用户就是建立在一个叫做master1datastore上的,那么直接destroy掉这个datastore再重新建个datastore,再在上面建用户bill可以么,事实证明是可以的。
先看看datastore是什么吧,官方的解释:
DataStore
The 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的组成:
在文件系统上有2checkpoint文件: dsname.ds0, dsname.ds1
在文件系统上包含若干事务日志文件: dsname.logn ( n0开始,依次累加)
包含3个系统保留的文件: dsname.res0,dsname.res1,dsname.res2操作系统中一块共享内存段。
这段意思话是说datastoreoracle的用户是一个级别的。。。好像逻辑上不太好理解。由此可以推断destroy datastore和在oracledrop user属于一个级别的操作。
1、首先摧毁数据库:在使用的数据库也是不能摧毁的。

$ttDaemonAdmin –stop;ttDaemonAdmin –startttdestroy master1

2、重建datastore,创建datastore需要2个条件,一是得建立数据文件和日志文件的目录,二是编写配置文件:安装目录下找到info/sys.odbc.ini

添加配置:

[master1]

Driver=/ttadm/ttadm1/TimesTen/billmdb/lib/libtten.a

DataStore=/ttadm/ttadm1/billdata/master1

DatabaseCharacterSet=AL32UTF8

Connections=512

ConnectionCharacterSet=ZHS16GBK

PermSize=30720

RecoveryThreads=32

TempSize=2048

Preallocate=1

LogFileSize=1024

AutoCreate=0

CkptFrequency=600

LogBufMB=1024

LogDir=/ttadm/ttadm1/mdblog

WaitForConnect=0

PLSQL=1

PLSQL_TIMEOUT=0

LockWait=2

CkptRate=50

摧毁datastore时不会删除这些配置,只需检查下即可。执行ttisql dsn创建datastore
>ttisql master1
connect "DSN=master1";
  833: Data store /ttadm/ttadm1/billdata/master1 not found
The command failed.
Done.

万恶的错误码,没找到master1这个datastore,来看看这个命令ttisql master1,它在有datastore的时候可以连接,没有的时候会创建,现在很明显这个命令只尝试了连接这个动作,没有进行创建,肯定是哪里有问题的。创建datastore只会和俩个地方有关联,目录和配置文件,目录是死的,不会有问题,查看下配置文件,AutoCreate=0,罪魁祸首就是它了,这个参数在不设定的时候会默认为1,所以大多数材料上看不到它的影子,但是这里设定了,就不可以自动创建datastore了,官方注释:


修改参数AutoCreate=1;重新执行ttisql dsn创建datastore
等了一段时间发现依然没有创建成功,而且磁盘空间越来越小,再次检查配置文件。和数据文件大小相关的参数有:

PermSize=30720

TempSize=2048

修改小些:

PermSize=64

TempSize=64

Destroy掉先前没有完全创建成功的datastore,再次执行ttisql dsn创建datastore

几分钟后,创建成功,关闭数据库,将先前修改过的配置文件改回来,再次启动进入后,创建需要的用户:

创建用户

Command> create user bill identified by bill;

赋给用户管理权限

Command> grant admin to bill;

最后,使用bill用户登录数据库,将正式环境中bill用户下的对象导入。

三、总结

这种重建用户的方法有自己的局限性,在datastore下有多个用户时就不可以用了。就只能查出对象进行drop了(还有没有别的方法,在以后的工作中再挖掘)。

付:查看用户对象的方法:

l  列出表:   tables| alltables [tablename]

l  查看表结构:  desc[sribe] tablename

l  查看索引:   indexes| allindexes [tablename]

l  查看视图:  views | allviews

l  查看序列:  sequences | allsequences

l  查看同义词: synonyms | allsynonyms

l  查看函数:  functions | allfunctions

l  查看存储过程:procedures | allprocedures

l  查看包:   packages | allpackages

 
 
阅读(2081) | 评论(0) | 转发(0) |
0

上一篇:AIX 用户和组管理

下一篇:连接ORACLE

给主人留下些什么吧!~~