表空间数据文件的管理

数据文件的管理
数据文件的管理主要包括创建、修改和删除这几个大的方面。创建数据文件主要考虑文件的数量、大小以及文件的存放的位置等(主要不能和重做日志文件放在同一个磁盘,因为一旦磁盘坏了数据就永远恢复不过来了)。

查看数据文件的视图
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的数据文件

注:
数据库必须是打开的;
数据文件必须是空的;
如果数据文件是表空间的第一个或者是唯一的一个数据文件,那么数据文件将不能被删除;
除了不能删除从本地管理目录迁移过来的只读表空间外,可以删除其他只读表空间;
系统表空间的数据文件不能被删除。

原文地址:https://www.cnblogs.com/Jace06/p/6770632.html