Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

19

积分

0

好友

0

主题
1#
发表于 2012-4-26 17:03:39 | 查看: 5081| 回复: 4
今天在看031的ppt时,看到表空间只读时,有句不是很明白,具体如下:
alter tablespace userdata READ ONLY(read write)
##Causes a checkpoint
##Data available only for read operations --对可用数据只能读操作
##Object can be dropped from tablespace --所属表空间的对象能够被删除
后面2句都好理解,第一句Causes a checkpoint,这句怎么理解?请刘大指点指点。。。谢谢。。。
2#
发表于 2012-4-26 18:15:46
我的理解:
      当你将表空间置为ready only/offline的时候,为了保证数据的一致性和完整性,需要将已经提交的事务的更改写入到datafile中,将未提交的事务回滚。
这个时候产生一个check point 就能完成control file、datafile header和data block之间的SCN同步,数据写入datafile的功能。

复制两句官方文档上的:

The ALTER TABLESPACE...READ ONLY statement waits for the following transactions to either commit or roll back before returning: transactions that have pending or uncommitted changes to the tablespace and that were started before you issued the statement. If a transaction started before the statement remains active, but rolls back to a savepoint, rolling back its changes to the tablespace, then the statement no longer waits for this active transaction.

If you find it is taking a long time for the ALTER TABLESPACE statement to complete, you can identify the transactions that are preventing the read-only state from taking effect. You can then notify the owners of those transactions and decide whether to terminate the transactions, if necessary.

[ 本帖最后由 zhm2815 于 2012-4-26 18:19 编辑 ]

回复 只看该作者 道具 举报

3#
发表于 2012-4-26 21:58:30
1.

alter tablespace  read only   确实会引发 checkpoint  , 但是请注意 该DDL 引发的是 FILE CHECKPOINT 文件检查点而非 FULL CHECKPOINT 完全检查点

什么是FILE CHECKPOINT?

FILE CHECKPOINT 将 针对 一个表空间上所有数据文件 在所有实例(RAC 多实例情况下)中的脏缓存(dirty buffer)被写入到磁盘,  FILE Checkpoint 基于 File Queue

试想一下 当一个 表空间从 read write 模式 下转换到 read only模式, 在read write模式下 该表空间上的 块可能被缓存在 buffer cache中, 且仍是dirty buffer, 若不将这些 dirty buffer有效写入到Disk  可能造成表空间数据的丢失; 对 表空间 转换为 read only 模式 需要 FILE checkpoint 的另一个需求是 read only的表空间在crash 时是不需要 recovery的,所以需要在 read only之前对 data file header打上checkpoint 标记

回复 只看该作者 道具 举报

4#
发表于 2012-4-26 22:05:45
2.

ODM TEST:

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
           1579280
           1579280
           1579280
           1579280
           1579280

SQL> alter system checkpoint;

System altered.

SQL>  select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
           1580325
           1580325
           1580325
           1580325
           1580325

FULL CHECKPOINT 更新了所有datafile header 的 CHECKPOINT_CHANGE#


SQL> alter tablespace users read only;

Tablespace altered.

SQL>  select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
           1580325
           1580325
           1580325
           1580343
           1580325


alter tablespace read only      造成了 FILE CHECKPOINT  , 仅更新 一个 data file header的
CHECKPOINT_CHANGE#

回复 只看该作者 道具 举报

5#
发表于 2012-5-4 11:41:33
非常感谢2位的回复。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 12:47 , Processed in 0.056246 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569