由于服务器更换,或者硬盘损坏等问题,在有些场景下,我们需要对数据库进行迁移。
Oracle 数据库有多种备份方式,如果可以停机,建议最好使用冷备的方式,直接迁移数据文件,这样效率会比较高。
由于两台主机都是Windows server,为了方便直接使用复制文件的方式,由于特殊原因,迁移前的数据目录和迁移后的数据目录是不一致的。直接迁移数据后,启动会报如下错误:
1
2
3
4
5
6
7
8
9
10
|
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1334380 bytes
Variable Size 301990804 bytes
Database Buffers 754974720 bytes
Redo Buffers 13033472 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1:
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF'
|
查看文件路径:
1
|
SQL>
select
name from
v
$controlfile;
|
1
2
3
4
5
|
NAME
---------------------------------------------------------
F:\APP\ADMINISTRATOR\ORADATA\AGRISK\CONTROL01.CTL
F:\APP\ADMINISTRATOR\ORADATA\AGRISK\CONTROL02.CTL
F:\APP\ADMINISTRATOR\ORADATA\AGRISK\CONTROL03.CTL
|
1
|
SQL>
select
name from
v
$datafile;
|
1
2
3
4
5
6
7
|
NAME
---------------------------------------------------------
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSAUX01.DBF
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\UNDOTBS01.DBF
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\USERS01.DBF
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK.DBF
|
1
|
SQL>
select
name from
v
$tempfile;
|
1
2
3
4
|
NAME
---------------------------------------------------------
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\TEMP01.DBF
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK_TEMP.DBF
|
1
|
SQL>
select
member from
v
$logfile;
|
1
2
3
4
5
|
MEMBER
---------------------------------------------------------
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO03.LOG
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO02.LOG
D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO01.LOG
|
停止数据库:
1
|
SQL>
shutdown
immediate;
|
将原主机上oradata目录下实例的文件全部拷贝到迁移后的主机对应目录。然后在新的主机上以mount方式启动数据库实例:
1
|
SQL> startup
mount
;
|
除了控制文件的路径是正常的,其他的文件路径都需要修改,将原来的错误路径D盘改为F盘:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSAUX01.DBF'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSAUX01.DBF'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\UNDOTBS01.DBF'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\UNDOTBS01.DBF'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\USERS01.DBF'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\USERS01.DBF'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK.DBF'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK.DBF'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\TEMP01.DBF'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\TEMP01.DBF'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK_TEMP.DBF'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK_TEMP.DBF'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO01.LOG'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO01.LOG'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO02.LOG'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO02.LOG'
;
数据库已更改。
SQL> alter database rename
file
'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO03.LOG'
to
'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO03.LOG'
;
数据库已更改。
|
确认修改成功后,启动数据库:
1
2
|
SQL> alter database
open
;
数据库已更改。
|
重启数据库:
1
2
3
4
|
SQL>
shutdown
immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
|
1
2
3
4
5
6
7
8
9
|
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1334380 bytes
Variable Size 301990804 bytes
Database Buffers 754974720 bytes
Redo Buffers 13033472 bytes
数据库装载完毕。
数据库已经打开。
|
查看监听端口。如果没有配置netca网络监听端口,需要使用系统自带的Net Cofiguration Assistant进行配置。
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1952754