麻烦相老师帮忙解答一下您的视频教程中的两个问题,谢谢

相老师您好,看了您的2012年版的Oracle视频教程,我真的是有一种醍醐灌顶的感觉,实在是讲的太棒了。
不过可能是因为我水平有限,看了您的教程后还是有两个疑问,想麻烦您帮忙指导一下:
    第一个是关于您在其中一集的视频教程里面说如果一个会话被非正常退出时,在一些环境中会被隐式提交。我在我的虚拟机上实验了一下,确实会被隐式提交。但是这样就有一个问题发生了,如果真的这样的话,在实际生产环境下岂不是会天下大乱?
    如果这个问题仅仅是存在于SQL plus会话中还好一些,可如果是在生产环境下,假设客户端程序的会话因为种种原因被非正常中断了(比如说由于突然网络断线、客户端电脑死机等等诸如此类的缘故)导致客户端刚才执行中的会话的未提交事务给隐式提交了,但是实际上这个会话的事务尚未全部完成,比如说要从A客户转账给B客户1000元,刚执行了从A客户账上减1000的动作,还没有来得及给B客户加上1000,客户端就死机了,oracle这时候会不会像SQL Plus的会话一样把这个未完成的事务给隐式提交呢?但如果不会,Oracle到底会怎么处理呢?虽然按Oracle事务的原子性原则来说是不应该会出现这个问题的,但是从刚才实验的那个SQL Plus的未提交会话异常关闭后给隐式提交了。所以我对于Oracle中事务的原子性原则到底要怎么贯彻执行,有些疑惑。
    第二个疑问就是您在“41_字符集正确设置及相关操作”中说到NSL_LANG中的字符集需要设置成和客户端OS的字符集相同,我看您视频教程里面的环境应该是这样的:Oracle服务器的数据库字符集是zhs16GBK;服务器OS是linux,服务器OS的字符集是UTF-8,而您讲课用的客户端操作系统是win7(字符集是windows-936,因此对应的应该是zhs16GBK)。综合上述情况,我认为用putty终端连接的那个窗口中的NLS_LANG应该设为AMERICAN_AMERICA.UTF8(因为putty实际登录的是服务器端,是在服务器上操作的,也就是说这里的客户端字符集=服务器OS:Linux的字符集,也就是UTF-8),可是为什么您在讲解字符集课程前面和后面的视频课程里面的NLS_LANG都是AMERICAN_AMERICA.zhs16gbk呢?如果说是在SQL developer中如此设置,那没有错,因为他是在win7环境下运行的,但用putty登陆Linux服务器端操作,那样设置就应该是不对的啊?
    您自己也在字符集正确设置那节课里面说了类似这样简单的把客户端字符集和服务器端字符集设置成一样,是一种很隐蔽的错误,所以我看了觉得很疑惑,不知道是不是我理解错误了,麻烦相老师能抽空回答一下我上面的两个问题,非常感谢!
标签: 暂无标签
fjalex

写了 1 篇文章,拥有财富 15,被 2 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P3 | 发表于 2013-10-28 15:25:08
相老师没有空吗?其它高手回答也可以啊,谢了
回复

使用道具

P4 | 发表于 2013-10-30 11:53:42
我也刚刚开始看相老师的视频,还没有看到那里,感觉前面讲存储的部分,真的是太独到了。
回复

使用道具

P4 | 发表于 2013-10-30 21:05:24
我来简单给你解答一下,正常情况下,如果异常退出,比如网络中断,我们遇到的情况一般有可能这个事物一直active,那么是不提交也不回滚,有可能锁表,还有,正常要回滚的。有可能有些客户端工具可以设置,一旦一场退出,就提交
  另外设置nls_lang这个参数一般是要和服务器端字符集设置成一样,你可以测试一下,如果这个参数没有和服务器的字符集一样,那么你导出的数据就会被破坏,有可能出现乱码,甚至导入不成功
回复

使用道具

P3 | 发表于 2013-11-12 09:57:40
谢谢了,
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈