因为操作系统重装,oracle也要重新弄下,系统Windows,数据库“Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production”。
系统安装之前,oracle是正常使用的。停了各项业务后,关闭数据库并启动到mount状态,然后使用RMAN备份数据文件和控制文件、spfile文件。
备份:
shutdown immediate;
rman target /
startup mount;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT 'E:\backup\orcl_%d_%U.bak';
backup database;
备份完成后,生成了两个备份集,
使用list backup查看备份集合内容,备份集70包含了orcl库的数据文件,备份集71包含了SPFILE和控制文件;
重装操作系统之后,安装oracle软件,只安装oracle软件,不创建实例,添加一个监听;oracle所使用的路径都是之前保持一致。
通过设定环境变量来启动空实例
set ORACLE_SID=orcl
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 星期一 7月 18 10:10:57 2022
Copyright (c) 1982, 2016, Oracle. All rights reserved.
ERROR:
ORA-12560: TNS: 协议适配器错误
请输入用户名:
ERROR:
ORA-12560: TNS: 协议适配器错误
请输入用户名:
ERROR:
ORA-12560: TNS: 协议适配器错误
SP2-0157: 在 3 次尝试之后无法连接到 ORACLE, 退出 SQL*Plus
在tnsnames和listener中添加了orcl的信息,也是一样的报错信息。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\Administrator\product\12.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\12.2.0\dbhome_1\bin\oraclr12.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 3214568793124)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\app\Administrator\product\12.2.0\dbhome_1\log
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 3214568793124)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
看来windows没法这样连接空实例。
使用oradim工具创建一个空实例服务,连接到空实例;
C:\Users\Administrator>oradim -new -sid orcl
实例已创建。
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 星期一 7月 18 10:27:12 2022
Copyright (c) 1982, 2016, Oracle. All rights reserved.
已连接到空闲例程。
将主目录下文件\dbs\init.ora复制到\database\initORCL.ORA,将文件中的<ORACLE_BASE>替换为oracle主目录路径D:\app\Administrator\product\12.2.0\dbhome_1。
使用RMAN启动实例到nomount状态:
C:\Users\Administrator>rman target /
恢复管理器: Release 12.2.0.1.0 - Production on 星期一 7月 18 10:27:32 2022
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup nomount pfile='D:\app\Administrator\product\12.2.0\dbhome_1\database\initORCL.ORA';
已连接到目标数据库 (未启动)
Oracle 实例已启动
系统全局区域总计 5150605312 字节
Fixed Size 8757520 字节
Variable Size 1124077296 字节
Database Buffers 4009754624 字节
Redo Buffers 8015872 字节
从备份集中恢复spfile文件,重启实例:
RMAN> restore spfile from 'E:\backup\O1_MF_S_1110018030_KDZ2C8H0_.BKP';
从位于 18-7月 -22 的 restore 开始
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=161 设备类型=DISK
通道 ORA_DISK_1: 正在从 AUTOBACKUP E:\backup\O1_MF_S_1110018030_KDZ2C8H0_.BKP 还原 spfile
通道 ORA_DISK_1: 从 AUTOBACKUP 还原 SPFILE 已完成
在 18-7月 -22 完成了 restore
RMAN> shutdown immediate
Oracle 实例已关闭
RMAN> startup nomount
已连接到目标数据库 (未启动)
Oracle 实例已启动
系统全局区域总计 5150605312 字节
Fixed Size 8757520 字节
Variable Size 1124077296 字节
Database Buffers 4009754624 字节
Redo Buffers 8015872 字节
^C
C:\Users\Administrator>rman target /
恢复管理器: Release 12.2.0.1.0 - Production on 星期一 7月 18 10:55:03 2022
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (未装载)
从备份集中恢复控制文件,启动实例到mount:
RMAN> restore controlfile from 'E:\backup\O1_MF_S_1110018030_KDZ2C8H0_.BKP';
从位于 18-7月 -22 的 restore 开始
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=D:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL
输出文件名=D:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ORCL\CONTROL02.CTL
在 18-7月 -22 完成了 restore
RMAN> alter database mount;
已处理语句
释放的通道: ORA_DISK_1
RMAN>
将备份集注册到控制文件中(这一步没有验证是否需要,因为备份的控制文件中应该是包含了之前的备份信息的,并且在新的系统中备份路径也没有改变):
RMAN> catalog start with 'E:\backup';
从位于 18-7月 -22 的 implicit crosscheck backup 开始
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=161 设备类型=DISK
已交叉检验的 3 对象
在 18-7月 -22 完成了 implicit crosscheck backup
从位于 18-7月 -22 的 implicit crosscheck copy 开始
使用通道 ORA_DISK_1
已交叉检验的 4 对象
在 18-7月 -22 完成了 implicit crosscheck copy
搜索恢复区中的所有文件
正在编制文件目录...
没有为文件编制目录
搜索与样式 E:\backup 匹配的所有文件
数据库未知文件的列表
=====================================
文件名: E:\BACKUP\O1_MF_S_1110018030_KDZ2C8H0_.BKP
是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes
正在编制文件目录...
目录编制完毕
已列入目录的文件的列表
=======================
文件名: E:\BACKUP\O1_MF_S_1110018030_KDZ2C8H0_.BKP
RMAN>
此时可以使用 list backup查看备份信息。
恢复数据文件:
RMAN> restore database;
从位于 18-7月 -22 的 restore 开始
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF
通道 ORA_DISK_1: 将数据文件 00002 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF
通道 ORA_DISK_1: 将数据文件 00003 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF
通道 ORA_DISK_1: 将数据文件 00004 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 将数据文件 00005 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\MFW333.ORA
通道 ORA_DISK_1: 将数据文件 00006 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\TBS1.DBF
通道 ORA_DISK_1: 将数据文件 00007 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\OCP.ORA
通道 ORA_DISK_1: 将数据文件 00008 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\MFW333_1.ORA
通道 ORA_DISK_1: 将数据文件 00009 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\MFW333_2.ORA
通道 ORA_DISK_1: 正在读取备份片段 E:\BACKUP\ORCL_ORCL_2U12J494_1_1.BAK
通道 ORA_DISK_1: 片段句柄 = E:\BACKUP\ORCL_ORCL_2U12J494_1_1.BAK 标记 = TAG20220714T105947
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:15:26
在 18-7月 -22 完成了 restore
RMAN>
因为数据库是在没有打开的状态下进行的一致性备份,所以无需recover步骤;
使用resetlog参数打开数据库:
alter database open resetlogs;
数据库已更改。
使用sqlplus查询数据正常。
SQL> select count(*) from mfw333.stockhis;
COUNT(*)
----------
12337970
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 5150605312 bytes
Fixed Size 8757520 bytes
Variable Size 1124077296 bytes
Database Buffers 4009754624 bytes
Redo Buffers 8015872 bytes
数据库装载完毕。
数据库已经打开。
SQL>
over。