表空间的状态(二) – read/write

表空间的状态(二) – 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号数据文件此时不能改动。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116348.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 查看所有java进程命令_查看java线程

    查看所有java进程命令_查看java线程linux查看java进程数[2021-02-1008:01:50]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace(“/(\s|\&nbsp\;| |\xc2\xa0)/”,””,strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教linux查看端口被哪个进程占用的方法:1、使用“lsof-…

    2022年10月26日
  • SpringMvc工作流程图讲解

    SpringMvc工作流程图讲解SpringMvc工作流程图讲解这是博主根据很多书籍自己总结的一个过程,可能会有错误,敬请指出,共同学习

  • NN中常用的距离计算公式:欧式距离、曼哈顿距离、马氏距离、余弦、汉明距离[通俗易懂]

    NN中常用的距离计算公式:欧式距离、曼哈顿距离、马氏距离、余弦、汉明距离[通俗易懂]1、欧氏距离EuclideanDistance:2、曼哈顿距离Manhattan:3、Mahalanobis马氏距离马氏距离的浅显解释,见我的博文:https://blog.csdn.net/weixin_41770169/article/details/80759195马氏距离和欧式距离的对比,见我的博文:https://blog.csdn.net/we…

  • mysql主从复制实现_oracle主从复制

    mysql主从复制实现_oracle主从复制操作系统环境:CentOS5.51.MySQL主从流程图2.MySQL主从说明a.主服务器一定要开启二进制日志文件.b.MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出STARTSLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上S…

  • datagrip2020 mac 激活码_通用破解码

    datagrip2020 mac 激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • java图书销售系统,基于jsp的图书销售管理系统-JavaEE实现图书销售管理系统 – java项目源码…[通俗易懂]

    java图书销售系统,基于jsp的图书销售管理系统-JavaEE实现图书销售管理系统 – java项目源码…[通俗易懂]基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的图书销售管理系统,该项目可用各类java课程设计大作业中,图书销售管理系统的系统架构分为前后台两部分,最终实现在线上进行图书销售管理系统各项功能,实现了诸如用户管理,登录注册,权限管理等功能,并实现对各类图书销售管理系统相关的实体进行管理。该图书销售管理系统为一个采用mvc设计模式进行开发B/S架构项…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号