在ORACLE中移动数据库文件在ORACLE中移动数据库文件
--ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成。
--由于磁盘空间的变化,或者基于数据库磁盘I/O性能的调整等,
--我們可能会考虑移动数据库文件。
--下面以LUNIX平台为例,分别讨论三种数据库文件的移动方法。
一.移动数据文件:
-- 可以用ALTER DATABASE,ALTER TABLESPACE两种方法移动数据文件。
1. ALTER DATABASE方法;
-- 用此方法,可以移动任何表空间的数据文件。
STEP 1. 下数据库: $ sqlplus /nolog SQL> CONNECT INTERNAL; SQL> SHUTDOWN; SQL> EXIT; STEP 2.用操作系统命令移动数据文件: -- 将数据文件 'test.ora' 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下: $ mv /ora/oracle/data1/test.ora /ora/oracle/data2 STEP 3. Mount数据库,用ALTER DATABASE命令将数据文件改名: $ sqlplus /nolog SQL> CONNECT INTERNAL; SQL> STARTUP MOUNT; SQL> ALTER DATABASE RENAME FILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora'; STEP 4. 打开数据库:. SQL> ALTER DATABASE OPEN; SQL>SELECT NAME,STATUS FROM V$DATAFILE; |
2. ALTER TABLESPACE方法:
-- 用此方法,要求此数据文件既不属于SYSTEM表空间,也不属于含有ACTIVE回滚段或临时段的表空间。
STEP1. 将此数据文件所在的表空间OFFLINE: $ sqlplus /nolog SQL> CONNECT INTERNAL; SQL> ALTER TABLESPACE test OFFLINE; SQL> EXIT; STEP2. 用操作系统命令移动数据文件: 将数据文件 'test.ora' 从/ora/oracle/ data1目录移动到/ora/oracle/data2目录下: $ mv /ora/oracle/data1/test.ora /ora/oracle/data2 STEP3. 用ALTER TABLESPACE命令改数据文件名: $ sqlplus /nolog SQL> CONNECT INTERNAL; SQL> ALTER TABLESPACE test RENAME DATAFILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora'; STEP4. 将此数据文件所在的表空间ONLINE: SQL> ALTER TABLESPACE test ONLINE; SQL> SELECT NAME,STATUS FROM V$DATAFILE; |
二. 移动控制文件:
-- 控制文件 在 INIT.ORA文件中指定。移动控制文件相对比较简单,下数据库,
-- 编辑INIT.ORA,移动控制文件,重启动数据库。
STEP 1. 下数据库: $ sqlplus /nolog SQL> CONNECT INTERNAL; SQL> SHUTDOWN; SQL> EXIT;
STEP 2.用操作系统命令 移动控制文件:
--将控制文件'ctl3orcl.ora' 从/ora/oracle/data1目录移动到/ora/oracle/data2目录下:
$ mv /ora/oracle/data1/ctrlorcl3.ora /ora/oracle/data2
STEP 3. 编辑INIT.ORA文件:
INIT.ORA文件的在$ORACLE_HOME/dbs目录下,
修改参数 "control_files",其中指定移动后的控制文件:
control_files = (/ora/oracle/data1/ctrlorcl1.ora,/ora/oracle/data1/ctrlorcl2.ora,/ora/oracle/data2/ctrlorcl3.ora)
STEP 4. 重启动数据库:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> STARTUP;
SQL>SELECT name FROM V$CONTROLFILE;
SQL> EXIT; |
按Oracle原理,启动过程分为三个步骤nomount/mount/open.
PHASE0:nomount前,即数据库完全关闭了.
此时可以将数据库control files/data files/redo log files在OS下用mv命令任意移动(实际上,只要未被open的文件都是可以mv的),然后根据各种file
location在Oracle中的存放位置,采用不同的方式来告诉Oracle:"偶已将原文件移动到另一个地方了".
其中初始参数文件中的control_files参数指定了具体的control
file的location.所以移动了control file可在参数文件被open前直接改参数值Oracle就明白了.(PFILE/SPFILE的具体使用此处不多累赘).
PHASE1:nomount阶段. 打开了初始参数文件和backupground_dump_dest下的
alert_sid.log和background processes 的trace files.
PHASE2:mount阶段是打开了control file.
control file中存放的东东如下:
Database name and identifier Time stamp of database creation Tablespace names Names and locations of data files and redo log files Current redo log file sequence number Checkpoint information Begin and end of undo segments Redo log archive information Backup information |
所以偶们在PHASE0中所做操作就得在PHASE3真正open这些文件之前,告诉Oracle(因为信息记录在control
file中,所以又得在PHASE2中,control file被open后做),偶们已改了file location.
于是可用alter database的data file clause或log file clause的rename
命令来更新control file,于是Oracle会在PHASE3时,到新file location去找相应的文件.
PHASE3:open阶段打开所有非offline的data files和redo log files.
因为文件已打开了.所以此时,只能对已经offline或还可以offline的文件作rename操作.原理也是通过更新control
file中的内容来告诉Oracle:File location has been changed. |