表空间的状态(二) - read/write
表空间状态-READ ONLY、READ WRITE
1. 仅仅读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的须要。Oracle不会更新仅仅读表空间爱你的文件。因此这部分文件能够存储于仅仅读介质中,比如CD-ROM或WORM drives。
2. 仅仅读表空间并非为了满足归档的要求。
仅仅读表空间不能改动。假设须要改动仅仅读表空间中的记录,则须要先将表空间置为read/write。
更新表空间后,能够重置为仅仅读。
3. 因为仅仅读表空间不能改动,所以仅仅要没有置为read/write,就不须要反复地进行备份。
并且,假设须要恢复数据库时,也不须要恢复仅仅读表空间,原因就是他们未曾改动过。
4. 能从仅仅读表空间中删除对象,比如表或索引。但不能创建或改动对象。
能够运行改动数据字典中文件描写叙述的语句。比如ALTER TABLE ... ADD或ALTER TABLE ... MODIFY,但不能加入不论什么新的描写叙述信息,除非表空间置为read/write。
5. 仅仅读表空间能够导出导入到其它数据库。既然仅仅读表空间不能改动。他们就能存储于CD-ROM或WORM(一次写-多次读)这些设施中。
6. 全部表空间初始创建都是read/write。使用READ ONLY子句能够设置表空间为仅仅读。
前提是必须具有ALTER TABLESPACE或MANAGE TABLESPACE的系统权限。
使用ALTER TABLESPACE ... READ ONLY前。须要满足下面条件:
> 表空间处于online状态。
这是为了确保不会有UNDO信息须要应用到表空间。
注:假设处于offline,则会将UNDO信息存储于SYSTEM表空间,待恢复online时应用这些UNDO信息。
> 不能改动活动的UNDO表空间或SYSTEM表空间。
> 表空间不能处于当前正在进行的online备份中,由于备份结束时会更新表空间全部数据文件的头部信息。
> 为了让从仅仅读表空间读取数据得到更好的性能。能够在置为read-only之前运行一次訪问表空间的表中全部数据块的查询。
一个像SELECT COUNT(*)这样简单的查询,就能够确保在表空间的数据块在接下来的訪问中获得最佳的效率。
由于这样的做法就不须要数据库检查近期常常改动数据块的交易状态。
7. 能够在数据库正处理交易的时候运行ALTER TABLESPACE ... READ ONLY语句。运行语句后,表空间就处于交易仅仅读状态。
不会同意不论什么交易(DML操作)应用于表空间。
假设尝试进行交易操作,那么此操作会被终止和回滚。然而。那些已经做了变更并不再进行进一步改动的交易。就同意运行commit或roll back操作。
假设ALTER TABLESPACE ... READ ONLY语句运行前,一个交易已经运行了。可是回滚到一个保存点,回滚了他对表空间的变更,那么ALTER TABLESPACE ... READ ONLY语句不会等待这个活动的交易。
8. 交易级只读状态只当初始化參数COMPATIBLE是8.1.0或以上值时才干使用。假设參数值小于8.1.0,而且存在活动的交易。ALTER TABLESPACE ... READ ONLY语句会失败。
9. 假设ATLER TABLESPACE语句运行时间太长了,那么就须要找到阻止仅仅读状态生效的那些交易。
例如以下语句能够找出运行ALTER TABLESPACE ... RAED ONLY语句的交易入口和session地址(saddr):
SELECT SQL_TEXT, SADDR
FROM V$SQLAREA,V$SESSION
WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS AND SQL_TEXT LIKE 'alter tablespace%';
SQL_TEXT SADDR
---------------------------------------- --------
alter tablespace tbs1 read only 80034AF0
每一个活动交易的開始SCN会存储于V$TRANSACTION视图中。起始SCN越小,说明这步操作就越早。
潜在地这条语句越可能阻止接下来仅仅读状态的变更。
SELECT SES_ADDR, START_SCNB
FROM V$TRANSACTION
ORDER BY START_SCNB;
SES_ADDR START_SCNB
-------- ----------
800352A0 3621 --> waiting on this txn
80035A50 3623 --> waiting on this txn
80034AF0 3628 --> this is the ALTER TABLESPACE statement
80037910 3629 --> don't care about this txn
能够用例如以下语句找到堵塞交易的用户:
SELECT T.SES_ADDR, S.USERNAME, S.MACHINE
FROM V$SESSION S, V$TRANSACTION T
WHERE T.SES_ADDR = S.SADDR
ORDER BY T.SES_ADDR
SES_ADDR USERNAME MACHINE
-------- -------------------- --------------------
800352A0 DAVIDB DAVIDBLAP --> Contact this user
80035A50 MIKEL LAB61 --> Contact this user
80034AF0 DBA01 STEVEFLAP
80037910 NICKD NICKDLAP
将表空间置为read-only后,建议马上备份。仅仅要表空间一直处于仅仅读状态,那就不须要再次地备份,由于不会有对表空间的更新。
10. 使用LATER TABLESPACE ... READ WRITE语句能够恢复仅仅读表空间,前提是具有ALTER TABLESPACE或MANAGE TABLESPACE权限。
表空间置为read/write的前提条件还须要表空间中的全部数据文件以及表空间自身都处于online状态。能够使用ALTER DATABASE ... DATAFILE ... ONLINE语句将数据文件置为online状态。
V$DATAFILE视图显示了数据文件当前的状态。
将表空间置为可写模式,须要更新控制文件,目的就是为了能够使用数据文件的仅仅读版本号作为恢复的起始点。
11. 在WORM设备中创建一个仅仅读表空间。
(1) 创建一个可写表空间。
创建对象、插入数据。
(2) 将表空间置为read-only仅仅读模式。
(3) 使用操作系统命令将表空间的数据文件拷贝到WORM设备。
(4) 将表空间置为offline状态。
(5) 重命名数据文件以符合复制到WORM设备中的数据文件命名规范。使用ALTER TABLESPACE ... RENAME DATAFILE语句,重命名数据文件的操作会改动控制文件。
(6) 将表空间恢复为online状态。
实验:
1. 设置表空间为read only状态:
SQL> alter tablespace dcsopen_tbs read only;
Tablespace altered.
2. 查看数据文件状态:
SQL> select file#, name, status from v$datafile where file#=11;
FILE# NAME STATUS
----- ------------------------------------------------------- ------------------------
11 /oracle/oradata_petest/petest/dcsopen_tbs02.dbf ONLINE
3. 登录到仅仅读表空间:
SQL> select * from test1;
T1ID T1V
---------- ----------
1 t1
2 t2
3 t3
能够读当中的表。
SQL> insert into test1 values(12, 't12');
insert into test1 values(12, 't12')
*
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 7: '/oracle/oradata_petest/petest/dcsopen_tbs01.dbf'
运行交易操作时提示7号数据文件此时不能改动。
表空间的状态(二) - read/write的更多相关文章
- oracle问题之SYSTEM表空间不足 (二)
杂症二.SYSTEM表空间不足报错 一.杂症: PLSQL登录,报错: ORA-00604: 递归 SQL 层 出现错误 ORA-01653: 表.无法通过(在表空间中)扩展 ORA-02002: ...
- Oracle表空间状态查询、意义及修改方式
查询表空间状态 select tablesapce_name,status from dba_tablespaces; 表空间的状态属性主要有在线(online),离线(offline),只读(rea ...
- oracle表空间不足时的处理方法
由于数据文件路径下的空间不足或表空间不足时,需要更换或扩展或新增表空间时,以下简单介绍下几种处理方式(数据文件/opt/oracle/oradata/testdb.dbf,原大小为100M) 一.扩大 ...
- 【转】Oracle 表空间与数据文件
--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...
- Oracle数据库之创建表空间与用户
Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...
- oracle表空间创建及管理
一.数据文件和数据库逻辑存储结构: 一个表空间包含一个或多个数据文件,一个表空间包含一个或多个段,一个段包含一个或多个区,一个区包含一个或多个连续的数据库块,一个数据库块包含一个或多个操作系统块.段是 ...
- 十四、oracle 数据库管理--管理表空间和数据文件
一.概念表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库数据则是存放在表空间中,表空间由一个或多个数据文件组成. 二.数据库的逻辑结构oracle中逻辑结构包括 ...
- ORACLE - 管理表空间和数据文件
ORACLE表空间是一个逻辑分区,一个数据文件只能属于一个表空间,一个表空间可以拥有多个数据文件. 一般情况下,如果一个实例分配给多个应用使用,需要创建不同的表空间,每个用户使用自己的表空间. 一.表 ...
- oracle 数据库管理--管理表空间和数据文件
一.概念表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库数据则是存放在表空间中,表空间由一个或多个数据文件组成. 二.数据库的逻辑结构oracle中逻辑结构包括 ...
随机推荐
- Qt学习之路(60): 创建shared library
前段时间说了Qt一些类库的使用,今天来换一下口味,来看一下程序设计的问题.今天来说的是关于共享库 shared library. 如果你打开一些 Windows 应用程序的目录,你会发现有很多程序的 ...
- Qt国际化相关类(以前没见过codec->toUnicode,QTextCodec,QLocale.toString和QLocale::setDefault,QInputMethod::locale())
QTextCodec QTextCodec为文本编码之间提供转换. Qt用Unicode 来存储,绘制和操作字符串.在很多情况下你可能希望操作不同编码的数据.例如,大部分日本文档是以Shift-JIS ...
- 基于visual Studio2013解决C语言竞赛题之0802图书信息查询
题目 解决代码及点评 /* 功能:有一批图书,每本书有:书名(name),作者(author) , 编号(num),出版日期(date)四个数据, 希望输入后按书名的字母顺序将各书的记录排列好, ...
- hdu4722之简单数位dp
Good Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- BZOJ 1342: [Baltic2007]Sound静音问题( 单调队列 )
一开始写了个RMQ然后就T了... 好吧正解是单调队列, 维护两个单调队列... ----------------------------------------------------------- ...
- 语法糖(Syntactic sugar)
语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物,是他最先发现了Lambda演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添 ...
- (转载)Jvm工作原理学习笔记
一. JVM的生命周期 1. JVM实例相应了一个独立执行的java程序它是进程级别 a) 启动.启动一个Java程序时.一个JVM实例就产生了.不论什么一个拥有publ ...
- POJ 2286 The Rotation Game 迭代搜索深度 + A* == IDA*
感觉这样的算法还是比較局限的吧,反复搜索是一个不好的地方,并且须要高效的估值函数来进行强剪枝,这点比較困难. 迭代搜索深度是一个比較炫酷的搜索方式,只是有点拿时间换空间的感觉. 首先迭代深度比較搓的写 ...
- OpenSSL---堆栈
堆栈是一种先进后出的数据结构.是一种只允许在其一端进行插入或者删除的线性表.允许插入或删除操作的一端为栈顶,另一端称为栈底.对堆栈的插入和删除操作称为入栈和出栈. 1.1 概述 OpenSSL ...
- QTableWidget表格合并若干问题及解决方法
Qt提供 QTableWidget作为表格的类以实现表格的基本功能,表格中所装载的每一个单元格由类QTableWidgetItem提供.这是基于表格实现 Qt提供的一个基础类,若想实现定制表格和单元格 ...