参照春暖花开同志的文章加上自己的实践
A.oracle启动
1)查看那个数据文件所在的表空间还包含有哪些数据文件,执行以下查询:
select file_name,status from dba_data_files where tablespace_name='SGCUSS';
执行结果:
FILE_NAME STATUS
/data/SGCUSS.dbf AVAILABLE
状态是可用,这是操作的首选条件
2)将表空间设为只读状态
alter tablespace "SGCUSS" read only;
3)确定表空间已经为只读
select tablespace_name,status from dba_tablespaces where tablespace_name='SGCUSS';
结果
TABLESPACE_NAME STATUS
------------------------------ ---------
SGCUSS READ ONLY
4)这时把数据文件复制到另外一个目录,然后将表空间重命名
alter database rename file 'old_path' to 'new_path';
5)将表空间online
alter tablespace "SGCUSS" online;
这里有两点要注意 一是表空间名外要用双引号,二是如果执行后出现
ORA-01113: file 11 needs media recovery
ORA-01110: data file 11: '/data/SGCUSS.dbf'
这说明可能是先把数据文件进行复制的结果,可以先shutdown normal关闭数据库,然后
startup mount
接着恢复数据文件
recover datafile '/data/SGCUSS.dbf';
最后alter database open再执行online操作即可。
6)将表空间恢复为读写状态
alter tablespace "SGCUSS" read write;
7)将旧的数据文件删除
B.oracle未启动
1)将数据文件拷贝到新的位置
2)startup mount 这样启动会只读取控制文件而不读取数据库文件,可以对数据文件进行相关操作
3)alter database rename file 'old_path' to 'new_path';
4)alter database open;