ORACLE结构体系篇之表空间详解.md
一、系统表空间
SYSTEM 表空间是Oracle 数据库最重要的一个表空间,存放了一些DDL 语言产生的
信息以及PL/SQL 包、视图、函数、过程等,称之为数据字典,因此该表空间也具有其特殊性,
下面描述SYSTEM 表空间的相关特性及备份与恢复。
(一)、SYSTEM 表空间的管理
1. 建议不存放用户数据
易引起错误:因用户错误导致系统表空间不可用
解决措施:应当为系统设定缺省的默认表空间来避免用户创建时使用系统表空间 ---- 缺省的默认表空间是啥意思?
//为数据库设定默认表空间
SQL>ALTER DATABASE DEFAULT TABLESPACE tablespace_name;
//查询默认表空间
SQL> col property_value format a30 --修改property_value 参数格式长度为30
SQL> select property_name,property_value from database_properties
2 where property_name like 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ------------------------------
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE USERS --应为非SYSTEM 的表空间
DEFAULT_TBS_TYPE SMALLFILE
--------------------------------------------------------------
2.SYSTEM 表空间特性
• 不能脱机offline --- 脱机什么意思?
• 不能置为只读read only
• 不能重命名
• 不能删除
---------------------------------------------------------------
(1)--演示不能脱机
SQL> alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
---------------------------------------------------------------
(2)--不能置为只读状态
SQL> alter tablespace system read only;
alter tablespace system read only
*
ERROR at line 1:
ORA-01643: system tablespace can not be made read only
--------------------------------------------------------------
(3) --不能重命名
SQL> alter tablespace system rename to system2;
alter tablespace system rename to system2
*
ERROR at line 1:
ORA-00712: cannot rename system tablespace
------------------------------------------------------
(4)--不能删除
SQL> drop tablespace system;
drop tablespace system
*
ERROR at line 1:
ORA-01550: cannot drop system tablespace
SQL> drop tablespace system including contents and datafiles;
drop tablespace system including contents and datafiles
*
ERROR at line 1:
ORA-01550: cannot drop system tablespace
----------------------------------------------------------
总结:普通表空间所具有的更名、删除、只读、脱机不为system 表空间所拥有
-----------------------------------------------------------
3.空间管理
保证空间可用,一般存放单个数据文件。设置为自动扩展
如果SYSTEM 表空间数据文件很大,可以考虑使用bigfile
使用下面的视图来获取表空间的相关状态,使用空间等等
------------------------------------------------------------
(二) 丢失系统表空间 --- 该实验没做
[oracle@oracle emrep]$ echo $ORACLE_SID
Emrep
//连接数据库
[oracle@oracle emrep]$ sqlplus / as sysdba
SQL*Plus:Release 10.2.0.1.0 - Production on Sun Aug 4 02:01:20 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
//查看归档模式
SQL>select log_mode from v$database;
//关闭数据库备份system 表空间的数据文件
[oracle@oracle ~]cp ..
//在用户表空间创建一个表
SQL>create table table_name tablespace tablespace_name as ...;
//切换日志直至清除日志
SQL> alter system switch logfile;
//删除system 表空间的数据文件
[oracle@oracle ~]rm ..
//重新启动数据库,并根据错误信息恢复数据库
----------------------------------------------------
二、辅助表空间
SYSAUX 表空间在Oracle Database 10g 中引入,作为SYSTEM 表空间的辅助表空间.
以前一些使用独立表空间或系统表空间的数据库组件现在在SYSAUX 表空间中创建.
通过分离这些组件和功能,SYSTEM 表空间的负荷得以减轻.反复创建一些相关对象及组件
引起SYSTEM 表空间的碎片问题得以避免。
如果SYSAUX 表空间不可用,数据库核心功能将保持有效;使用SYSAUX 表空间的特点
将会失败或功能受限.
• 不能删除
• 不能重命名
• 不能置为read only
--------------------------------------------------
结论:
这是一个管理及规划上的改进,进一步独立SYSTEM 表空间,保证其存储及性能.
我们在做数据库规划时大可借鉴Oracle 这个改进,分离重要数据及次要数据,分离稳定结构
及频繁变化结构,尽量减少对重要数据及结构的影响。
-----------------------------------------------------
三、临时表空间
1. 临时表空间作用
Oracle 临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原
因是需要对查询的中间结果进行排序。
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql 语句的执行,
temp 表空间会一直增长。直到耗尽硬盘空间。
有人猜测在磁盘空间的分配上,oracle 使用的是贪心算法,如果上次磁盘空间消耗达到
1GB,那么临时表空间就是1GB。
也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。
临时表空间的主要作用:
索引create 或rebuild;
Order by 或group by;
Distinct 操作;
Union 或intersect 或minus;
Sort-merge joins;
analyze。
2.使用原理
在Oracle 数据库中进行排序、分组汇总、索引等到作时,会产生很多的临时数据。对
于这些临时数据,Oracle 数据库是如何处理的呢?
通常情况下,Oracle 数据库会先将这些临时数据存放到内存的PGA(程序全局区)内。
在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临
时数据。但是这个分区的容量是有限的。当这个分区的大小不足以容纳排序后所产生的记录
时,数据库系统就会将临时数据存放到临时表空间中。这就是临时表空间的来历。
看起来好像这个临时表空间是个临时工,对于数据库的影响不会有多大。其实大家这是
误解这个临时表空间了。在用户进行数据库操作时,排序、分组汇总、索引这些作业是少不
了,其会产生大量的临时数据。为此基本上每个数据库都需要用到临时表空间。而如果这个
临时表空间设置不当的话,则会给数据库性能带来很大的负面影响。为此管理员在维护这个
临时表空间的时候,不能够掉以轻心。要避免因为临时表空间设置不当影响数据库的性能。
(1)为用户创建临时表空间
最好在创建用户时为用户指定临时表空间。如可以利用语句default temporary table
space 语句来为数据库设置默认的临时表空间。不过在Oracle 数据库中这个不是强制的。
但是强烈建议这么做。因为如果没有为用户指定默认临时表空间的话,那么当这个用户因为
排序等操作需要使用到临时表空间的话,数据库系统就会“自作聪明”的利用系统表空间
SYSTEM 来创建临时段。众所周知,这是一个系统表空间。由于在这个表空间中存放着系
统运行相关的数据,一般的建议是用户的数据不能够保存在这个表空间中。那么如果将用户
的临时表空间防止在这个系统表空间之内,会产生什么负面影响呢?
由于临时表空间中的数据是临时的。为此数据库系统需要频繁的分配和释放临时段。这
些频繁的操作会在系统表空间中产生大量的存储碎片。当这些存储碎片比较多时,就会影响
系统读取硬盘的效率,从而影响数据库的性能。其次系统表空间的大小往往是有限制的。此
时临时段也来插一脚,就会占用系统表空间的大小。
(2)合理设置PGA,减少临时表空间使用的几率。
当排序操作产生临时数据时,数据库并不是马上将其存储在临时表空间中。通常情况下,
会先将这些临时数据存储在内存的PGA 程序全局区内。只有当这个程序全局区无法容纳全
部数据时,数据库系统才会启用临时表空间中的临时段来保存这些数据。但是众所周知,操
作系统从内存中读取数据要比从硬盘中读取数据块几千倍。为此比较理想的情况是,这个程
序全局区足够的大,可以容纳所有的临时数据。此时数据库系统就永远用不到临时表空间了。
从而可以提高数据库的性能。
但是这毕竟只是一个理想。由于内存大小等多方面的限制,这个PGA 程序区的大小往
往是有限制的。所以在进行一些大型的排序操作时,这个临时表空间仍然少不了。现在数据
库管理员可以做的就是合理设置这个PGA 程序全局区的大小,尽量减少临时表空间使用的
几率。如在实际工作中,数据库管理员可以根据需要来设置初始化参数SORT_AREA_SIZE
参数。这个参数主要控制这个PGA 程序全局区内排序区的大小。通常情况下,如果这个数
据库系统主要用来查询并且需要大量的排序、分组汇总、索引等操作时,那么可以适当调整
这个参数,来扩大PGA 分区的大小。相反,如果这个系统主要用于更新操作,或者在这个
数据库服务器上还部署由其他的应用程序,那么这个PGA 分区就不能够占用太多的内存,
以防止对其他应用程序产生不利的影响。
------------------------------------------------------------------------------
(3)要为临时表空间保留足够的硬盘空间。
其他表空间对应的数据文件,在其创建时就会被完全分配和初始化,即在其创建时就会
被分配存储空间。但是临时表空间对应的临时文件则不同。如在Linux 操作系统中,临时表
空间创建时系统是不会分配和初始化临时文件的。也就是说,不会为临时文件分配存储空间。
只有临时数据出现需要用到临时文件的时候,系统才会在硬盘上分配一块地方用来保存临时
文件。此时就可能会产生一个问题,即当需要用到临时文件系统为其分配空间的时候,才会
先系统分区中没有足够的存储空间了。此时就会产生一些难以预料的后果。
为此对于这些临时文件,数据库管理员最好能够预先为其保留足够的空间。如在Linux
操作系统中,可以将其防止在一个独立的分区内,不允许其他应用程序使用。如此的话,就
不用担心临时文件没有地方存储了。另外由于临时表空间主要用来存放一些排序用的临时文
件。为此如果能够将这个临时表空间存放在性能比较好的分区中,还可以提高数据库系统读
取临时表空间中数据的速度。另外由于系统需要频繁分配临时表空间中的数据,为此临时表
空间所在的分区会出现比较多的碎片。此时如果将临时表空间存放在一个独立的分区内,那
么数据库管理员就可以单独对这个分区进行碎片整理,从而提高这个分区的性能。所以无论
出于什么原因,将临时表空间防止在一个独立的分区内,是一个不错的想法。不仅可以保证
临时文件有存储的空间,而且还可以提高数据库的性能。
对于临时表空间最后需要说明的是,默认情况下这个临时表空间对各个用户都是共享
的。也就是说每个连接到数据库的用户都可以使用默认的临时表空间。数据库管理员可以为
其指定其他的临时表空间。一般来说,只需要一个临时表空间即可。
-------------------------------------------------------------------------------
3.临时表空间组
(1)概述
从oracle 10g 开始,可以创建多个临时表空间,并把它们组成一个临时表空间组,这样应
用数据用于排序时可以使用组里的多个临时表空间,一个临时表空间组至少有一个临时表空
间,其最大个数没有限制,组的名字不能和其中某个表空间的名字相同。
临时表空间组是在创建临时表空间时通过指定group 字句创建的,如果删除组中的全部
临时表空间,那么这个组也将消失。
我们将可以将一个表空间从一个组移动另一个组,或是从一个组中删除临时表空间,或
是往组里添加新的表空间。
--------------------------------------------------------------------------------
(2)使用临时表空间组的优点:
• 数据库层面可以同时指定多个临时表空间,避免当临时表空间不足时所引起的磁盘
排序问题;
• 当一个用户同时有多个会话时,可以使得它们使用不同的临时表空间;
• 并行操作中,不同的从属进程可以使用不同的临时表空间
创建临时表空间组:
SQL> create temporary tablespace tempts1 tempfile
2 '/home/oracle/temp1_02.dbf' size 2M tablespace group group1;
Tablespace created
SQL> create temporary tablespace tempts2 tempfile
2 '/home/oracle/temp2_02.dbf' size 2M tablespace group group2;
Tablespace created
---------------------------------------------------------------------------------
查询临时表空间组
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1 TEMPTS1
GROUP2 TEMPTS2
将表空间从一个临时表空间组移动到另外一个临时表空间组:
SQL> alter tablespace tempts1 tablespace group GROUP2 ;
Tablespace altered
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP2 TEMPTS1
GROUP2 TEMPTS2
把临时表空间组指定给用户
SQL> alter user scott temporary tablespace GROUP2;
-------------------------------------------------------------------------
在数据库级设置临时表空间
SQL> alter database <db_name> default temporary tablespace GROUP2;
删除临时表空间组(删除组成临时表空间组的所有临时表空间)
SQL> drop tablespace tempts1 including contents and datafiles;
Tablespace dropped
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP2 TEMPTS2
SQL> drop tablespace tempts2 including contents and datafiles;
Tablespace dropped
SQL> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
---------------------------------------------------------------
ORACLE结构体系篇之表空间详解.md的更多相关文章
- Oracle表空间详解
Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...
- 【Oracle XE系列之四】创建OracleXE表空间详解
创建OracleXE表空间示例 sqlplus /nolog connect sys as sysdba SQL> create tablespace OPFOCN datafile 'C:\ ...
- Oracle 表空间详解
目录 目录 表空间概述 表空间的分类 默认表空间 查看默认的永久表空间 查看默认的TEMP表空间 查看默认的表空间类型 逻辑结构到物理结构的映射 对表空间的操作 查看表空间使用情况 查看数据库拥有的表 ...
- mysql-5.7 收缩系统表空间详解
innodb 系统表空间是一个逻辑上的概念,它的物理表现就是innodb系统表空间文件:在讲扩展系统表空间时我们说到 可以用增加文件,增加autoextend标记 这两种方式来解决:但是问题到了收缩表 ...
- MySQL数据库系列(四)- InnoDB下的共享表空间和独立表空间详解
一.概念 共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制.从Innod ...
- mysql-5.7 扩展innodb系统表空间详解
一.innodb系统表空间的简介: innodb 系统表空间是由若干个文件组成的,表空间的大小就是对应文件的大小,表空间文件是由innodb_data_file_path 这人参数来定义的.下面我们来 ...
- 15.3、mysql之InnoDB和MyISAM表空间详解
15.3.1.InnoDB引擎表空间: 1.表空间分类: 共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在 data目录下. 默认的文件名为:ibd ...
- oracle表分区详解
原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...
- oracle入坑日记<四>表空间
1 表空间是什么 1.1.数据表看做的货品,表空间就是存放货品的仓库.SQLserver 用户可以把表空间看做 SQLserver 中的数据库. 1.2.引用[日记二]的总结来解释表空间. 一个数 ...
随机推荐
- Atitit sleep原理 node.js sleep解决方案 timer
Atitit sleep原理 node.js sleep解决方案 timer sleep()的实现分为三步: 1.注册一个信号signal(SIGALRM,handler).接收内核给出的一个信 ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- return返回两个三元表达式的和,返回不正确,同样要注意在JavaScript中,也是如此
public string b() { string b = ""; "; } public int c() { public string b() { string b ...
- (转)常用的 TCP KeepAlive 参数
socket编程里通过setsockopt系统调用针对单独的socket进行设置,可以覆盖Linux Kernel的选项.举个例子,以我的系统默认设置为例,kernel默认设置的tcpkeepaliv ...
- mybatis查询结果和接收的不一样
记一次大坑:mybatis查询结果和接收的不一样,折腾我好几个小时. 先上代码:代码是要查询排名,sql执行的结果 SELECT b.operator_id, b.class_count, b.cla ...
- JVM系列——从菜鸟到入门
持续更新系列. 参考自<深入理解Java虚拟机>.<Java性能权威指南>.<分布式Java应用基础与实践>. Java的内存结构 JVM系列——运行时数据区 JV ...
- js中定义配置文件
var config = (function($){ $.testConfig = { contextPath:'http://localhost:8080/test', maps:[ {id:'ma ...
- R语言 ggplot2包
R语言 ggplot2包的学习 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...
- js 可拖动div 调整大小
dragBorder: function (parent, right, bottom, bottomRight) { var isDownRight = false; var isDownBotto ...
- 【转】Flask入门之上传文件到服务器
#Sample.py # coding:utf-8 from flask import Flask,render_template,request,redirect,url_for from werk ...