社区
基础和管理
帖子详情
Oracle未提交的数据可能写入数据文件?如何去验证
netmin
2010-02-02 10:04:12
Oracle未提交的数据可能写入数据文件?如何去验证这个问题。
...全文
644
19
打赏
收藏
Oracle未提交的数据可能写入数据文件?如何去验证
Oracle未提交的数据可能写入数据文件?如何去验证这个问题。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kirayunfei
2012-01-04
打赏
举报
回复
[Quote=引用 17 楼 huangdh12 的回复:]
引用 13 楼 mars199 的回复:
我试过一个笨方法:写一个update,然后不去commit,这时另一个用户去select得到的结果会是我update之后的结果
这个应该不会吧。。。那还怎么保证数据的正确性。。
[/Quote]
他是说错了, 没有commit的数据都是从undo中取得的, 必然是update之前的值
kywinder
2010-02-07
打赏
举报
回复
[Quote=引用 17 楼 huangdh12 的回复:]
引用 13 楼 mars199 的回复:
我试过一个笨方法:写一个update,然后不去commit,这时另一个用户去select得到的结果会是我update之后的结果
这个应该不会吧。。。那还怎么保证数据的正确性。。
[/Quote]
恩,事务具有隔离性,自己的DML操作在COMMIT之前其他用户是看不到的。我们只看他的头像!真的好像啊。。
huangdh12
2010-02-07
打赏
举报
回复
[Quote=引用 13 楼 mars199 的回复:]
我试过一个笨方法:写一个update,然后不去commit,这时另一个用户去select得到的结果会是我update之后的结果
[/Quote]
这个应该不会吧。。。那还怎么保证数据的正确性。。
kywinder
2010-02-06
打赏
举报
回复
[Quote=引用 13 楼 mars199 的回复:]
我试过一个笨方法:写一个update,然后不去commit,这时另一个用户去select得到的结果会是我update之后的结果
[/Quote]
头像好像松岛枫啊。。哈哈
qiyousyc
2010-02-05
打赏
举报
回复
写就写吧,为什么要验证呢?
而且,确实是写进文件了的呀。
huanyouyu
2010-02-05
打赏
举报
回复
这是数据库隔离级别问题,有四种隔离级别,一般的都默认是第三级别,
比如Oracle,要手动提交的,提交前的话,那些数据时已经写进数据的了,
不过只有第一级别才能看到,所以把数据库查看级别设置成第一级别就可以查看未提交的数据了。
你自己搜下会更清楚
在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同:
◆未授权读取(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。
◆授权读取(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
◆可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。
◆序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。
mars199
2010-02-05
打赏
举报
回复
我试过一个笨方法:写一个update,然后不去commit,这时另一个用户去select得到的结果会是我update之后的结果
badaciacia
2010-02-04
打赏
举报
回复
查看dba_free_space
楼上方法不错
kywinder
2010-02-03
打赏
举报
回复
还有种方法,可以查看DBA_FREE_SPACE;
我实验了下:
SQL> select tablespace_name ,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;
TABLESPACE_NAME SUM(BYTES)/1024/1024
------------------------------ --------------------
UNDOTBS1 18.6875
USERS 4.6875
SYSTEM 8.5625
XXX .9375
SQL> alter user lyn quota unlimited on xxx;
User altered.
SQL> create table lyn.sdf(t int) tablespace xxx;
Table created.
SQL> insert into lyn.sdf select 2010 from dual;
1 row created.
SQL> insert into lyn.sdf select 2010 from dual;
1 row created.
SQL> /
1 row created.
SQL> insert into lyn.sdf select * from lyn.sdf;
3 rows created.
SQL> insert into lyn.sdf select * from lyn.sdf;
6 rows created.
SQL> /
12 rows created.
SQL> /
24 rows created.
SQL> select tablespace_name ,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;
TABLESPACE_NAME SUM(BYTES)/1024/1024
------------------------------ --------------------
UNDOTBS1 18.6875
USERS 4.6875
SYSTEM 8.5625
XXX .875
可以发现,XXX的FREESPACE由0.9375M变为0.875M,而我并未COMMIT;
kywinder
2010-02-03
打赏
举报
回复
数据文件分配下来就是固定大小的,所以想看效果得将数据文件设为自动扩展,初始值小点,然后按照楼楼上的方法多插点数据,看他是否扩展了。
BenChiM888
2010-02-03
打赏
举报
回复
顶楼上,是这么个道理。
vc555
2010-02-02
打赏
举报
回复
[Quote=引用 4 楼 netmin 的回复:]
没有提交的数据是可能写入数据文件的,在oracle官方文档里已有验证。
另外:DBWn进程写入数据文件时是不判断事务是否提交的,比如:检查点发生 或 没有可用的缓存的空间等。
但问题是如何去验证这个问题?
[/Quote]
这个简单阿。你插入大量数据不提交,然后看数据文件是否变大了。
doveli
2010-02-02
打赏
举报
回复
用另外一个用户登录,查询一下,是不是就验证了呢?
yuzhenhuan01
2010-02-02
打赏
举报
回复
这个不好说
不过你rollback的话都会没有的
netmin
2010-02-02
打赏
举报
回复
各位大哥帮个忙
netmin
2010-02-02
打赏
举报
回复
没有提交的数据是可能写入数据文件的,在oracle官方文档里已有验证。
另外:DBWn进程写入数据文件时是不判断事务是否提交的,比如:检查点发生 或 没有可用的缓存的空间等。
但问题是如何去验证这个问题?
sleepzzzzz
2010-02-02
打赏
举报
回复
都给忘了,呵呵,应该提交和未提交的都可能写入数据文件。至于验证,没测试过。
sleepzzzzz
2010-02-02
打赏
举报
回复
好象一般是提交后才写入数据文件的,未提交的数据只是在重做文件里。
suiziguo
2010-02-02
打赏
举报
回复
是的,当时就是这样!
比如当数据高速缓冲区没有多余空间,而ORACLE需要cache新数据库块,则通知dbwr将某些脏数据块写人数据文件。而不管这些脏数据是否提交。
当然,你不用担心,万一你回滚,ORACLE会通过undo数据回滚,清除前面写入数据文件的数据。
如果一个事务还没
提交
,那么它中间产生的
数据
变化会不会在
未
提交
之前
写入
磁盘
如果一个事务还没
提交
,那么它中间产生的
数据
变化会不会在
未
提交
之前
写入
磁盘 1、如果一个事务还没
提交
,那么它中间产生的
数据
变化会不会在
未
提交
之前
写入
磁盘呢? 回答: 会,
写入
不
写入
磁盘和
提交
没
提交
没有关系 ...
如果一个事务还没
提交
,那么它中间产生的
数据
变化会不会在
未
提交
之前
写入
磁盘...
回答:会,
写入
不
写入
磁盘和
提交
没
提交
没有关系commit 不一定会写磁盘哦,要等到dwr进程的时候才会
写入
磁盘吧,但commit一定会写人redo一个事务 commit 并不是把
数据
写到
数据
文件
中,而是写到联机 重做日志文件中 ...
oracle
写入
日志,
oracle
无法
写入
日志文件
Oracle
日志文件错误,是什么原因WINDOWS7和VISTA操作系统在点日志查看器时,会显示“事件日志服务不可用,请
验证
服务是否在运行”,给我的第一感觉是权限不够。但网上说法芸芸: 我马上就去『服务』里尝试启动...
一文搞懂
oracle
事务
提交
以及脏
数据
落盘的原则
重做日志条目在系统全局区域 (SGA) 的重做日志缓冲区中生成。LGWR 按顺序将重做日志条目
写入
重做日志文件。如果
数据
库具有多重做日志,则 LGWR 会将重做日志条目
写入
一组重做日志文件。
flink实时消费kafka中
oracle
的DML
数据
写入
mysql
flink实时消费kafka中
oracle
的DDL
数据
写入
mysql 前言:上篇文章:https://mp.csdn.net/mp_blog/creation/editor/118930336说到了kafka如何实时获取oralce的DDL,下面来说下flink如何消费kafka
数据
并sink到任意
数据
库...
基础和管理
17,382
社区成员
95,118
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章