一、创建非标准块的表空间

在数据库中可以创建不同于数据库标准块大小的表空间,这个特征可以在两个具有不同块大小的数据库之间传输表空间。在创建非标准块表空间之前,必须保证设置了DB_CACHE_SIZE和至少一个DB_nK_CACHE_SIZE初始化参数,DB_nK_CACHE_SIZE即为非标准块表空间的块大小。

# 查看参数db_16k_cache_size系统默认值,默认值为0,表示未启用。
show parameter db_16k_cache_sizeNAME                  TYPE                 VALUE
--------------------- -------------------- -------------------
db_16k_cache_size     big integer          0# 创建非标准块的缓存区,在测试过程中,即使指定的非标准块大小是4M,系统会自动给出一个最小的32M大小。
alter system set db_16k_cache_size=4M scope=both;
System altered.show parameter db_16k_cache_sizeNAME                 TYPE                 VALUE
-------------------- -------------------- --------------------
db_16k_cache_size    big integer          32M# 添加数据库块为16K的非标准块表空间
create tablespace test_spc datafile '/u01/app/oracle/oradata/orcl/test01.dbf' size 100M uniform size 1M blocksize 16K;

  

二、控制重做记录的产生

对于数据库的一些操作,我们可以控制重做记录的产生,当然,如果没有重做记录,介质恢复将无法进行。然而不生产重做记录可以提高性能,并且对于某些容易恢复的操作来说这种方式可能是适当的。例如这样的语句:create table ... as select 。默认情况下,对表空间内的任何对象上进行操作都会产生重做记录。但是,在创建表空间时,使用nologging子句将阻止重做记录的产生。不管是否指定nologging祖居,在临时段或者临时表空间从来都不会产生重做记录。

如果对表空间设置为不产生重做日志,而表空间上的对象则设置为产生重做日志,例如:create table ... logging ,则对象上的设置覆盖表空间上的设置;如果在表空间上使用force logging(强制产生重做记录),则在表空间级的设置将覆盖在任何对象级进行的设置,即:如果在表空间上设置强制产生重做记录,那么在表空间内的对象上再设置nologging是无效的。

注意:如果force logging模式的表空间传输到另外的数据库,那么force logging模式将会失效。

三、调整表空间的可用性

对于普通用户来说,如果表空间离线(offline),则意味着表空间及其对象将无法访问,但此时数据库内的其他数据时可以访问的;同样的,也可以让表空间在线(online),使用户恢复对其的访问。修改表空间的在线或离线状态时,数据库必须处于打开状态。通过使用alter tablespace ... online/offline语句调整表空间的在线或离线状态。

1、何时需要进行表空间离线的操作

  • 数据库内部分数据不可用时,为了保证用户可以正常访问其他数据,这时可以使相关表空间离线。
  • 执行表空间离线备份时,可以设置相关表空间离线。
  • 在应用程序维护或更新时,可以设置该应用的相关表空间离线。
  • 重命名(修改存储位置)数据文件数,可以设置相关表空间离线。

2、以下表空间无法进行离线操作

  • 系统表空间,system
  • 撤销表空间,undo
  • 临时表空间,temporary

3、表空间离线方式

# for recover 的作用同immediate类似,10g以后不建议使用
alter tablespace <tablespace_name> offine normal  | temporary | immediate | for recover;

下表为表空间离线方式中有关参数的说明:

参数 作用描述
normal 表空间正常离线,在所有表空间的所有数据文件上执行检查点操作,当表空间online,不需要进行介质恢复
temporary 对表空间在线的数据文件进行检查点操作,离线数据文件不进行检查点,当表空间online,执行检查点的数据文件不需要进行介质恢复
immediate 在所有数据文件上不执行检查点,表空间online,需要执行检查点,无法在noarchivelog上使用immediate方式offline表空间

以下内容为测试结果:

SQL> alter tablespace test_tbs01 offline normal;
Tablespace altered.SQL> alter tablespace test_tbs01 online;
Tablespace altered.SQL> alter tablespace test_tbs01 offline temporary;
Tablespace altered.SQL> alter tablespace test_tbs01 online;
Tablespace altered.SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Current log sequence           2SQL> alter tablespace test_tbs01 offline immediate;
alter tablespace test_tbs01 offline immediate
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled

四、只读表空间

所有的表空间在创建时默认都是可读写的(read write),同时使用read only选项可以讲表空间置为只读状态。只读表空间可以阻止对表空间内数据文件的写操作,其主要目的是为了避免对大型数据库的静态部分执行备份和恢复操作。另外,只读表空间提供了一种历史数据的保存方法,在只读表空间内,任何对象都无法修改,而不论用户是否有更新的权限。(粗体部分的阐述和实验结果冲突)

有关只读表空间的操作限制:

# 只读表空间不允许创建对象。
SQL> create table t3 (rec_id number,name varchar(4)) tablespace ro_tbs;
create table t3 (rec_id number,name varchar(4)) tablespace ro_tbs
*
ERROR at line 1:
ORA-01647: tablespace 'RO_TBS' is read only, cannot allocate space in it# 只读表空间不允许修改记录。
SQL> update t2 set name='Blank' where id=2002;
update t2 set name='Blank' where id=2002*
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 7: '/u01/app/oracle/oradata/stdb/read_only.dbf'# 只读表空间不允许删除记录。
SQL> delete from t2 where id=2002;
delete from t2 where id=2002*
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 7: '/u01/app/oracle/oradata/stdb/read_only.dbf'# 只读表空间允许删除表。
SQL> drop table t2;
Table dropped.# 只读表空间允许修改对象。
SQL> alter table t3 modify (name varchar(10));
Table altered.

在将表空间置为只读之前应考虑如下的前提条件:

1、表空间必须在线,而且必须确保没有要应用到表空间上的撤销信息。(表空间上的事务都应被提交)

SQL> alter tablespace test_tbs01 offline normal;
Tablespace altered.SQL> alter tablespace test_tbs01 read only;
alter tablespace test_tbs01 read only
*
ERROR at line 1:
ORA-01539: tablespace 'TEST_TBS01' is not online

2、不能将活动事务的撤销表空间和系统表空间置为只读。

3、如果当前表空间正在联机备份,不能将该表空间置为只读状态,因为在备份结束后会更新表空间上所有数据文件的文件头信息。 

当执行alter tablespace ... read only语句之前,在该表空间上有一事务挂起或未被提交,该语句将等待表空间上的事务提交或回滚后才会返回;如果在执行alter tablespace ... read only语句之前,表空间上的事务挂起或未被提交,但某一时刻该事务回滚到了一个保存点(savepoint),则此时将执行事务的回滚,alter tablespace ... read only语句不再等待该事务。如果发现alter tablespace ... read only语句长时间无法返回,则需要判断是否有事务阻止了该语句的完成,并通知事务的所有者,必要时,中断这些事务。

SQL> select sql_text,saddr from v$sqlarea,v$session2  where v$sqlarea.address=v$session.sql_address3  and sql_text like 'alter tablespace%';
SQL_TEXT                                           SADDR
-------------------------------------------------- ----------------
alter tablespace test_tbs01 read only              0000000070F6FE40 -->  //这是将表空间置为只读语句的会话地址SQL> select ses_addr,start_scnb from v$transaction order by start_scnb;
SES_ADDR         START_SCNB
---------------- ----------
0000000070F829F0     643505   -->  //这是将表空间置为只读状态之前的操作
0000000070F6FE40     643536   -->  //这是将表空间置为只读的语句SQL> select t.ses_addr,s.username,s.machine from v$session s,v$transaction t2  where t.ses_addr=s.saddr3  order by t.ses_addr;
SES_ADDR         USERNAME                       MACHINE
---------------- ------------------------------ --------------------
0000000070F6FE40 SYS                            stdb.localdomain
0000000070F829F0 SYS                            stdb.localdomain   --> //需要中断这个操作表空间才能被置为只读 

转载于:https://www.cnblogs.com/magnes/p/5613849.html

Oracle表空间基础(4)相关推荐

  1. Oracle 表空间与数据文件

    --============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...

  2. oracle oats 工具讲解,Oracle 表空间基本操作

    Oracle 表空间基本操作 1. 查询数据库现在的表空间 select tablespace_name, file_name, sum(bytes)/1024/1024 table_size fro ...

  3. Oracle 表空间扩容

    2019独角兽企业重金招聘Python工程师标准>>> 1.查询当前表空间使用情况 col FILE_NAME format a50; col SPACE_NAME format a ...

  4. oracle 创建空文件系统,六分钟学会创建Oracle表空间的实现步骤

    经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西. 1.先查询空闲空间 select tablespace_name,file_id,blo ...

  5. navcat设置oracle表主键自增_初识 Oracle 表空间设置与管理

    本文出自头条号老王谈运维,转载请说明出处. 前言 表空间是 Oracle 特有的一种逻辑结构,是管理和组织 Oracle 数据文件一种方式,一个Oracle 数据库能够有一个或多个表空间,而一个表空间 ...

  6. Oracle 表空间 创建参数 说明

    一. 表空间的说明 官网的几个链接: Logical Storage Structures http://download.oracle.com/docs/cd/E11882_01/server.11 ...

  7. 六分钟学会创建Oracle表空间的步骤

    经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西. 1.先查询空闲空间 select tablespace_name,file_id,blo ...

  8. Zabbix 3.2.6 通过Discovery批量监控Oracle表空间

    一.背景 接到任务,要求对所有数据库的所有表空间进行监控,愿意是遇到表空间不足导致业务数据库的不可用,我们知道通过Zabbix监控Oracle的插件有一些,比如Orabbix或者Pyora,前者通过J ...

  9. zabbix自动发现oracle表空间并监控其使用率

    监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创 ...

最新文章

  1. oracle vm virtualbox如何设置u盘启动_电脑自主U盘装机 如何设置U盘启动
  2. html Qestionnaire表单
  3. java 线程池 中断_如何中断(interrupt)线程(thread)(线程池的线程中断我的理解是一个意思)...
  4. SAP SMW0 上传EXCEL模板遇到的问题
  5. 解决ubuntu上网慢
  6. JVM性能调优实践:G1 垃圾收集器介绍篇
  7. asp.net读取xml方法
  8. 集合添加元素python_Python基础:列表、字典、元组、集合、添加和删除元素,增删...
  9. 快餐店之间插入仓库,路最短,DP,POJ(1485)
  10. mysql 判断日志时间早_MySQL5.7慢查询日志时间与系统时间差8小时原因详解
  11. Java中12 种 Spring 常用注解,必须记住!
  12. 10.用好远程联机服务器
  13. (已更新)萤火商城V2.0开源版[uni-app端],轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP
  14. ecu故障现象_案例-报ECU系统软件重置故障处理方案
  15. 深入理解java虚拟机(zz)
  16. springboot打包错误:Failed to execute goal org.apache.maven.pluginsmaven-resources-plugin3.2.0
  17. 用python批量处理图片_Python学习九十三天:Python批量处理图片
  18. 出栈顺序(栈和队列)B
  19. 基于 JavaFX 开发的聊天客户端 OIM-即时通讯
  20. 按键猫咪完美全键盘版教程

热门文章

  1. vue 组件 父向子传值
  2. sqlalchemy与mysql映射
  3. javacript 数据类型
  4. virtualbox 网络配置
  5. 3.5 Bounding Box预测
  6. Pandas MultiIndex(多重索引)
  7. 信息安全完全参考手册之风险分析(第二章)
  8. MyBatis学习总结(21)——自定义MyBatis Generator插件
  9. 敏捷开发系列学习总结(10)——到底什么是敏捷开发?
  10. mysql语句1=1_mysql - “where 1 = 1”语句