您的位置:首页 > 数据库 > Oracle

oracle中如何移动控制文件,数据文件,日志文件

2011-10-23 19:48 519 查看
ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成。

windows环境中用: host copy 或 host move 其它均相同。

以下是unix或[b]linux
[/u]环境中,[/b]
一.移动数据文件:
ALTER TABLESPACE方法(联机状态):

用此方法,要求此数据文件既不属于SYSTEM表空间,也不属于含有ACTIVE回滚段或临时段的表空间。

$ sqlplus '/as sysdba'

#把需要移动的数据文件对应的表空间offline

SQL> alter tablespace ipas_acct_data offline

#把数据文件cp到想要放的目录下。

SQL> !mv /opt/oracle/wacosdata/ipas_acct_data001.dbf /opt/oracle/nms/oradata/ipas_acct_data001.dbf

#修改表空间中[b]数据库
[/u]文件的位置。

SQL> alter tablespace ipas_acct_data rename datafile '/opt/oracle/wacosdata/ipas_acct_data001.dbf' to '/opt/oracle/nms/oradata/ipas_acct_data001.dbf'

#把表空间online。

SQL> alter tablespace ipas_acct_data online

#查看修改结果。

SQL> select file_name from dba_data_files where tablespace_name = 'IPAS_ACCT_DATA';[/b]
ALTER [b]DATABASE[/u]方法(脱机状态):

用此方法,可以移动任何表空间的数据文件。

$ sqlplus '/as sysdba'

SQL> shutdown immediate

SQL> !mv /opt/oracle/oradata/wacos002.dbf /ora10g/oradata/wacos002.dbf

SQL> startup mount

SQL> alter database rename file '/opt/oracle/oradata/wacos002.dbf' to '/ora10g/oradata/wacos002.dbf';

SQL> alter database open;

SQL> set head off

SQL> SELECT file_name from dba_data_files where tablespace_name = 'WACOS';[/b]
二. 移动控制文件:
$ sqlplus '/as sysdba'

#我是用的spfile启动的,spfile文件不能修改,所以要做这一步。

SQL> create pfile from spfile

#关闭数据库。

SQL> shutdown immediate

#cp控制文件到目标位置。

SQL>cp /opt/oracle/oradata/control* /opt/oracle/oratest/

修改$ORACLE_HOME/dbs/init$ORACLE_SID.ora 文件中的控制文件的位置。

#启动数据库指定参数文件。

SQL> startup pfile='/opt/oracle/product/9.2.0.4/dbs/init$ORACLE_SID.ora'

#下次启动数据库是直接就可以用startup启动了。

SQL> create spfile from pfile;

三. 移动重做日志文件:
$ sqlplus '/as sysdba'

#关闭数据库。

SQL> shutdown immediate

#cp日志文件到目标位置。

SQL> !cp /opt/oracle/oradata/redo* /opt/oracle/oratest/

#让数据库以mount模式启动。

SQL>startup mount;

#修改数据库中日志文件的位置。

SQL> alter database rename file '/opt/oracle/oradata/redo01.log' to '/opt/oracle/oratest/redo01.log'

SQL> alter database rename file '/opt/oracle/oradata/redo02.log' to '/opt/oracle/oratest/redo02.log'

SQL> alter database rename file '/opt/oracle/oradata/redo03.log' to '/opt/oracle/oratest/redo03.log'

#修改数据库的状态。

SQL> alter database open;

#查看修改结果。

SQL> select * from v$logfile;


====================================================================================

注意:TEMP数据文件不能移动,只能通过重建临时表空间来重建,方法如下:

尤其值得注意:重建临时表空间的大小一定要足够大,一定要大于或等于现有临时表空间的大小,否则会出现:提示:无法通过128(在表空间temp中)扩展 temp段。

====================================================================================

Oracle9i为我们提供了一个全局的临时表空间。有的时候我们会发现在做了大量的排序操作后,temp表空间并没有去释放,而且在更大的程度上面占用了我们的磁盘空间,其实我们可以通过重建或者切换的手段来使我们的temp表空间得到重生。

首先我们可以先看一下,当前用户所属的临时表空间有那些

SQL> select username ,temporary_tablespace from dba_users;

USERNAME TEMPORARY_TABLESPACE

------------------------------ ------------------------------

SYS TEMP

SYSTEM TEMP

DBSNMP TEMP

HUJINPEI TEMP

ALAN1 TEMP

PERFUSER TEMP

ALAN2 TEMP

MYUSER TEMP

OUTLN TEMP

WMSYS TEMP

已选择10行。
查看当前有那些临时文件

SQL> select name from v$tempfile;

NAME

--------------------------------------------------------------------------------

D:\ORACLE\ORADATA\ICMNLSDB\TEMP_01.DBF

D:\ORACLE\ORADATA\ICMNLSDB\TEMP_02.DBF

为了切换这个临时文件,我们可以重新建立一个临时表空间

SQL> create temporary tablespace temp2 tempfile 'D:\ORACLE\ORADATA\ICMNLSDB\TEMP01.DBF' size 10M ;

表空间已创建。
SQL> alter tablespace temp2 add tempfile 'D:\ORACLE\ORADATA\ICMNLSDB\TEMP02.DBF' size 10M;
表空间已更改。
这个时候我们就可以将刚刚建好的TEMP表空间设置为我们数据库默认的临时表空间:

SQL> alter database default temporary tablespace temp2;

数据库已更改。
SQL> select username,temporary_tablespace from dba_users;
USERNAME TEMPORARY_TABLESPACE

------------------------------ ---------------------------

SYS TEMP2

SYSTEM TEMP2

DBSNMP TEMP2

HUJINPEI TEMP2

ALAN1 TEMP2

PERFUSER TEMP2

ALAN2 TEMP2

MYUSER TEMP2

OUTLN TEMP2

WMSYS TEMP2

已选择10行。
当然我们还可以选择DROP掉以前旧的TEMP的表空间

SQL> drop tablespace temp including contents ;

表空间已丢弃。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: