标签云
asm恢复 bbed bootstrap$ dul kcbzib_kcrsds_1 kccpb_sanity_check_2 kcratr_nab_less_than_odr kgegpa MySQL恢复 ORA-00312 ORA-00704 ORA-00742 ORA-01110 ORA-01190 ORA-01200 ORA-01555 ORA-01578 ORA-01595 ORA-600 2662 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 ORACLE恢复 Oracle 恢复 ORACLE数据库恢复 oracle 比特币 OSD-04016 YOUR FILES ARE ENCRYPTED 勒索恢复 比特币加密文章分类
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (106)
- 数据库 (1,801)
- DB2 (22)
- MySQL (79)
- Oracle (1,637)
- Data Guard (53)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (166)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (69)
- Oracle Bug (8)
- Oracle RAC (54)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (29)
- Oracle备份恢复 (611)
- Oracle安装升级 (101)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (86)
- PostgreSQL (33)
- pdu工具 (7)
- PostgreSQL恢复 (11)
- SQL Server (32)
- SQL Server恢复 (13)
- TimesTen (7)
- 达梦数据库 (3)
- 达梦恢复 (1)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (43)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (26)
-
最近发表
- obet(Oracle Block Editor Tool)第二版发布
- Oracle数据块编辑工具( Oracle Block Editor Tool)-obet
- Oracle坏块修复工具:Patch_blk
- ORA-01172 ORA-01151故障处理
- C_OBJ#_INTCOL#坏块导致数据库无法open故障处理
- ORA-600 kkkicreatecgmap:!efn3
- Oracle 19c 202510补丁(RUs+OJVM)-19.29
- 记录一次raid恢复之后数据库故障处理(ora-01200,ORA-26101,ORA-600)
- nbu备份文件img格式直接rman恢复
- ORA-600 kokasgi1故障处理(sys被重命名)
- Patch_SCN for Linux 功能完善
- ORA-600 2662错误处理-202510
- system表空间丢失部分文件恢复
- arm环境vg损坏mysql数据库恢复
- redhat系列7/8进入单用户模式
- Failed to open \EFI\redhat\grubx64.efi – Not Found 故障处理
- 11.2.0.4升级到19c详细操作过程
- Postgres数据库truncate表无有效备份恢复
- 一次幸运的ORA-07445 kdxlin故障恢复
- ORA-704 ORA-604 ORA-1426故障分析处理
分类目录归档:rman备份/恢复
RMAN SBT_TAPE备份通过小程序修改实现直接DISK通道还原
有朋友把oracle rman备份从cv带库里拷贝到文件系统,然后希望把他还原到数据库中.通过尝试发现直接带库的文件无法直接在文件系统中被rman调用还原
C:\Users\XFF>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期三 9月 3 18:07:58 2025 Copyright (c) 1982, 2013, Oracle. All rights reserved. 已连接到空闲例程。 SQL> startup nomount pfile='d:/pfile.txt' ORACLE 例程已经启动。 Total System Global Area 4275781632 bytes Fixed Size 2288080 bytes Variable Size 939525680 bytes Database Buffers 3321888768 bytes Redo Buffers 12079104 bytes SQL> exit 从 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开 C:\Users\XFF> C:\Users\XFF> C:\Users\XFF> C:\Users\XFF>rman target / 恢复管理器: Release 11.2.0.4.0 - Production on 星期三 9月 3 18:08:38 2025 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 已连接到目标数据库: ORCL (未装载) RMAN> restore controlfile from 'H:\TEMP\Oracle_Restore\405\c-1737595250-20250822-00'; 启动 restore 于 03-9月 -25 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=28 设备类型=DISK 通道 ORA_DISK_1: 正在还原控制文件 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: restore 命令 (在 09/03/2025 18:08:54 上) 失败 ORA-19870: 还原备份片段 H:\TEMP\ORACLE_RESTORE\405\C-1737595250-20250822-00 时出错 ORA-19505: 无法识别文件"H:\TEMP\ORACLE_RESTORE\405\C-1737595250-20250822-00" ORA-27046: 文件大小不是逻辑块大小的倍数 OSD-04000: 逻辑块大小不匹配 (OS 512)
以前也写过相关的文章,由于tape的备份和disk通道备份的文件头本身格式都不一样,具体参考:RMAN SBT_TAPE备份无法被DISK通道识别
尝试使用dbms_backup_restore还原依旧失败
C:\Users\XFF>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期三 9月 3 18:19:23 2025 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN 5 devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1'); 6 sys.dbms_backup_restore.restoreSetDatafile; 7 sys.dbms_backup_restore.restoreControlfileTo(cfname=>'H:\CONTROL01.CTL'); 8 sys.dbms_backup_restore.restoreBackupPiece(done=>done, 9 handle=>'H:\TEMP\Oracle_Restore\405\c-1737595250-20250822-00', params=>null); 10 sys.dbms_backup_restore.deviceDeallocate; 11 END; 12 / DECLARE * 第 1 行出现错误: ORA-19624: 操作失败, 如果可能请重试 ORA-19870: 还原备份片段 H:\TEMP\ORACLE_RESTORE\405\C-1737595250-20250822-00 时出错 ORA-19505: 无法识别文件"H:\TEMP\ORACLE_RESTORE\405\C-1737595250-20250822-00" ORA-27046: 文件大小不是逻辑块大小的倍数 OSD-04000: 逻辑块大小不匹配 (OS 512) ORA-06512: 在 "SYS.X$DBMS_BACKUP_RESTORE", line 5940 ORA-06512: 在 line 8
对于这种情况,我尝试自己开发一个小程序,来模拟disk通道备份集,欺骗数据库来实现还原操作.

通过程序模拟出来的disk通道的文件,每个后缀加上了disk

再次通过尝试通过disk通道还原操作
C:\Users\XFF>rman target / 恢复管理器: Release 11.2.0.4.0 - Production on 星期三 9月 3 18:23:14 2025 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 已连接到目标数据库: ORCL (未装载) RMAN> restore controlfile from 'H:\TEMP\Oracle_Restore\405\c-1737595250-20250822-00.disk'; 启动 restore 于 03-9月 -25 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=28 设备类型=DISK 通道 ORA_DISK_1: 正在还原控制文件 通道 ORA_DISK_1: 还原完成, 用时: 00:00:01 输出文件名=H:\CONTROL01.CTL 完成 restore 于 03-9月 -25 RMAN> alter database mount; 数据库已装载 释放的通道: ORA_DISK_1 RMAN> catalog start with 'H:\TEMP\Oracle_Restore\405\*.disk'; 搜索与样式 H:\TEMP\Oracle_Restore\405\*.disk 匹配的所有文件 数据库未知文件的列表 ===================================== 文件名: H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0141onds_1_1.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0241onec_1_1.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0441onev_1_1.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\c-1737595250-20250822-00.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\c-1737595250-20250822-01.disk 是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes 正在编制文件目录... 目录编制完毕 已列入目录的文件的列表 ======================= 文件名: H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0141onds_1_1.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0241onec_1_1.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0441onev_1_1.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\c-1737595250-20250822-00.disk 文件名: H:\TEMP\ORACLE_RESTORE\405\c-1737595250-20250822-01.disk RMAN>
RMAN> report schema;
RMAN-06139: 警告: 控制文件对于 REPORT SCHEMA 不是最新
db_unique_name 为 ORCL 的数据库的数据库方案报表
永久数据文件列表
===========================
文件大小 (MB) 表空间 回退段数据文件名称
---- -------- -------------------- ------- ------------------------
1 0 SYSTEM *** /data/oracle/oradata/orcl/system01.dbf
2 0 SYSAUX *** /data/oracle/oradata/orcl/sysaux01.dbf
3 0 UNDOTBS1 *** /data/oracle/oradata/orcl/undotbs01.dbf
4 0 USERS *** /data/oracle/oradata/orcl/users01.dbf
5 0 EXAMPLE *** /data/oracle/oradata/orcl/example01.dbf
临时文件列表
=======================
文件大小 (MB) 表空间 最大大小 (MB) 临时文件名称
---- -------- -------------------- ----------- --------------------
1 20 TEMP 32767 /data/oracle/oradata/orcl/temp01.dbf
RMAN> run
2> {
3> set newname for datafile 1 to 'h:\system01.dbf';
4> set newname for datafile 2 to 'h:\sysaux01.dbf';
5> set newname for datafile 3 to 'h:\undotbs01.dbf';
6> set newname for datafile 4 to 'h:\users01.dbf';
7> set newname for datafile 5 to 'h:\example01.dbf';
8> restore database;
9> switch datafile all;
10> }
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 03-9月 -25
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=28 设备类型=DISK
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 h:\system01.dbf
通道 ORA_DISK_1: 将数据文件 00002 还原到 h:\sysaux01.dbf
通道 ORA_DISK_1: 将数据文件 00003 还原到 h:\undotbs01.dbf
通道 ORA_DISK_1: 将数据文件 00004 还原到 h:\users01.dbf
通道 ORA_DISK_1: 将数据文件 00005 还原到 h:\example01.dbf
通道 ORA_DISK_1: 正在读取备份片段 H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0141ONDS_1_1.DISK
通道 ORA_DISK_1: 段句柄 = H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0141ONDS_1_1.DISK 标记 = TAG20250822T124236
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
完成 restore 于 03-9月 -25
数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=7 STAMP=1210875892 文件名=H:\SYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=8 STAMP=1210875892 文件名=H:\SYSAUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=9 STAMP=1210875892 文件名=H:\UNDOTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=10 STAMP=1210875892 文件名=H:\USERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 RECID=11 STAMP=1210875892 文件名=H:\EXAMPLE01.DBF
RMAN>
RMAN> run
2> {
3> set archivelog destination to 'h:/';
4> restore archivelog all;
5> }
正在执行命令: SET ARCHIVELOG DESTINATION
启动 restore 于 03-9月 -25
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始将归档日志还原到用户指定的目标
归档日志目标=h:/
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=6
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=7
通道 ORA_DISK_1: 正在读取备份片段 H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0441ONEV_1_1.DISK
通道 ORA_DISK_1: 段句柄 = H:\TEMP\ORACLE_RESTORE\405\322_ORCL_0441ONEV_1_1.DISK 标记 = TAG20250822T124311
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
完成 restore 于 03-9月 -25
通过上述操作,证明写的小程序oracle rman 备份集从tape通道备份方式修改为直接走disk 通道还原完整没有问题.
RMAN SBT_TAPE备份无法被DISK通道识别
经过测试确认rman SBT_TAPE通道备份的rman备份集无法被DISK通道(文件系统方式备份)方式恢复,关于rman的SBT_TAPE通道(带库方式备份)备份参考:模拟带库实现rman远程备份
发起SBT_TAPE通道备份备份
[oracle@xifenfei ~]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Sun Jul 14 13:19:03 2024 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: XIFENFEI (DBID=1780931490) RMAN> CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE; using target database control file instead of recovery catalog old RMAN configuration parameters: CONFIGURE DEFAULT DEVICE TYPE TO DISK; new RMAN configuration parameters: CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE'; new RMAN configuration parameters are successfully stored RMAN> backup format 'ctl_%T_%U.rman' current controlfile; Starting backup at 14-JUL-24 allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=147 device type=SBT_TAPE channel ORA_SBT_TAPE_1: SBT/SSH2-SFTP channel ORA_SBT_TAPE_1: starting full datafile backup set channel ORA_SBT_TAPE_1: specifying datafile(s) in backup set including current control file in backup set channel ORA_SBT_TAPE_1: starting piece 1 at 14-JUL-24 channel ORA_SBT_TAPE_1: finished piece 1 at 14-JUL-24 piece handle=ctl_20240714_0r2vt3eh_1_1.rman tag=TAG20240714T131913 comment=API Version 2.0,MMS Version 1.0.9.0 channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:01 Finished backup at 14-JUL-24
确认备份文件在文件系统中位置
[oracle@xifenfei ~]$ ls -l /tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman -rw-r--r-- 1 root root 9961472 Jul 14 13:19 /tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman
尝试DISK通道加载备份集,报RMAN-07519错误
RMAN> catalog start with '/tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman'; using target database control file instead of recovery catalog searching for all files that match the pattern /tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman List of Files Unknown to the Database ===================================== File Name: /tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman Do you really want to catalog the above files (enter YES or NO)? yes cataloging files... no files cataloged List of Files Which Where Not Cataloged ======================================= File Name: /tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman RMAN-07519: Reason: Error while cataloging. See alert.log.
查看alert日志信息报ORA-27048: skgfifi: file header information is invalid 等错误
Sun Jul 14 13:28:22 2024 Errors in file /u01/app/oracle/diag/rdbms/xifenfei/xifenfei/trace/xifenfei_ora_13260.trc: ORA-19624: operation failed, retry possible ORA-19870: error while restoring backup piece /tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman ORA-19505: failed to identify file "/tmp/rmanback/ctl_20240714_0r2vt3eh_1_1.rman" ORA-27048: skgfifi: file header information is invalid Additional information: 8 ORA-27048: skgfifi: file header information is invalid Additional information: 8 ORA-27048: skgfifi: file header information is invalid Additional information: 8
通过分析备份文件发现在带库方式备份和文件系统方式备份的文件头信息明显不一样

模拟带库实现rman远程备份
rman通过模拟带库备份到远程机器,需要先配置用户ssh到目标机器
linux平台oracle备份
RMAN> RUN {
2> ALLOCATE CHANNEL S1 DEVICE TYPE sbt
3> PARMS='SBT_LIBRARY=/tmp/rman_sync.so,ENV=(
4> OB_SERVER=www.xifenfei.com,
5> OB_USER=root,
6> OB_PORT=22123,
7> OB_PATH=/tmp)';
8> BACKUP CURRENT CONTROLFILE FORMAT 'ctl_%U';
9> }
allocated channel: S1
channel S1: SID=125 device type=SBT_TAPE
channel S1: SBT/SSH2-SFTP
Starting backup at 22-FEB-24
channel S1: starting full datafile backup set
channel S1: specifying datafile(s) in backup set
including current control file in backup set
channel S1: starting piece 1 at 22-FEB-24
channel S1: finished piece 1 at 22-FEB-24
piece handle=ctl_012jq4gg_1_1 tag=TAG20240222T190344 comment=API Version 2.0,MMS Version 1.0.9.0
channel S1: backup set complete, elapsed time: 00:00:25
Finished backup at 22-FEB-24
released channel: S1
RMAN> list backup;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1 Full 9.50M SBT_TAPE 00:00:24 22-FEB-24
BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20240222T190344
Handle: ctl_012jq4gg_1_1 Media: 0B2B9255
Control File Included: Ckp SCN: 4438494 Ckp time: 22-FEB-24
win平台oracle备份
RMAN> RUN {
2> ALLOCATE CHANNEL S1 DEVICE TYPE sbt
3> PARMS='SBT_LIBRARY=D:\TEMP\rman_sync.dll,
4> ENV=(
5> OB_SERVER=www.xifenfei.com,
6> OB_USER=root,
7> OB_PORT=22123,
8> OB_PATH=/tmp/,
9> OB_PUBLIC_KEY=C:\Users\XIFENFEI\.ssh\id_rsa.pub,
10> OB_SECRET_KEY=C:\Users\XIFENFEI\.ssh\id_rsa,
11> OB_LOGFILE=d:\xifenfei.log)';
12> BACKUP CURRENT CONTROLFILE FORMAT 'ctl_%U';
13> }
分配的通道: S1
通道 S1: SID=156 设备类型=SBT_TAPE
通道S1: SBT/SSH2-SFTP
启动 backup 于 23-2月 -24
通道 S1: 正在启动全部数据文件备份集
通道 S1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
通道 S1: 正在启动段 1 于 23-2月 -24
通道 S1: 已完成段 1 于 23-2月 -24
段句柄=ctl_012jt7mr_1_1 标记=TAG20240223T231642 注释=API Version 2.0,MMS Version 1.0.9.0
通道 S1: 备份集已完成, 经过时间:00:00:07
完成 backup 于 23-2月 -24
释放的通道: S1
RMAN> list backup;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
1 Full 9.50M SBT_TAPE 00:00:05 23-2月 -24
BP 关键字: 1 状态: AVAILABLE 已压缩: NO 标记: TAG20240223T231642
句柄: ctl_012jt7mr_1_1 介质: 0B2B9255
包括的控制文件: Ckp SCN: 14544437 Ckp 时间: 23-2月 -24


加我QQ(107644445)
