某天晚上,被告之数据库不能正常使用,sqlplus登陆的时候,报错,没有空间,然后去服务器上看,df,果然100%。这就是把数据文件和oracle安装目录装一起的坏处。忍痛删掉几kb文件之后,能用dba登陆,然后想到个方案,把数据文件转移到空闲的其他区。用mv命令,转移之后依然100%。绝望的把对应的tablespace rename在新位置,并且online之后,关库,重启服务器,发现df能正确的显示百分比了,随即一点一点的挪完。途中还碰到ORA-01525 ora-01533 等错误,在rename的时候,只能不移对应的数据文件,还原回去online。
收集一下网上正确移动数据文件的方法如下:
如果数据库处于非归档模式下,可以通过如下步骤更改文件路径:
1.关闭数据库
2.系统级进行文件复制
3.启动数据库到mount状态
3.通过SQL修改数据文件位置
4.打开数据库
以下是实际操作的步骤示范:
1.数据库处于非归档模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 150
Current log sequence 153
|
2.需要移动test.dbf文件
SQL> select name from v$datafile;
NAME
------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
/opt/oracle/test.dbf
|
3.关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
|
4.复制文件到新的位置
SQL> ! cp /opt/oracle/test.dbf /opt/oracle/oradata/conner/test.dbf
|
5.启动数据库到mount状态
SQL> startup mount;
ORACLE instance started.
Total System Global Area 101782828 bytes
Fixed Size 451884 bytes
Variable Size 37748736 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> select name from v$datafile;
NAME
-----------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
/opt/oracle/test.dbf
|
6.修改文件位置
SQL> alter database rename file '/opt/oracle/test.dbf' to '/opt/oracle/oradata/conner/test.dbf';
Database altered.
SQL> alter database open;
Database altered.
SQL> select name from v$datafile;
NAME
----------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
/opt/oracle/oradata/conner/test.dbf
SQL>
|
采用offline的方式
第一步,将表空间offline
alter tablespace
tablespace_name offline;
第二步,cp文件到新的目录并rename修改控制文件
第三步,将相应表空间online
当然这种方式同样会影响期间的表空间使用。
以下是简单的示范步骤:
1.将表空间offline
[oracle@jumper oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Sat Nov 12 18:14:21 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 6
Current log sequence 9
SQL> select name from v$datafile;
NAME
---------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
SQL> alter tablespace users offline;
Tablespace altered.
|
2.拷贝相应的数据文件
SQL> ! cp /opt/oracle/oradata/conner/users01.dbf /opt/oracle/oradata/users01.dbf
SQL> alter tablespace users rename datafile '/opt/oracle/oradata/conner/users01.dbf'
to '/opt/oracle/oradata/users01.dbf';
Tablespace altered.
|
3.将表空间online
SQL> alter tablespace users online;
Tablespace altered.
SQL> select name from v$datafile;
NAME
------------------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/users01.dbf
|
当然还有一些其他的方法可以采用.
以上两种方法,可能在要求较高的24x7系统中不适合采用,因为会使表空间长时间不可用。
特别是当表空间数据文件巨大时,物理拷贝可能需要较长的时间。
本文推荐另外一种方法,可以做一个折中,以下是一个简单的步骤说明:
1.将表空间置于只读
只读状态可以使数据仍然可为用户访问.
alter tablespace tablespace_name read only;
2.物理拷贝文件
3.将表空间offline
alter tablespace
tablespace_name offline;
4.rename数据文件
alter database rename file
'old_dir_file' to
'new_dir_file';
5.将表空间联机
alter tablespace
tablespace_name online;
6.将表空间置于read write模式
alter tablespace
tablespace_name read write;
以下是示范步骤:
1.将表空间置于只读状态
[oracle@jumper oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Sat Nov 12 21:10:49 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 7
Next log sequence to archive 10
Current log sequence 10
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
SQL> alter tablespace users read only;
Tablespace altered.
|
2.物理拷贝文件
SQL> ! cp /opt/oracle/oradata/conner/users01.dbf /opt/oracle/oradata/users01.dbf
|
3.将表空间脱机
SQL> alter tablespace users offline;
Tablespace altered.
|
4.修改文件名称
SQL> alter database rename file '/opt/oracle/oradata/conner/users01.dbf' to '/opt/oracle/oradata/users01.dbf';
Database altered.
|
5.将表空间联机
SQL> alter tablespace users online;
Tablespace altered.
|
6.将表空间置于读写状态
SQL> alter tablespace users read write;
Tablespace altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/users01.dbf
SQL>
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29797586/viewspace-1270130/
,如需转载,请注明出处,否则将追究法律责任。