Oracle 12c更改数据文件位置(精)

经过两天的时间,把oracle数据文件迁移的事情完成了。

问题描述:
1.web项目数据库oracle12c 安装在D盘(windows),由于D盘的空间已经不够,导致程序插入数据失败。在服务器上加了一个2T的硬盘,但是安装人员不会在原来D盘上进行扩容,而是直接挂成E盘。
在这里插入图片描述

2.我们设计了两种方案,
(1)迁移数据文件到E盘,将原来D盘数据文件删掉。这种方案改动较小,风险不大。
(2)重装数据库到E盘,这种方案麻烦而且风险比较大,需要卸载数据库(包括注册表等),然后重新安装,重新建表,建用户,索引,初始化数据等,工作量特别大,而且还不一定能成功。

我们优先选择第一种方案。
在这里插入图片描述
(一个dbf数据文件有30多G)

方法一:offline表空间

(实际操作没有成功,遇到了一些问题,最后采用的是方法二, 此处也把方法一的处理步骤写出来,供大家研究)

方法一总共分为如下4个步骤:
1、offline表空间:alter tablespace tablespace_name offline;
2、复制数据文件到新的目录;
3、rename修改表空间,并修改控制文件;
4、online表空间;

方法一具体步骤:
1、offline表空间zerone
SQL> select status, name from v$datafile;

NAME

C:\Oracle\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。

select * from dba_data_files

offline表空间:

SQL> alter tablespace zerone offline;
表空间已更改。
(注:zerone就是你实际的表空间名称)

示例:alter tablespace 你实际的表空间名称 offline;

2、复制数据文件到新的目录

复制数据文件C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF。

3、rename修改表空间数据文件为新的位置,并修改控制文件

SQL> alter tablespace zerone rename datafile ‘c:\oracle\product\10.2.0\oradata\zerone01.dbf’ to ‘c:\oracle\product\10.2.0\oradata\orcl\zerone01.dbf’;
表空间已更改。

我的实际命令:
alter tablespace xxx_SPACE rename datafile ‘D:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\xxx_DATA_01.DBF’ to ‘E:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\xxx_DATA_01.DBF’;
….我实际共有10个dfb数据文件。

4、online表空间

SQL> alter tablespace zerone online;
表空间已更改。

示例:alter tablespace 你的实际表空间 online;

以上命令运行时报错误:ORA-01113: 文件8 需要介质恢复。

网上的解决方法:(在sql命令行运行)
recover datafile ‘E:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\xxx_DATA_01.DBF’

以上命令运行报错:

ORA-00283: 恢复会话因错误而取消
ORA-01114: 将块写入文件 8 时出现 IO 错误 (块 # 1)
ORA-01110: 数据文件 8:
‘E:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\xxx_DATA_01.DBF’
ORA-27091: 无法将 I/O 排队
ORA-27041: 无法打开文件
OSD-04002: ???????
O/S-Error: (OS 5) ???????

原因是用户没有E盘的目录的操作权限,需要设置权限。
在这里插入图片描述
试试其他方法:

切换到归档模式:(原来是非归档模式)
sqlplus system/数据库管理员密码@orcl as sysdba;

shutdown immediate;

conn / as sysdba

startup mount

alter database archivelog; --归档模式
alter database noarchivelog; --非归档模式

–查询你现在用的模式
select log_mode from v$database;
archive log list;

数据库日志模式 非存档模式
自动存档 禁用
存档终点 D:\app\Administrator\virtual\product\12.2.0\dbhome_1\RDBMS
最早的联机日志序列 32216
当前日志序列 32218

再次执行recover命令,报错:
ORA-00308: 无法打开归档日志
‘D:\APP\ADMINISTRATOR\VIRTUAL\PRODUCT\12.2.0\DBHOME_1\RDBMS\ARC0000032203_0957179339.0001’

归档日志序列号不对,根本找不到错误中的文件。
在这里插入图片描述
至此,没有再进行下去。改用方法二进行。

  • 以下是方法一的继续步骤:

SQL> select name from v$datafile;

NAME

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name=‘ZERONE’;

select file_name,tablespace_name from dba_data_files where tablespace_name=‘ZERONE’;

FILE_NAME TABLESPACE_NAME

ZERONE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF

方法二:SQL修改数据文件位置

1、关闭数据库;
2、复制数据文件到新的位置;
3、启动数据库到mount状态;
4、通过SQL修改数据文件位置;
5、打开数据库;

方法二的具体步骤:

1、关闭数据库
SQL> select name from v$datafile;

NAME

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。

sqlplus system/jky123@orcl as sysdba

SQL> shutdown immediate;

数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

2、复制数据文件到新的位置;

将数据文件C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF复制到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF。

3、启动数据库到mount状态;
conn / as sysdba
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 96470372 bytes
Database Buffers 67108864 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。

中间插入了几步操作(网上提供的方法):
SQL> startup mount U1;
ORACLE 例程已经启动。

SQL>alter database mount;
数据库已更改。


插入知识点:
问:Oracle在mount状态时,能做哪些动作。
其中就有renaming off datafile;
这个一开始认为Oracle在mount stage,已经载入了control file不能再重命名数据文件了。而实际却恰恰相反,只有到control file被载入后,重命名数据文件的改动才会写入到control file中。犯了一个先后颠倒的错误。
重命名控制文件,需要注意:在mount阶段,首先将数据文件更名为需要改动的目标名称(在这里是test02.dbf),再执行更名命令。
在此之前,我认为Oracle的重命名命令会自动将物理的数据文件命名为新的名称,但是从实验中可以看到,需要手工去先把物理的数据文件更名。


4、通过SQL修改数据文件位置;

SQL> alter database rename file ‘c:\oracle\product\10.2.0\oradata\orcl\zerone01.dbf’ to ‘c:\oracle\product\10.2.0\oradata\zerone01.dbf’;
数据库已更改。
(和方法一中的rename命令不同)

我的实际命令:
alter database rename file ‘D:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\xxx_DATA_01.DBF’ to ‘E:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\xxx_DATA_01.DBF’;
数据库已更改。

……我实际有10个dbf文件,重复上述操作。

5、打开数据库;
SQL> alter database open;
数据库已更改。

SQL> select name from v$datafile;

NAME

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。

SQL> select file_name,tablespace_name from dba_data_files where tablespace_name=‘ZERONE’;

FILE_NAME TABLESPACE_NAME

ZERONE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF

在这里插入图片描述
至此,已经操作完成。

数据可以正常插入,启动tomcat,可以正常访问。

(完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山月神话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值