表空间数据文件的管理
数据文件的管理
数据文件的管理主要包括创建、修改和删除这几个大的方面。创建数据文件主要考虑文件的数量、大小以及文件的存放的位置等(主要不能和重做日志文件放在同一个磁盘,因为一旦磁盘坏了数据就永远恢复不过来了)。
查看数据文件的视图
DBA_DATA_FILES
V$DATAFILE
语法:
CREATE   TABLESPACE...        创建表空间
CREATE   TEMPORARY   TABLESPACE...        创建临时表空间
ALTER   TABLESPACE   ...   ADD   DATAFILE...              创建数据文件并关联到一个表空间里
ALTER   TABLESPACE   ...   ADD   TEMPFILE...        创建数据文件并关联一个临时表空间
CREATE   DATABASE...        创建数据库并关联数据文件
CREATE   DATABASE   ...   CREATE   DATAFILE...        创建一个新的空的数据文件来代替旧的——在数据文件丢失时会,用这个语句来重建一个。
启用或禁用数据文件自动扩张
以下语句可以通过添加参数AUTOEXTEND   [ON|OFF]来启用或禁用数据文件自动扩张
• CREATE DATABASE
• ALTER DATABASE
• CREATE TABLESPACE
• ALTER TABLESPACE
例子:
ALTER   TABLESPACE   users
ADD   DATAFILE   '/u02/oracle/rbdb1/users03.dbf'   SIZE   10M
AUTOEXTEND   ON
NEXT   512K
MAXSIZE   250M;        --启用数据文件自动扩张
ALTER   DATABASE   DATAFILE   '/u02/oracle/rbdb1/users03.dbf'
AUTOEXTEND   OFF;        --禁用数据文件自动扩张
更改数据文件的大小
ALTER   DATABASE   DATAFILE   '/u02/oracle/rbdb1/stuff01.dbf'
RESIZE   100M;        --更改数据文件的大小
修改数据文件的状态
ALTER   DATABASE   DATAFILE '/u02/oracle/rbdb1/stuff01.dbf'   OFFLINE;        --让数据文件脱机
RECOVER   DATAFILE   '/u02/oracle/rbdb1/stuff01.dbf';        --恢复介质     
ALTER   DATABASE   DATAFILE   '/u02/oracle/rbdb1/stuff01.dbf'   ONLINE;        --让数据文件联机
通过修改表空间来更改数据文件的状态
语法:
• ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
• ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}
这种方法你只需要指定表空间的名字而不需要指定数据文件的具体位置,同时命令执行后表空间所关联的所有数据文件的状态都将会发生改变,但表空间本生的状态是不会发生改变的。
例
ALTER   TABLESPACE   tbs_01   DATAFILE   OFFLINE;        --让表空间所关联的数据文件脱机
ALTER   TABLESPACE   tbs_01   DATAFILE   ONLINE;        --让表空间所关联的数据文件联机
注:
ALTER   TABLESPACE   tbs_name   DATAFILE {ONLINE|OFFLINE}
ALTER   TABLESPACE   tbs_name   TEMPFILE {ONLINE|OFFLINE}
与
ALTER   TABLESPACE   tbs_name   {ONLINE|OFFLINE}不同就在于前者是只修改数据文件的状态(即数据文件下线了而表空间并没有下线),而后者是表空间和数据文件的状态同时被修改的(表空间下线了数据文件也下线),还有就是后者并不能用于修改临时表空间和临时文件的状态。
重命名或迁移联机数据文件
迁移语法
ALTER   DATABASE   MOVE   DATAFILE...
可选参数REUSE:如果目标目录有同名文件添加了REUSE参数则会覆盖,否则会报错。
可选参数KEEP:如果原目录还想保留数据文件,添加KEEP参数即可。
注:
当文件是离线时迁移会出现报错;
当从数据库的数据文件迁移到主数据库时,从数据库是不受影响的;
windows平台的oracle做数据文件迁移时即使不用keep参数,旧文件还是会存在其旧目录;
闪回操作并不能将数据文件搬回原来的地方。
例:
ALTER   DATABASE   MOVE   DATAFILE   '/u01/oracle/rbdb1/user1.dbf'
TO   '/u01/oracle/rbdb1/user01.dbf';        --重命名数据文件
ALTER   DATABASE   MOVE   DATAFILE   '/u01/oracle/rbdb1/user1.dbf'
TO   '/u02/oracle/rbdb1/user1.dbf';        --将数据文件搬到别的目录
ALTER   DATABASE   MOVE   DATAFILE   '/u01/oracle/rbdb1/user1.dbf'
TO   '/u02/oracle/rbdb1/user1.dbf'   KEEP;        --移动数据文件并保留原目录的文件
ALTER   DATABASE   MOVE   DATAFILE   '/u01/oracle/rbdb1/user1.dbf'
TO   '/u02/oracle/rbdb1/user1.dbf'   REUSE;        --移动数据文件并覆盖另外一个目录有相同名字的文件
ALTER   DATABASE   MOVE   DATAFILE   '/u01/oracle/rbdb1/user1.dbf'
TO   '+dgroup_01/data/orcl/datafile/user1.dbf';        --将数据文件从普通的目录移动到ASM目录
ALTER   DATABASE   MOVE   DATAFILE   '+dgroup_01/data/orcl/datafile/user1.dbf'
TO   '+dgroup_02/data/orcl/datafile/user1.dbf';        --将数据文件从ASM目录移动到另外一个ASM目录
当然也可以用Oracle ASM来移动数据文件,移动后可以把原位置的删除;这种方法的优点就是它比用语句ALTER   DATABASE   MOVE   DATAFILE 移动更快些。
重命名或迁移脱机数据文件
重命名离线数据文件时,其文件名和物理位置并不会真正改变,只是改变控制文件上的记录而已。重命名或迁移单个表空间数据文件用ALTER  TABLESPACE语句,多个则用ALTER   DATABASE   RENAME   FILE语句。
重命名或迁移单个表空间的数据文件
重命名步骤
1、让表空间下线
ALTER   TABLESPACE   users   OFFLINE   NORMAL;        --让表空间下线
2、在操作系统更改相应数据文件的名字
mv  /u02/oracle/rbdb1/user1.dbf    /u02/oracle/rbdb1/user01.dbf        
mv  /u02/oracle/rbdb1/user2.dbf    /u02/oracle/rbdb1/user02.dbf        --在操作系统上用命令修改文件名
3.用ALTER   TABLESPACE   tbs_name   RENAME   DATAFILE语句重命名(实质是修改控制文件上的记录)
ALTER   TABLESPACE   users
RENAME   DATAFILE   '/u02/oracle/rbdb1/user1.dbf',
                                         '/u02/oracle/rbdb1/user2.dbf'
                                   TO '/u02/oracle/rbdb1/users01.dbf',
                                         '/u02/oracle/rbdb1/users02.dbf';        --修改控制文件记录
4、备份数据库
5、让表空间重新上线
ALTER   TABLESPACE   users   ONLINE;        --表空间重新上线        
迁移步骤
1、确定数据文件的位置
SELECT   FILE_NAME,   BYTES FROM   DBA_DATA_FILES   WHERE   TABLESPACE_NAME = 'USERS';        --查询表空间数据文件的位置
2、表空间下线
ALTER   TABLESPACE   users   OFFLINE   NORMAL;        --下线表空间
3、在操作系统移动数据文件到目标位置
mv   '/u02/oracle/rbdb1/users01.dbf'   '/u03/oracle/rbdb1/users01.dbf'
mv   '/u02/oracle/rbdb1/users02.dbf'   '/u04/oracle/rbdb1/users02.dbf'        --用命令移动数据文件
4、修改控制文件的记录
ALTER   TABLESPACE   users
RENAME   DATAFILE   '/u02/oracle/rbdb1/users01.dbf',
                                         '/u02/oracle/rbdb1/users02.dbf'
                                  TO '/u03/oracle/rbdb1/users01.dbf',
                                         '/u04/oracle/rbdb1/users02.dbf';        --修改控制文件记录
5、备份数据库
6、表空间重新上线
ALTER   TABLESPACE   users   ONLINE        --重新上线表空间
重命名或迁移单个表空间的数据文件
因为系统表空间中的临时表空间和正在使用的重做表空间不能下线,所以只能用ALTER
DATABASE 语句重命名或迁移。
重命名步骤
1、确保数据库已经处于挂载和关闭状态,(数据库关闭状态是可选的,但是数据文件一定要下线)
2、在操作系统更改文件名
mv   '/u02/oracle/rbdb1/sort01.dbf'   '/u02/oracle/rbdb1/temp01.dbf'
mv   '/u02/oracle/rbdb1/user3.dbf'   '/u02/oracle/rbdb1/users03.dbf'        --用命令修改文件名
3、修改控制文件的记录
ALTER   DATABASE
RENAME   FILE   '/u02/oracle/rbdb1/sort01.dbf',
                              '/u02/oracle/rbdb1/user3.dbf'
                     TO   '/u02/oracle/rbdb1/temp01.dbf',
                              '/u02/oracle/rbdb1/users03.dbf';        --修改控制文件记录
4、备份数据库
迁移步骤同重命名差不多,不再赘述。
删除数据文件
数据文件在没有任何关联其他东西的情况下才能被删除,数据文件一旦被删除数据库表及控制文件的相关记录也会同时被删除,物理文件也将从系统中删除。
语法
ALTER   TABLESPACE   ...   [DROP DATAFILE | DROP TEMPFILE ]
例
ALTER   TABLESPACE  example   DROP   DATAFILE   '+DGROUP1/example_df3.f';        --从Oracle ASM中删除DGROUP1
ALTER   TABLESPACE   lmtemp   DROP   TEMPFILE   '/u02/oracle/data/lmtemp02.dbf';        --删除表空间lmtemp的数据文件
与上一条语句的效果相同
ALTER   DATABASE   TEMPFILE   '/u02/oracle/data/lmtemp02.dbf'   DROP
  INCLUDING   DATAFILES;        --删除表空间lmtemp的数据文件
注:
数据库必须是打开的;
数据文件必须是空的;
如果数据文件是表空间的第一个或者是唯一的一个数据文件,那么数据文件将不能被删除;
除了不能删除从本地管理目录迁移过来的只读表空间外,可以删除其他只读表空间;
系统表空间的数据文件不能被删除。
 
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 
