Oracle数据文件位置迁移笔记

本文详细介绍了一次从E盘到D盘的Oracle数据库迁移过程,包括数据文件、日志文件及控制文件的迁移步骤,并记录了在Windows Server 2003环境下使用Oracle 9.2.0.1.0版本进行非归档模式迁移的具体操作。

最近频繁在进行数据大迁移,下面是从E:/ORACLE/SONBWEB下把数据文件、日志文件和控制文件完全迁移到D:/oracle/oradata/SONBWEB下。

操作系统:Windows Server 2003

Oracle Version:9.2.0.1.0。

 

下为非归档模式的迁移过程:


D:>sqlplus "/as sysdba"

SQL
*Plus: Release 9.2.0.1.0 - Production on 星期日 1月 7 23:11:54 2007

Copyright (c) 
19822002, Oracle Corporation.  All rights reserved.

已连接到空闲例程。

SQL
> select * from v$datafile;
select * from v$datafile
*
ERROR 位于第 1 行:
ORA
-01034: ORACLE not available


SQL
> startup;
ORACLE 例程已经启动。

Total System Global Area  
126950220 bytes
Fixed Size                   
453452 bytes
Variable Size             
109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 
667648 bytes
数据库装载完毕。
数据库已经打开。
SQL
> select name from v$datafile;

NAME
--------------------------------------------------------------------------------

E:ORACLESONBWEBSYSTEM01.DBF
E:ORACLESONBWEBUNDOTBS01.DBF
E:ORACLESONBWEBCWMLITE01.DBF
E:ORACLESONBWEBDRSYS01.DBF
E:ORACLESONBWEBEXAMPLE01.DBF
E:ORACLESONBWEBINDX01.DBF
E:ORACLESONBWEBODM01.DBF
E:ORACLESONBWEBTOOLS01.DBF
E:ORACLESONBWEBUSERS01.DBF
E:ORACLESONBWEBXDB01.DBF
E:ORACLESONBWEBHOUSEWEB.ORA

NAME
--------------------------------------------------------------------------------

E:ORACLESONBWEBSDE.DBF
E:ORACLESONBWEBREALSTAR.ORA

已选择13行。

SQL
> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------

E:ORACLESONBWEBCONTROL01.CTL
E:ORACLESONBWEBCONTROL02.CTL
E:ORACLESONBWEBCONTROL03.CTL

SQL
> select * from v$logfile;

    
GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
--------------------------------------------------------------------------------

         3 STALE   ONLINE
E:ORACLESONBWEBREDO03.
LOG

         
2         ONLINE
E:ORACLESONBWEBREDO02.
LOG

         
1 STALE   ONLINE
E:ORACLESONBWEBREDO01.
LOG


SQL
> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL
> host copy E:ORACLESONBWEB*.dbf D:oracleoradataSONBWEB;
E:ORACLESONBWEBCWMLITE01.DBF
E:ORACLESONBWEBDRSYS01.DBF
E:ORACLESONBWEBEXAMPLE01.DBF
E:ORACLESONBWEBINDX01.DBF
E:ORACLESONBWEBODM01.DBF
E:ORACLESONBWEBSDE.DBF
E:ORACLESONBWEBSYSTEM01.DBF
E:ORACLESONBWEBTEMP01.DBF
E:ORACLESONBWEBTOOLS01.DBF
E:ORACLESONBWEBUNDOTBS01.DBF
E:ORACLESONBWEBUSERS01.DBF
E:ORACLESONBWEBXDB01.DBF
已复制        
12 个文件。

SQL
> host copy E:ORACLESONBWEB*.ora D:oracleoradataSONBWEB;
E:ORACLESONBWEBHOUSEWEB.ORA
E:ORACLESONBWEBREALSTAR.ORA
已复制         
2 个文件。

SQL
> host copy E:ORACLESONBWEB*.ctl D:oracleoradataSONBWEB;
E:ORACLESONBWEBCONTROL01.CTL
E:ORACLESONBWEBCONTROL02.CTL
E:ORACLESONBWEBCONTROL03.CTL
已复制         
3 个文件。

SQL
> host copy E:ORACLESONBWEB*.log D:oracleoradataSONBWEB;
E:ORACLESONBWEBREDO01.
LOG
E:ORACLESONBWEBREDO02.LOG
E:ORACLESONBWEBREDO03.LOG
已复制         3 个文件。

SQL
> create pfile from spfile;

文件已创建。

 编辑生成的pfile即INIT<SID>.ORA默认在$Oracle_HOME/database下。此例中为INITsonbweb.ORA。将文件中控制文件的路径改成迁移后的路径。

 

SQL> create spfile from pfile;

文件已创建。

 

 

SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  
126950220 bytes
Fixed Size                   
453452 bytes
Variable Size             
109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 
667648 bytes
数据库装载完毕。

 

SQL> alter database rename file 'E:ORACLESONBWEBSYSTEM01.DBF'
  
2  to 'D:oracleoradataSONBWEBsystem01.dbf';

数据库已更改。

  SQL> alter database rename file 'E:ORACLESONBWEBCWMLITE01.DBF'
  
2  to 'D:oracleoradataSONBWEBcwmlite01.dbf';

数据库已更改。


SQL> alter database rename file 'E:ORACLESONBWEBDRSYS01.DBF'
  
2  to 'D:oracleoradataSONBWEBdrsys01.dbf';

数据库已更改。

SQL> alter database rename file 'E:ORACLESONBWEBEXAMPLE01.DBF'
  
2  to 'D:oracleoradataSONBWEBexample01.dbf';

数据库已更改。

SQL> alter database rename file 'E:ORACLESONBWEBINDX01.DBF'
  
2  to 'D:oracleoradataSONBWEBindx01.dbf';

数据库已更改。
SQL> alter database rename file 'E:ORACLESONBWEBODM01.DBF'
  
2  to 'D:oracleoradataSONBWEBodm01.dbf';

数据库已更改。

SQL> alter database rename file 'E:ORACLESONBWEBTOOLS01.DBF'
  
2  to 'D:oracleoradataSONBWEB ools01.dbf';

数据库已更改。
  SQL> alter database rename file 'E:ORACLESONBWEBUSERS01.DBF'
  
2  to 'D:oracleoradataSONBWEBusers01.dbf';
数据库已更改。

SQL
> alter database rename file 'E:ORACLESONBWEBXDB01.DBF'
  
2  to 'D:oracleoradataSONBWEBsdb01.dbf';
alter database rename file 'E:ORACLESONBWEBXDB01.DBF'
*
ERROR 位于第 
1 行:
ORA-
01511: 重命名日志/数据文件时出错
ORA-
01141: 重命名数据文件 10 时出错 - 未找到新文件
'D:
oracleoradataSONBWEBsdb01.dbf'
ORA-
01110: 数据文件 10: 'E:ORACLESONBWEBXDB01.DBF'
ORA-
27041: 无法打开文件
OSD-
04002: 无法打开文件
O
/S-Error: (OS 2) 系统找不到指定的文件。

SQL
> alter database rename file 'E:ORACLESONBWEBXDB01.DBF'
  
2  to 'D:oracleoradataSONBWEBxdb01.dbf';
数据库已更改。

SQL
> alter database rename file 'E:ORACLESONBWEBHOUSEWEB.ORA'
  
2  to 'D:oracleoradataSONBWEBhouseweb.ora';
数据库已更改。

SQL
> alter database rename file 'E:ORACLESONBWEBsde.dbf'
  
2  to 'D:oracleoradataSONBWEBsde.dbf';
数据库已更改。

SQL
> alter database rename file 'E:ORACLESONBWEBREALSTAR.ORA'
  
2  to 'D:oracleoradataSONBWEBREALSTAR.ORA';
数据库已更改。

SQL
> alter database rename file 'E:ORACLESONBWEBREDO01.LOG'
  
2  to 'D:oracleoradataSONBWEBREDO01.LOG';
数据库已更改。

SQL
> alter database rename file 'E:ORACLESONBWEBREDO02.LOG'
  
2  to 'D:oracleoradataSONBWEBREDO02.LOG';
数据库已更改。

SQL
> alter database rename file 'E:ORACLESONBWEBREDO03.LOG'
  
2  to 'D:oracleoradataSONBWEBREDO03.LOG';
数据库已更改。

 

临时文件更改无效,必须删除原先的临时文件重新生成。 

SQL> startup;
ORA
-01081: 无法启动已在运行的 ORACLE --- 请首先关闭
SQL> shutdown immediate;
ORA
-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。
SQL
> startup;
ORACLE 例程已经启动。

Total System Global Area  
126950220 bytes
Fixed Size                   
453452 bytes
Variable Size             
109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 
667648 bytes
数据库装载完毕。
数据库已经打开。
SQL
> select * from v$tempfile;

     
FILE# CREATION_CHANGE# CREATION_T        TS#     RFILE# STATUS  ENABLED
---------- ---------------- ---------- ---------- ---------- ------- ----------
     BYTES     BLOCKS CREATE_BYTES BLOCK_SIZE
---------- ---------- ------------ ----------
NAME
--------------------------------------------------------------------------------

         3                0                     2          3 ONLINE  READ WRITE
  
10485760       1280     10485760       8192
E:ORACLESONBWEBTEMP01.DBF


SQL
> alter database tempfile 'E:ORACLESONBWEBTEMP01.DBF' drop;

数据库已更改。

SQL
> alter tablespace temp add tempfile 'D:oracleoradataSONBWEBTEMP01.ora' s
ize 100M reuse;

表空间已更改。

SQL
> select * from v$tempfile;

     
FILE# CREATION_CHANGE# CREATION_T        TS#     RFILE# STATUS  ENABLED
---------- ---------------- ---------- ---------- ---------- ------- ----------
     BYTES     BLOCKS CREATE_BYTES BLOCK_SIZE
---------- ---------- ------------ ----------
NAME
--------------------------------------------------------------------------------

         1                0                     2          1 ONLINE  READ WRITE
 
104857600      12800    104857600       8192
D:ORACLEORADATASONBWEBTEMP01.ORA


SQL
>

迁移完成.

<think>好的,用户现在需要了解在Windows系统上迁移Oracle数据库存储的方法和步骤。我需要根据提供的引用资料和已有的知识来构建一个清晰的步骤指南。 首先,我得确认用户的环境是Windows,所以路径的写法会与Linux不同,比如使用反斜杠和盘符。引用中提到的`alter tablespace`和`alter database rename file`命令是关键,这些命令用于重命名数据文件和控制文件,适用于迁移存储位置。 接下来,用户可能需要分步骤的操作流程。根据引用[1]、[2]、[4]中的例子,迁移步骤大致包括:停止数据库、移动文件、更新控制文件、重命名文件等。需要将这些步骤按顺序组织,并注意Windows系统的特定路径格式。 另外,引用[3]提到了达梦数据库迁移,但用户的问题是关于Oracle本身的存储迁移,所以这部分可能暂时不需要,但可以留意是否有跨平台迁移的可能性,不过当前需求是Windows下的Oracle,所以先专注于Oracle自身。 需要考虑冷迁移和热迁移的区别。用户提到的是冷迁移,因此需要确保数据库在关闭状态下进行文件移动。如果是热迁移,可能需要将表空间设置为只读或使用备份模式,但根据引用中的例子,冷迁移更直接。 需要提醒用户备份的重要性,防止迁移过程中出现意外。此外,权限问题在Windows系统中也很重要,确保Oracle服务账户有权限访问新目录。 可能的问题点包括:路径是否正确,文件是否成功移动,控制文件是否更新,日志文件是否需要处理等。需要详细说明每个步骤的验证方法,比如启动数据库后检查文件位置或查询数据字典视图。 最后,生成相关问题,比如性能优化、不同迁移方法的比较、处理迁移中的错误等,帮助用户进一步了解相关主题。</think>### Windows系统Oracle数据库存储迁移步骤 #### 一、前期准备 1. **备份数据库** 执行全库备份(包括控制文件、数据文件日志文件)以防止迁移失败造成数据丢失[^4]。 2. **确认目标路径权限** 确保新目录(如`D:\new_storage\`)对Oracle服务账户(如Windows服务中的`OracleServiceORCL`)具有完全控制权限。 3. **记录原文件路径** ```sql SELECT name FROM v$datafile; -- 查询所有数据文件路径 SELECT member FROM v$logfile; -- 查询所有日志文件路径 SELECT name FROM v$controlfile; -- 查询控制文件路径 ``` #### 二、冷迁移流程(数据库关闭状态) 1. **停止Oracle服务** ```bat net stop OracleServiceORCL net stop OracleOraDb11g_home1TNSListener ``` 2. **移动物理文件** - 将原文件(如`C:\app\oracle\oradata\ORCL\*.dbf`)手动复制到新目录(如`D:\new_storage\ORCL\`) - **必须保留原始文件名** 3. **更新控制文件** ```sql -- 启动数据库到mount状态(不打开数据文件) STARTUP MOUNT; -- 重命名数据文件 ALTER DATABASE RENAME FILE 'C:\app\oracle\oradata\ORCL\users01.dbf' TO 'D:\new_storage\ORCL\users01.dbf'; -- 重命名日志文件(可选) ALTER DATABASE RENAME FILE 'C:\app\oracle\oradata\ORCL\redo01.log' TO 'D:\new_storage\ORCL\redo01.log'; ``` 4. **验证并启动数据库** ```sql ALTER DATABASE OPEN; -- 检查文件状态 SELECT name, status FROM v$datafile; ``` #### 三、热迁移示例(表空间级别) 1. **设置表空间为只读** ```sql ALTER TABLESPACE users READ ONLY; ``` 2. **迁移单个表空间文件** ```sql ALTER TABLESPACE users OFFLINE; -- 手动移动文件后执行 ALTER TABLESPACE users RENAME DATAFILE 'C:\old_path\users01.dbf' TO 'D:\new_path\users01.dbf'; ALTER TABLESPACE users ONLINE; ALTER TABLESPACE users READ WRITE; ``` #### 四、迁移后验证 1. **检查告警日志** 查看`%ORACLE_BASE%\diag\rdbms\<DB_NAME>\<INSTANCE_NAME>\trace\alert_<SID>.log`是否有报错 2. **运行完整性检查** ```sql SELECT tablespace_name, file_name FROM dba_data_files; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值