热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

表空间状态-READONLY、READWRITE1.只读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的需要。Oracle不会更新只读表空间爱你的文件,因此这部分文件可以存储于只读介质中,例如CD-ROM或WORMdrives。2.只读表空间并不是为了满足归档

表空间状态-READ ONLY、READ WRITE 1. 只读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的需要。Oracle不会更新只读表空间爱你的文件,因此这部分文件可以存储于只读介质中,例如CD-ROM或WORM drives。 2. 只读表空间并不是为了满足归档

表空间状态-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号数据文件此时不能修改。
推荐阅读
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 【漫画解析】数据已删,存储空间为何未减?揭秘背后真相
    在数据迁移过程中,即使删除了原有数据,存储空间却未必会相应减少。本文通过漫画形式解析了这一现象背后的真相。具体来说,使用 `mysqldump` 命令进行数据导出时,该工具作为 MySQL 的逻辑备份工具,通过连接数据库并查询所需数据,将其转换为 SQL 语句。然而,这种操作并不会立即释放存储空间,因为数据库系统可能保留了已删除数据的碎片信息。文章进一步探讨了如何优化存储管理,以确保数据删除后能够有效回收存储空间。 ... [详细]
  • 如何正确获取Oracle TNS_ADMIN环境变量的值
    如何正确获取Oracle TNS_ADMIN环境变量的值?TNS_ADMIN 是 Oracle 客户端配置中的一个重要环境变量,用于指定网络配置文件(如 tnsnames.ora)的路径。本文将详细介绍如何在不同操作系统中准确获取该变量的值,并提供实用的命令和步骤,帮助用户确保 Oracle 客户端的网络连接配置正确无误。 ... [详细]
  • 如何在Android设备上通过应用程序创建浏览器书签 ... [详细]
  • 本文深入探讨了 DB2 SQL 中多列更新语句的应用与技巧,通过具体示例详细介绍了多列更新的语法和实际操作方法。例如,使用以下语法可以同时更新多个字段:```sqlUPDATE T_TableSET (字段A, 字段B) = (value_a, value_b);```文章还进一步分析了多列更新在性能优化和数据一致性方面的优势,并提供了实用的案例和最佳实践。 ... [详细]
  • 本文深入探讨了 MySQL 中 `ANALYZE TABLE` 和 `SHOW CREATE TABLE` 的语法规则及其应用。`ANALYZE TABLE` 语句用于分析并存储表的关键字分布情况,以优化查询性能。该操作在执行过程中会获取表的读锁,确保数据的一致性。而 `SHOW CREATE TABLE` 则用于显示创建表时的详细语句,包括表结构、索引和存储引擎等信息,有助于数据库管理和维护。通过这些命令,DBA 可以更好地理解和优化数据库性能。 ... [详细]
  • 在数据库设计中,谨慎使用外键至关重要。本文探讨了九个关键原因,包括数据完整性的维护、性能优化、系统复杂性的管理、数据迁移的灵活性以及对外部系统的依赖性控制。通过深入分析这些因素,可以帮助开发人员和架构师做出更明智的设计决策,确保数据库系统的高效与稳定。 ... [详细]
  • InnoDB当前仅支持一次创建一个FULLTEXT索引 ... [详细]
  • MySQL 数据备份与恢复的常见方法及其实践经验总结。物理备份涉及直接复制数据库文件,适用于大规模数据库环境,但无法在异构系统(如 Windows)中恢复。逻辑备份则侧重于导出建表语句和数据插入语句,便于跨平台迁移和部分数据恢复。此外,本文还探讨了增量备份、全量备份以及使用工具如 mysqldump 和 Percona XtraBackup 的具体应用场景和优缺点。 ... [详细]
  • 揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节
    揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节 ... [详细]
  • MySQL 数据变更后如何实现实时同步至 Elasticsearch
    在 MySQL 数据变更后,如何实现与 Elasticsearch 的实时同步是一个常见的需求。本文介绍了通过配置 MySQL 的 Binlog 功能,结合中间件如 Canal 或 Debezium,将数据变更事件实时捕获并同步到 Elasticsearch 中的方法。此外,还探讨了如何处理数据删除操作,确保 Elasticsearch 中的数据与 MySQL 保持一致。文章还简要对比了 VSCode 和 Dev 两种开发环境的优缺点,为开发者提供参考。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 在数据表中,我需要触发一个操作来刷新特定列的数据。例如,对于以下表格:| ID | Name | IsDeleted ||----|-------|-----------|| 1 | test | True || 2 | test2 | False |我希望在点击“更新”按钮时,能够仅刷新选定行的“IsDeleted”列。这将有助于确保数据的实时性和准确性。 ... [详细]
  • 在第二课中,我们将深入探讨Scala的面向对象编程核心概念及其在Spark源码中的应用。首先,通过详细的实战案例,全面解析Scala中的类和对象。作为一门纯面向对象的语言,Scala的类设计和对象使用是理解其面向对象特性的关键。此外,我们还将介绍如何通过阅读Spark源码来进一步巩固对这些概念的理解。这不仅有助于提升编程技能,还能为后续的高级应用开发打下坚实的基础。 ... [详细]
  • 如何使用R语言高效连接并操作MySQL数据库
    如何使用R语言高效连接并操作MySQL数据库 ... [详细]
author-avatar
东添好冷2011_258
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有