数据文件管理
Oracle数据文件包含全部数据库数据。改变数据文件属性、增加数据文件、查看数据文件的数据字典等操作都只能由DBA完成,普通用户无此权限。
1.查看数据文件信息
在Oracle Enterprise Manager中可以查看数据文件信息。以SYSDBA身份登录到Oracle Enterprise Manager,在“服务器”——>“存储”栏目中单击“数据文件”超链接,打开“数据文件”管理页面,如图所示:
列表中显示了当前数据库实例中所有数据文件的基本信息。单击一个数据文件超链接,可以查看它的明细信息,如图所示:
文件的状态有4种,包括OFFLINE、ONLINE、SYSTEM、RECOVER和SYSOFF(表示SYSTEM表空间中的脱机文件)
也可以从视图VDATAFILE中有一个字段ENABLED,表示从SQL语句中如何访问文件:DISABLED表示不允许SQL访问;READ ONLY表示不允许更新访问;READ WRITE表示允许完全访问;UNKNOWN表示文件被破坏。
2.创建数据文件
数据文件是和表空间一起创建的。在使用CREATE TABLESPACE语句创建表空间时,可以使用DATAFILE关键字来制定同时创建的数据文件。
使用ALTER TABLESPACE语句修改表空间时,可以使用ADD DATAFILE关键字向表空间中添加数据文件。
【示例】对tbs2表空间添加一个数据文件tbs01.dbf,大小为5MB:
alter tablespace tbs2
add datafile 'e:\oradata\tbs02.dfs' size 5m;
3.修改数据文件属性
①修改数据文件的大小
使用ALTER DATABASE语句可以修改数据文件的大小,语法如下:
-- 数据文件名必须为数据文件的物理绝对路径
ALTER DATABASE DATAFILE 数据文件名 RESIZE 数据文件大小;
②修改数据文件的在线状态
-- 数据文件名必须为数据文件的物理绝对路径
ALTER DATABASE DATAFILE 数据文件名 ONLINE|OFFLINE;
③改变数据文件自动增长属性
-- MAXSIZE表示允许数据文件增长的最大限度
ALTER DATABASE DATAFILE 数据文件名
AUTOEXTENT ON NEXT 整数[单位]
MAXSIZE 整数[单位];
4.删除数据文件
在删除表空间时,可以指定删除表空间中的数据文件。
注意,从表空间中删除数据文件时,当数据文件处于以下3种情况时是不能被删除的:
- 数据文件中存在数据。
- 数据文件是表空间中唯一的或第一个数据文件。因为第一个数据文件是表空间创建时生成的表空间文件,如果需要删除第一个文件,就需要把表空间删除掉。
- 数据文件或数据文件所在的表空间处于只读状态。
可以使用ALTER DATABASE命令删除指定的数据文件。语法如下:
-- 数据文件名必须为数据文件的物理绝对路径
ALTER DATABASE DATAFILE 数据文件名 OFFLINE DROP;
但上面的命令不会删除数据文件,只是将数据文件的状态更改为RECOVER。 OFFLINE DROP命令相当于把一个数据文件至于离线状态,并且需要恢复,并非删除数据文件,数据文件的相关信息还会存在数据字典和控制文件中。
如果想删除磁盘上的文件,可以使用下面的命令:
ALTER TABLESPACE 表空间名 DROP DATAFILE 数据文件名;
上面的命令会删除控制文件和磁盘上的文件,删除之后的原数据文件序列号可以重用。注意,该语句只能是datafile online的时候才可以使用。
5.移动数据文件
移动数据文件有两个办法:
- 方法一:先是把表空间脱机,然后在操作系统上移动数据文件,并修改数据库对此文件路径的记载,再把表空间联机,这种方法不用重启数据库。
- 方法二:重启数据库到mount状态,然后在操作系统上移动数据文件,并修改数据库对此文件路径的记载,再把数据库打开到正常状态。
两个方法都可以同时移动多个文件,第一个方法只能移动一个表空间内的数据文件;第二个方法可以移动数据库内的任意多个文件,这些文件不必属于同一个表空间,只要在操作系统中移动多个数据文件,并在上面的命令中,用逗号分隔多个文件即可。
【示例】把newtbs的数据文件e:\newtbs01.dbf移动到c:\newtbd01.dbf
(1)方法一操作示例
首先把表空间设置为脱机状态:
SQL>alter tablespace newtbs offline;
在操作系统上移动数据文件:
C:\>move e:\newtbs01.dbf c:\newtbd01.dbf
在数据库中重命名移动的数据文件:
SQL>alter tablespace newtbs rename datafile 'e:\newtbs01.dbf' to 'c:\newtbd01.dbf';
最后把表空间联机:
SQL>alter tablespace newtbs online;
确认数据文件移动成功:
SQL>select tablespace_name,file_name from dba_data_files
where tablespace_name='NEWTBS';
(2)方法二操作示例
重启数据库至mount状态:
SQL>shutdown immediate
数据库已经关闭。
已经卸载数据库
ORACLE例程已经关闭。
SQL>startup mount
在操作系统上移动数据文件:
C:\>move e:\newtbs01.dbf c:\newtbd01.dbf
在数据库中重命名移动的数据文件:
-- 注意,这里和第一个方法不一样之处在于这里用的是file关键字而非datafile关键字
SQL>alter tablespace newtbs rename file 'e:\newtbs01.dbf' to 'c:\newtbd01.dbf';
最后启动数据库到open状态:
SQL>alter database open;
6.重命名数据文件
(1)使表空间处于脱机状态。
SQL>ALTER TABLESPACE my_tbs1 OFFLINE NORMAL;
(2)用操作系统命令重命名数据文件。
SQL>HOST RENAME D:\my_tablespace\my_tbs1.dbf my_tbs2.dbf
HOST表示需要在SQL PLUS中执行操作系统命令RENAME
(3)使用带RENAME DATAFILE子句的ALTER TABLESPACE语句改变数据文件名称。
SQL>ALTER TABLESPACE my_tbs1
RENAME DATAFILE 'D:\my_tablespace\my_tbs1.dbf'
TO
'D:\my_tablespace\my_tbs2.dbf'
(4)将表空间重新设置为联机状态
SQL>ALTER TABLESPACE my_tbs1 ONLINE;