Oracle表空间基础(4)

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

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

# 查看参数db_16k_cache_size系统默认值,默认值为0,表示未启用。
show parameter db_16k_cache_size

NAME                  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_size

NAME                 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           2

SQL> 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$session
  2  where v$sqlarea.address=v$session.sql_address
  3  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 t
  2  where t.ses_addr=s.saddr
  3  order by t.ses_addr;
SES_ADDR         USERNAME                       MACHINE
---------------- ------------------------------ --------------------
0000000070F6FE40 SYS                            stdb.localdomain
0000000070F829F0 SYS                            stdb.localdomain   --> //需要中断这个操作表空间才能被置为只读 
时间: 2024-11-04 03:33:34

Oracle表空间基础(4)的相关文章

Oracle表空间基础(1)

一.Oracle表空间概述 表空间是Oracle数据库中的一种逻辑结构.从逻辑层面上来说,表空间包含段,数据库中的对象是以段的形式来组织的,诸如表段,索引段等:从物理层面上来说,表空间是由文件构成的,数据库中的数据实际上是存储在文件当中的.表空间不是Oracle数据库中的特有概念,如在DB2中也有表空间这个概念. 二.本地管理的表空间 1.本地管理表空间中的扩展(extent)管理 使用extent management local子句显示声明创建本地管理的表空间,对于新的永久表空间来说,这是一

Oracle表空间基础(2)

一.压缩表空间 压缩表空间是通过压缩表空间内的对象来实现的.数据的压缩体现在数据块上,简单的说就是通过清除数据块上的重复内容来达到降低I/O,提升性能性能的目的.在表空间的创建语句中通过指定default关键字,可以让在该表空间上创建的所有表进行压缩(实际上,压缩是在数据插入时进行的). 根据表空间存储数据对象的不同,表空间压缩类型可以分为OLTP压缩.非结构化文件副本清除.非结构化文件压缩和备份数据压缩等.其中OLTP压缩是指在发生DML操作(包括insert,delete,update)期间

Oracle表空间基础(3)

一.临时表空间 临时表空间仅包含会话期间产生的短暂的数据,可改善多个无法在内存中完成的排序操作的并发性,同时还可以提高在排序操作中空间管理的效率.在临时表空间内,特定实例的排序操作共享一个排序段,排序段在数据库启动时创建,在数据库关闭时被释放. 在完成数据库的安装以后,数据库内默认存在一个名为temp的临时表空间,temp表空间可被数据库内的多个用户所共享.也可以使用create temporary tablespace语句创建临时表空间,同时使用create/alter user语句为用户指定

Oracle表空间基础(5)

一.修改和维护表空间 1.增加表空间容量 可以通过修改表空间数据文件的大小或为表空间添加一个数据文件的方式增加表空间的容量,另外我们还可以使用表空间的自动扩展选项为大文件表空间增加容量.对于本地管理的临时表空间,即无法它增加空间容量,也无法修改它的段空间管理方式. a.小文件表空间增加容量 # 通过为表空间添加数据文件的方式增加表空间容量 SQL> alter tablespace test 2 add datafile '/u01/app/oracle/oradata/stdb/test02.

Oracle表空间

Oracle表空间,布布扣,bubuko.com

【Oracle 常用查询】oracle表空间使用率统计查询

参考1 --查询表空间使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '

44.oracle表空间的使用

要给下属充分的发挥空间,要允许下属犯错,下属犯错自己能顶下来就顶着,不要盯得让下属觉得"这不是我的事,我只是个小打工的",团建要放在首位.不可在下属面前"装B",别人也不傻. Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献.可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的. ORACLE数据库被划分成称作为表空间[1]  的逻辑区域--形成ORACLE数据库的逻辑结构.一个ORACLE数据库能够

Oracle表空间,用户,用户授权

一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客"怎样玩转千万级别的数据"提到了过表分区的概念,其实表分区说到本质上就是按一定条件把不同数据放在不同的数据文件里,这些数据文件在物理上是相对独立的,在逻辑上又是一个整体.特别强调一下,在SQL Server中,建表时是默认把所有的表都保存在PRIMARY默认文件组 ,当数据库中表很多,并且数据量很大时,会

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

监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创建表空间时可以根据应用需求指定是否开启表空间自动扩展.那么在这里我们需要分析一个监控策略,就是当zabbix监控到某个表空间使用率达到95%,那么就让触发器触发警告(Warning)信息,并发送邮件给DBA或管理者.当检测到表空间没有开启自动扩展时,则触发Information信息.说明一下:ora