知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > 设计基础 > 关于oracle表空间管理的两个问题

关于oracle表空间管理的两个问题

    oracle的表空间可以把数据库划分为一个或多个逻辑单元。这样的逻辑划分能够让我们对数据库更有效的管理,灵活的控制数据库占用的磁盘空间,也便于DBA将不同类型的数据进行分离,使得数据库逻辑清晰,便于管理。
    数据库的数据物理上存储在数据文件中,逻辑上存放在表空间中。数据库逻辑上由一个或多个表空间组成,而表空间物理上由一个或者多个数据文件组成。当DBA建立数据库时,oracle会建立SYSTEM和SYSAUX表空间,还可以建立UNDO表空间和默认临时表空间。为了加强对表空间管理,在建立数据库后,DBA可以根据需求建立不同类型的表空间,比如可建立专门存放表段的数据表空间,建立专门存放索引段的索引表空间,建立专门存放临时段的临时表空间等。


   下面的两个问题是在oracle表空间管理时经常遇到的问题。


问题一:表空间扩展
表空间物理上由多个数据文件组成,表空间的大小实际上就是数据文件相加后的尺寸。如果指定了表空间的初始尺寸,当数据占满了初始尺寸后,如果继续向表空间的表插入数据时,会因为没有足够的空闲空间而报错。
报错信息如下:
ORA-01653: unable to extend table *** by ** in tablespace ***
解决该问题的方法就是进行表空间扩展,增加更多的存储空间。扩展表空间可以通过以下三种方式进行:
1. 增加数据文件
如为表空间user01增加一个10M的数据文件,sql语句如下
Alter tablespace user01 add datafile ‘D:\data\user01_2.dbf’ size 10M;
2. 手工改变数据文件尺寸
将数据文件user01.dbf扩展为20M,sql语句如下:
Alter database datafile ‘D:\data\user01.dbf’ resize 10M
3. 允许数据文件自动扩展
使数据文件user01.dbf自动扩展,每次扩展10M,最大可达1G。sql语句如下:
Alter database datafile ‘d:\data\user01.dbf’ autoextend on next 10M maxsize 1G;
默认情况下数据文件是不允许自动扩展的,当指定了autoextend on选项后,当表空间填满后数据文件会自动扩展,这样就间接的扩展了表空间



问题二:移动数据文件
在表空间建立后,还可能需要把表空间的数据文件移动到另外的磁盘空间。移动数据文件有两种方法:


方法一:在open状态下使用alter tablespace命令(关于数据库状态参加文章末尾附录部分)
当数据库处于open状态时,使用alter tablespace移动数据文件,要求表空间必须为offline状态。
step1.确定数据文件所在表空间
SQL> select tablespace_name from dba_data_files where file_name=’dbfile01.dbf’;
step2.使表空间脱机
SQL>alter tablespace WFBI offine;
Step3.移动数据文件到指定位置
SQL> HOST MOVE d:\data\dbfile01.dbf e:\data\ dbfile01.dbf
注:HOST表示在sqlplus中执行os命令。
Step4.执行alter tablespace命令
SQL> Alter tablespace user01 rename datafile ‘d:\data\dbfile01.dbf’ to ‘e:\data\dbfile01.dbf’
Step5.使表空间联机
SQL> Alter tablespace WFBI online;


方法二:在mount状态下使用alter database命令
方法一在移动数据文件时要求表空间为脱机状态,因为SYSTEM和SYSAUX表空间不能脱机,如果要移动这两种表空间的数据文件,就必须采用alter database命令来完成。下面以移动数据文件system01.dbf为例,说明方法二的操作步骤。
Step1.关闭并装载数据库,因为alter database命令只能在mount状态下完成,需要先关闭数据库,然后再装载数据库。
SQL>Shutdown immediate
SQL>Startup mount
Step2.移动数据文件至目标位置
SQL>HOST MOVE d:\data\system01.dbf e:\data\ system01.dbf;
Step3.执行alter database命令
SQL>Alter database rename file ‘d:\data\ system01.dbf’ to ‘e:\data\system01.dbf’;
Step4.打开数据库
SQL>Alter database open;


附录:
数据库的三种状态,启动例程服务时,默认情况下会自动执行启动例程,装载数据库,打开数据库。
1启动例程(NOMOUNT状态):启动例程时,首先读取参数文件,分配SGA并启动后台进程,同时打开预警文件和后台进程跟踪文件。
当例程处于关闭状态,需要执行STARTUP NOMOUNT命令启动例程。
2装载数据库(MOUNT状态):装载数据库时,oracle根据初始化参数control_files的位置定位打开控制文件,从控制文件中得到数据文件和重做日志信息。
当例程处于关闭状态,若需要启动例程并装载数据库,需要执行STARTUP NOMOUNT命令。当执行数据库维护操作(如改变数据文件位置)时,必须将数据库转为MOUNT状态。
3打开数据库(OPEN状态)打开数据库时,oracle打开所有数据文件和重做日志。只有在数据库打开后,客户应用才能访问oracle数据库。利用STARTUP OPEN命令可启动例程并打开数据库。


 


本文标签:
发布日期:2011/08/05
本文分类: 设计基础