`
fishyu0817
  • 浏览: 111299 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle数据库笔记--表空间

    博客分类:
  • BIEE
阅读更多

在前面学习Oracle数据库基础架构时,已经了解了Oracle的存储结构,逻辑上,Oracle的数据存放在tablespaces中,物理上存放在datafiles中。一个tablespace只能属于一个数据库(一个数据库可包括多个tablespace),包括了1个或多个数据文件Tablespace可进一步分为segmentsextentsblocks。一个datafile只属于一个数据库的一个tablespace

Tablespace的分类有2种,一种分为SYSTEM tablespaceNon-SYSTEM tablespace

SYSTEM tablespace是随数据库的创建而创建的,包含了数据字典和SYSTEM undo segmentNon-SYSTEM tablespace包括了分配给用户的空间便于数据库的空间管理

另一种分为permanentundotemporary三种tablespace。一般不加特别说明时所创建的permanent tablespace,保存永久性对象;undo tablespace用于保存undo segments以便于回滚操作,而不能包含其他对象;temporary tablespace是用于进行排序操作,能够被多个用户共享,不能包含永久性对象.

Temporary tablespace中有一个default temporary tablespace,指定了一个全局的默认临时表空间,如果没有这个表空间,默认情况下,是使用SYSTEM tablespace来存储临时数据的,显然,这是不好的,默认临时表空间只有一个,可以从表database_properties中查看default temp tablespace,在新的default temp tablespace被创建之前,是不能被dropped的。

tablespace以及datafile相关的数据字典有:dba_tablespacesv$tablespacedba_data_filesv$datafiledba_temp_filesv$tempfile

1、创建表空间

创建表空间的完整命令:

Create [undo] tablespace <ts_name>

datafile <file_spec1> [,<file_spec2>]

mininum extent <m> k|m

blocksize <n> [k]

logging clause

force logging

default storage_clause

online | offline

permanent | temporary

extent_manager_clause

segment_manager_clause

1)undo指定系统将创建一个回滚表空间

2)、tablespace指定表空间名称

3)datafile指定数据文件的路径、名称、大小及自增长状况:具体形如'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 50M autoextend on next 10M maxsize 500M,也可以指定onoff,就没有后面的递增和最大尺寸了,也可以在maxsize后面指定最大尺寸unlimited说明表空间无限大。

4)mininum extent <m> k|m指出在表空间的extent的最小值,这个参数可以减少空间碎片,保证在表空间的extent是这个数值的整数倍;

5)blocksize <n> [k]设置块的大小,如果要设置这个参数,必须设置成db_block_size的整数倍;

6)logging cluse指示这个表空间上所有用户对象的日志属性,缺省是logging

7)force logging指示表空间进入强制日志模式。此时系统将记录表空间上对象的所有改变,除了临时段的改变。这个参数高于logging参数中的nologging选项;

8)、default storage_clause声明缺省的存储子句;

9)online|offline指定表空间状态;

10)、permanent | temporary指出表空间的属性,是永久表空间还是临时表空间。永久表空间存放的是永久对象,临时表空间存放的是session生命期中存在的临时对象。这个参数生成的临时表空间创建后一直都是字典管理,不能使用extent management local选项。如果要创建本地管理表空间,必须使用create temporary tablespace。声明了这个参数就不能声明block size

11)extent_manager_clause说明表空间如何管理extent。一旦声明了这个子句,就只能通过移植的方式改变这些参数。如果希望表空间本地管理的话,声明local选项。本地管理表空间是通过位图管理的。Autoallocate说明表空间自动分配extent,用户不能指定extent的大小。只有9.0以上的版本具有这个功能。Uniform说明表空间的范围的固定大小,缺省是1M。不能将本地管理的数据库的SYSTEM表空间设置成字典管理。ORACE推荐使用本地管理表空间。如果没有设置这个子句,oracle会进行默认设置。如果初始化参数compatible小于9.0.0,那么系统创建字典管理表空间,如果大于9.0.0,那么按如下设置:

如果没有指定default storage_clauseoracle创建一个自动分配的本地管理表空间;否则如果指定了mininum extent,那么oracle判断mininum extentinitialnext是否相等,以及pctincrease是否为0,如果满足这2个条件,oracle吃醋昂就一个本地管理表空间,extent sizeinitial,如果不满足,那么oracle将创建一个自动分配的本地管理表空间;如果没有指定mininum extent,那么oracle判断initialnext是否相等,以及pctincrease是否为0,如果满足这2个条件,那么oracle创建一个本地管理表空间并制定uniform,否则oracle将创建一个自动分配的本地管理表空间。(本地管理表空间只能存储永久对象。如果你声明了local,则不能声明default storage_clausemininum extenttemporary)

12)segment_management_clause : segment space management auto

 

2、表空间的状态:

Tablespace的状态有3种:ONLINEOFFLINEREAD ONLYONLINE是正常工作的状态,OFFLINE状态下,是不允许访问数据的,SYSTEM tablespaceDEFAULT temp tablespace是不能被OFFLINE的,且带有active undo segmentstablespace也不能被OFFLINE。切换ONLINEOFFLINE状态的命令是alter tablespace <ts_name> offline/online。当状态变成READ-ONLY时,会产生一个checkpoint,此时数据只能读不能写,但是可以drop对象,相关命令是alter tablespace <ts_name> read onlyalter tablespace <ts_name> read write

3、表空间的存储设置

修改tablespacedatafiles的存储设置。这项工作是指修改tablespace的大小和datafile的存放位置。

在修改tablespace的大小之前,我们需要先知道tablespac的当前存储情况。可以用下面的SQL语句实现:

SELECT a.tablespace_name,

      a.bytes bytes_used,

      b.largest,

      round(((a.bytes - b.bytes) / a.bytes)*100, 2) percent_used

 FROM

 (SELECT tablespace_name,

         SUM(bytes) bytes

    FROM Dba_Data_Files

   GROUP BY tablespace_name) a,

 (SELECT tablespace_name,

         SUM(bytes) bytes,

         MAX(bytes) largest

    FROM dba_free_space

   GROUP BY tablespace_name) b

 WHERE a.tablespace_name = b.tablespace_name

 ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;

上面这条SQL语句中,有2条子查询,第一条取得的是表空间的总字节数,第二条取得的是表空间中余下的字节数,最终得到的结果是已经使用的字节数和百分比。

修改tablespace的大小,主要是通过datafile的大小来实现的,修改datafile的大小又有3种方法:1)、使数据文件自增长;2)、改变数据文件大小;3)、添加数据文件。

使数据文件自增长:表DBA_DATA_FILES中有一个字段AUTOEXTENSIBLE与这个方法对应,它指示数据文件是否自增长,也就是数据文件不能满足存储需求时,是否自动增加大小来满足需求。先运行下列命令创建一个datafile大小为5M的表空间—TESTcreate tablespace test datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 5M;这个时候,AUTOEXTENSIBLE是NO,也就是数据文件的大小是固定的,不会自增长(当然,我们也可以在创建命令中加入指令设置自增长)。下面我们手动来修改数据文件为自增长:alter database datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' autoextend on next 5M maxsize 50M;这条命令将TEST.DBF数据文件设置为按5M大小进行自增长,最大为50M

改变数据文件大小:以前面的数据文件为例,我想将数据文件设置为100M大小,可以执行命令:alter database datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' resize 100M;

添加数据文件:这应该是最好的一种方式,便于管理。以TEST表空间为例,添加数据文件的命令如下:alter tablespace test add datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF' size 5M autoextend on next 5M maxsize 50M;这条命令就直接指定了数据文件自增长。

除了修改表空间的大小,存储设置中还可以进行的一项工作就是移动数据文件。移动数据文件有2种方法,一种是使用alter tablespace命令,一种是使用alter database命令。

使用alter tablespace移动数据文件前,需要先将表空间OFFLINE,然后目标数据文件必须存在(也就是将需要移动的数据文件复制到目的地)。以将数据文件TEST01.DBF移动到上一层目录为例。先执行命令:alter tablespace test offline;然后将TEST01.DBF复制到上一级目录,再执行命令:alter tablespace test rename datafile E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF' to 'E:\oracle\product\10.2.0\oradata\TEST01.DBF';然后再将表空间ONLINE就可以了:alter tablespace test online;

使用alter database移动数据文件时,同样,目标数据文件必须存在(原文件的副本),且数据库需要处于MOUNTED状态。第一种方法,已经将数据文件移动到了父一级目录,下面再将它移回来。先关闭数据库:shutdown immediate;然后启动数据库,启动选项为mountstartup mount;然后执行移动命令:alter database rename file 'E:\oracle\product\10.2.0\oradata\TEST01.DBF' to 'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF';再打开数据库:alter database open,报错了:

ORA-01113:文件7需要介质恢复

ORA-01110:数据文件7’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’,细节还不明白,只知道数据库认为这个数据文件收到破坏,需要使用备份、日志信息来恢复。这本来是个比较严重的问题,但是在这个实例中,还是很好解决的,执行命令:

recover datafile ’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’。提示完成介质恢复,再打开数据库:alter database open;一切就正常了。

4、删除表空间

        删除表空间,使用命令drop tablespace <ts_name>。但是有3个选项需要注意:

INCLUDING CONTENTS:指示删除表空间中的segments

INCLUDING CONTENTS AND DATAFILES:指示删除segmentsdatafiles

CASCADE CONSTRAINTS:删除所有与该空间相关的完整性约束条件。

Drop tablespace test INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

需要注意的是SYSTEM表空间以及具有active segments的表空间是无法删除的。


分享到:
评论

相关推荐

    Oracle数据库笔记-JackChiang.docx

    Jack Chiang的Oracle数据库笔记主要涵盖了Oracle数据库的基础知识、管理操作、性能优化以及一些常见问题的解决方案。以下是对这些知识点的详细阐述: 1. **Oracle数据库基础**:Oracle数据库采用SQL(结构化查询...

    Oracle数据库笔记大全

    - **表空间**: Oracle数据库的逻辑存储单元,由一个或多个数据文件组成,用于存放数据库对象。 2. **Oracle的安装与卸载**: - **安装**: 包括下载安装包、配置环境变量、创建数据库实例等步骤。 - **卸载**: ...

    李兴华-Oracle数据库笔记(全)

    《李兴华-Oracle数据库笔记(全)》是MLDN学院资深讲师李兴华老师精心编写的Oracle数据库学习资料,适合对Oracle数据库感兴趣的学者和DBA深入研究。这份笔记全面覆盖了Oracle数据库的基础知识、核心概念以及高级特性...

    oracle学习笔记-入门基础

    索引类似于书籍的目录,是Oracle数据库为了加速SQL查询而创建的一种独立于表的物理结构。它们直接指向包含查询值的行,减少了磁盘I/O操作,从而提高查询速度。创建索引的语法为`CREATE INDEX index ON table (column...

    Oracle数据库课堂笔记

    以下是对Oracle数据库课堂笔记的详细解析,涵盖了从基础到进阶的重要知识点。 第一讲:Oracle简介 Oracle数据库是由甲骨文公司开发的,提供了一整套数据存储、管理和检索解决方案。它支持多种操作系统和硬件平台,...

    藏经阁-Oracle 数据库笔记.pdf

    首先,Oracle数据库的核心概念包括数据模型、SQL语言、数据库实例和表空间等。数据模型是描述数据组织方式的理论框架,如关系型数据模型是Oracle最常用的数据模型,它以表格的形式存储数据。SQL(Structured Query ...

    Oracle课堂笔记(很全很详细的Oracle笔记)

    根据提供的信息,我们可以总结出以下关于Oracle的相关知识点...以上内容概述了Oracle数据库的基础概念、管理工具、内存结构以及SQLPlus的基本使用方法。这些知识点对于学习Oracle数据库管理和维护具有重要的指导意义。

    ORACLE学习笔记-ORACLE(基本命令)

    表空间是Oracle数据库逻辑存储的组织单位,可以包含一个或多个数据文件。使用`SELECT * FROM dba_data_files`可以查看所有表空间及其数据文件,而`SELECT tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size...

    ORACLE学习笔记-ORACLE(基本命令)

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的功能和高效的性能管理工具。本文将深入探讨Oracle的基本命令,帮助初学者理解和掌握Oracle数据库操作。 首先,查看Oracle系统信息是日常管理和故障...

    Oracle数据库安装笔记+学习笔记

    这篇笔记集合将帮助我们深入理解Oracle数据库的安装过程以及后续的学习路径。 首先,"教你安装.txt"可能包含了Oracle数据库的基础安装步骤。安装Oracle数据库通常包括以下几个关键阶段:系统需求检查、下载适合操作...

    Archive Log 学习笔记 --oracle 数据库

    Oracle数据库中的归档日志(Archive Log)是数据库在运行过程中产生的一种重要数据记录,它存储了数据库事务的完整历史,对于数据保护、故障恢复和多版本并发控制(MVCC)有着至关重要的作用。这篇学习笔记将深入...

    Oracle数据库体系结构-学习笔记.docx

    ### Oracle数据库体系结构知识点 #### 一、Oracle体系结构简介 **Oracle Server**: Oracle服务器包含两个主要部分:数据库(Database)和实例(Instance)。 - **Database**: 包括数据文件(Datafiles)、控制文件...

    Oracle数据库培训笔记

    ### Oracle数据库培训笔记知识点概述 #### 一、数据库基础 - **版本简介**:Oracle数据库经历了从Oracle 7.3.4、8.0.6到8i、9i、10g、11g等多个版本的发展。其中,8i版本开始采用Java作为核心编程语言,实现了平台...

    oracle数据库从入门到精通-学习详细笔记

    ### Oracle数据库从入门到精通——启动与关闭流程详解 #### 一、Oracle数据库启动流程 在深入了解Oracle数据库之前,我们首先需要掌握其基本的启动流程。Oracle数据库的启动过程包括了实例的创建、数据库的加载...

    oracle数据库培训笔记

    Oracle数据库的基本结构主要包括表空间、段、区和块,这些是存储数据的主要单位,理解它们的工作原理对于管理数据库至关重要。 描述中提到的“常用的例子”可能涵盖创建数据库对象,如表、索引、视图、存储过程等。...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    Oracle 12c体系结构学习实验笔记

    Oracle 12c实验-管理表空间.pdf Oracle 12c实验-管理归档重做日志.pdf Oracle 12c实验-管理控制文件.pdf Oracle 12c实验-管理数据文件和临时文件.pdf Oracle 12c实验-管理重做日志.pdf Oracle 12c实验-归档模式&非...

    oracle安装-卸载-初识oracle-笔记

    PL/SQL Developer是一款强大的Oracle数据库开发工具,它提供了一个友好的图形界面,便于编写、调试和管理PL/SQL代码。安装后,你可以通过它来执行SQL查询、创建和管理数据库对象。 五、Oracle卸载 卸载Oracle时需...

    2011版李兴华主讲-ORACLE实战 最强大的数据库课程MLDN出品—oracle课堂笔记(全).rar

    数据库性能优化是Oracle数据库管理员的重要任务,课程可能教授如何使用SQL*Plus、 tkprof 和 Explain Plan等工具来分析和优化SQL查询,以及如何调整表空间、索引和分区等数据库对象以提高性能。 此外,课程可能还会...

    oracle数据库学习笔记

    本学习笔记旨在提供全面、深入的Oracle知识体系,帮助读者从基础到高级掌握Oracle数据库的使用。 首先,Oracle数据库的核心概念包括数据模型、数据库架构和SQL语言。数据模型是数据库设计的基础,主要包括实体、...

Global site tag (gtag.js) - Google Analytics