Oracle SQL使用时注意您的输入
近来遇到一个很麻烦的问题. 使用公司软件查看备份出来的数据。
Oracle版本为9204, 目前已经有相应的备份版本, 使用公司的产品把备份出来的数据打开. 由于整个数据库在2.3T左右, 公司的产品工作起来很是麻烦, 我们已经测试了好久, 上星期已经有一位工程人员测试一星期的, 结果是没打开, 产品到一定的时候就不动没响应了.
我要说的注意SQL输入是, 我们打开的主要步骤为:
SQL>startup mount pfile=dbname.ora
SQL>recover database cancel using backup controlfile
SQL>输入回滚日志
SQL>cancel
SQL>alter databse open resetlogs
由于数据库太大, 产生的日志log文件也很大, 所以做一次"输入回滚日志"回滚的时间很长, 大概在50分钟左右. 假设我们已经知道某个版本回滚到某个日志就可以打开了, 这个时候就可以输入cancel再"alter database open resetlogs"就可以了. 但问题出现的让我们自己也莫名其妙。
我们是通过一个Telnet工具登录到HP Unix上操作的, 这个工具有个问题就是, 很长时间没有对该界面做任何操作, 他将关闭该telnet连接. 我们为了防止telnet断开, 就不时的切换到telnet的窗口下敲一些回车. 假设我们只要回滚到log3.dbf文件就可以打开了, 结果我们输入完cancel后Oracle既然还会接着回滚log4.bdf, 我们想了很长时间感觉Oracle真的不应该这样操作. 但就是找不到为什么.
后来终于发现原来SQL时Oracle就更本没有使用我们输入的cancel数据,而是接受了回车.回车表示Oracle将自动查看log文件,所以将会继续向下查找.为什么没有接受我们输入的cancel呢?不知道大家使用SQL时有没有遇到个这样的情况,当你在等待如:
Select count(*) from table_name;
如果该表数据很大,在100万左右时,这个时间将会有一个等待的时间,如果你感觉很慢就多输入了几个回车,你将会在该查询完成后看到如:SQL>SQL>SQL>这样的东西。原来是Oracle将你输入的数据进行了提前缓存了.怪不得输入cancel也没办法停止,也就是Oracle看到的实际是输入了回车!