RAC RMAN 备份 RMAN-03009 ORA-19504 ORA-27040 RMAN-06012 channel c3 not allocated 错误分析

把之前的RMAN 单实例的备份脚本修改了一下,用来备份RAC 系统。

Linux 平台下 RMAN 全备 增量备份 shell 脚本

http://blog.youkuaiyun.com/tianlesoftware/archive/2010/07/16/5740630.aspx

修改之后的备份Shell 脚本如下:

########################################################################

## RAC_hot_database_backup.sh ##

## created by Tianlesoftware ##

## 2010-9-21 ##

#########################################################################

#!/bin/sh

# ---------------------------------------------------------------------------

# Determine the user which is executing this script.

# ---------------------------------------------------------------------------

CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`

# ---------------------------------------------------------------------------

# Put output in <this file name>.out. Change as desired.

# Note: output directory requires write permission.

# ---------------------------------------------------------------------------

RMAN_LOG_FILE=${0}.out

# ---------------------------------------------------------------------------

# You may want to delete the output file so that backup information does

# not accumulate. If not, delete the following lines.

# ---------------------------------------------------------------------------

if [ -f "$RMAN_LOG_FILE" ]

then

rm -f "$RMAN_LOG_FILE"

fi

# -----------------------------------------------------------------

# Initialize the log file.

# -----------------------------------------------------------------

echo >> $RMAN_LOG_FILE

chmod 666 $RMAN_LOG_FILE

# ---------------------------------------------------------------------------

# Log the start of this script.

# ---------------------------------------------------------------------------

echo Script $0 >> $RMAN_LOG_FILE

echo ==== started on `date` ==== >> $RMAN_LOG_FILE

echo >> $RMAN_LOG_FILE

# ---------------------------------------------------------------------------

# Oracle home path.

# ---------------------------------------------------------------------------

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

export ORACLE_HOME

# ---------------------------------------------------------------------------

# the Oracle SID of the target database.

# ---------------------------------------------------------------------------

ORACLE_SID=orcl1 -- 注意,这里需要连接任意节点就可以

export ORACLE_SID

# ---------------------------------------------------------------------------

# The Oracle DBA user id (account).

# ---------------------------------------------------------------------------

ORACLE_USER=oracle

export ORACLE_USER

# ---------------------------------------------------------------------------

# Set the Oracle Recovery Manager name.

# ---------------------------------------------------------------------------

RMAN=$ORACLE_HOME/bin/rman

# ---------------------------------------------------------------------------

# Print out the value of the variables set by this script.

# ---------------------------------------------------------------------------

echo >> $RMAN_LOG_FILE

echo "RMAN: $RMAN" >> $RMAN_LOG_FILE

echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE

echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE

echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE

# ---------------------------------------------------------------------------

# Print out the value of the variables set by bphdb.

# ---------------------------------------------------------------------------

#echo >> $RMAN_LOG_FILE

#echo "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE

#echo "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE

#echo "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE

#echo "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE

#echo "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE

# ---------------------------------------------------------------------------

# NOTE: This script assumes that the database is properly opened. If desired,

# this would be the place to verify that.

# ---------------------------------------------------------------------------

echo >> $RMAN_LOG_FILE

# ---------------------------------------------------------------------------

# ---------------------------------------------------------------------------

# Call Recovery Manager to initiate the backup.

# ---------------------------------------------------------------------------

CMD_STR="

ORACLE_HOME=$ORACLE_HOME

export ORACLE_HOME

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

$RMAN nocatalog target sys/oracle msglog $RMAN_LOG_FILE append << EOF

RUN {

allocate channel c1 device type disk connect 'sys/oracle@orcl1';

allocate channel c2 device type disk connect 'sys/oracle@orcl2';

BACKUP FORMAT '/u01/backup/orcl_%U_%T' skip inaccessible filesperset 5 DATABASE TAG orcl_hot_db_bk;

sql 'alter system archive log current';

BACKUP FORMAT '/u01/backup/arch_%U_%T' skip inaccessible filesperset 5 ARCHIVELOG ALL DELETE INPUT;

backup current controlfile tag='bak_ctlfile' format='/u01/backup/ctl_file_%U_%T';

backup spfile tag='spfile' format='/u01/backup/ORCL_spfile_%U_%T';

release channel c1;

release channel c2;

}

allocate channel for maintenance device type disk connect 'sys/oracle@orcl1';
allocate channel for maintenance device type disk connect
'sys/oracle@orcl2';

report obsolete;

delete noprompt obsolete;

crosscheck backup;

delete noprompt expired backup;

list backup summary;

release channel;

#EOF

"

# Initiate the command string

if [ "$CUSER" = "root" ]

then

echo "Root Command String: $CMD_STR" >> $RMAN_LOG_FILE

su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE

RSTAT=$?

else

echo "User Command String: $CMD_STR" >> $RMAN_LOG_FILE

/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE

RSTAT=$?

fi

# ---------------------------------------------------------------------------

# Log the completion of this script.

# ---------------------------------------------------------------------------

if [ "$RSTAT" = "0" ]

then

LOGMSG="ended successfully"

else

LOGMSG="ended in error"

fi

echo >> $RMAN_LOG_FILE

echo Script $0 >> $RMAN_LOG_FILE

echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE

echo >> $RMAN_LOG_FILE

/bin/mailx -s "RMAN Backup SID " tianlesoftware@vip.qq.com < $RMAN_LOG_FILE

exit $RSTAT

但是,运行该备份脚本报错。 部分运行日志如下:

allocated channel: c1

channel c1: sid=129 instance=orcl1 devtype=DISK

allocated channel: c3

channel c3: sid=131 instance=orcl2 devtype=DISK

Starting backup at 22-SEP-10

channel c1: starting full datafile backupset

channel c1: specifying datafile(s) in backupset

input datafile fno=00001 name=+DATA/orcl/datafile/system.276.730181051

input datafile fno=00004 name=+DATA/orcl/datafile/users.279.730181053

channel c1: starting piece 1 at 22-SEP-10

channel c3: starting full datafile backupset

channel c3: specifying datafile(s) in backupset

input datafile fno=00003 name=+DATA/orcl/datafile/sysaux.277.730181053

input datafile fno=00002 name=+DATA/orcl/datafile/undotbs1.278.730181053

input datafile fno=00005 name=+DATA/orcl/datafile/undotbs2.284.730181347

channel c3: starting piece 1 at 22-SEP-10

RMAN-03009: failure of backup command on c3 channel at 09/22/2010 05:11:10

ORA-19504: failed to create file "/u01/backup/orcl_19logo39_1_1_20100922"

ORA-27040: file create error, unable to create file

Linux Error: 2: No such file or directory

channel c3 disabled, job failed on it will be run on another channel

channel c1: finished piece 1 at 22-SEP-10

piece handle=/u01/backup/orcl_18logo39_1_1_20100922 tag=ORCL_HOT_DB_BK comment=N

ONE

channel c1: backup set complete, elapsed time: 00:01:02

channel c1: starting full datafile backupset

channel c1: specifying datafile(s) in backupset

input datafile fno=00003 name=+DATA/orcl/datafile/sysaux.277.730181053

input datafile fno=00002 name=+DATA/orcl/datafile/undotbs1.278.730181053

input datafile fno=00005 name=+DATA/orcl/datafile/undotbs2.284.730181347

channel c1: starting piece 1 at 22-SEP-10

channel c1: finished piece 1 at 22-SEP-10

piece handle=/u01/backup/orcl_1alogo57_1_1_20100922 tag=ORCL_HOT_DB_BK comment=N

ONE

...

released channel: c1

released channel: c3

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of release command at 09/22/2010 05:14:03

RMAN-06012: channel: c3 not allocated

对这个错误的分析过程如下:

1. 日志有c3 通道不能释放的问题。

C3 通道是节点2上的通道,非本地通道。 怀疑是这个地方有问题,单独做一个简单的测试:

RMAN> run

{

allocate channel c2 device type disk connect 'sys/oracle@orcl2';

allocate channel c1 device type disk connect 'sys/oracle@orcl1';

delete expired archivelog all;

release channel c1;

release channel c2;

}

2> 3> 4> 5> 6> 7> 8>

allocated channel: c2

channel c2: sid=147 instance=orcl2 devtype=DISK

allocated channel: c1

channel c1: sid=147 instance=orcl1 devtype=DISK

specification does not match any archive log in the recovery catalog

released channel: c1

released channel: c2

这个实验结果证明,报错和通道没有关系。

2. 备份目录的权限问题

allocated channel: c3

channel c3: sid=131 instance=orcl2 devtype=DISK

RMAN-03009: failure of backup command on c3 channel at 09/22/2010 05:11:10

ORA-19504: failed to create file "/u01/backup/orcl_19logo39_1_1_20100922"

ORA-27040: file create error, unable to create file

Linux Error: 2: No such file or directory

channel c3 disabled, job failed on it will be run on another channel

从这里我们可以看出,通道c3 是创建成功了的。 但是在通道上c3上不能创建备份集的文件。

因为我实在节点1上做的RMAN 备份。 开始以为全部的备份文件都会放在节点1上。 所以只在节点1上创建了备份目录。 即/u01/backup目录。 在节点2上没有创建。 问题就出在这个地方。 我在就节点2上创建了/u01/backup目录,并赋予了777权限后,备份成功。

最后检查2个备份文件。 发现一个问题orcl1通道的备份集文件会存放在节点1的备份目录上(/u01/backup),orcl2通道的备份文件会放在orcl2的备份目录上(/u01/backup. 因为它的备份文件存放在2个地方,所以恢复的时候会很麻烦。 最理解的状态,是所有的备份文件都存放在一个节点,或者共享设备上。

所以,要解决这个有2种方法:

(1) 使用NFS。 在一个节点上共享备份目录,在另一个节点挂载这个共享。 这个所有的文件就会在一个节点上了。

关于NFS 的配置,参考Blog

Linux NFS Samba 共享配置

http://blog.youkuaiyun.com/tianlesoftware/archive/2010/07/22/5752092.aspx

(2) 使用存储。

对于NFS mount, 存在着一个比较严重的问题。就是NFS mount在一个节点没有启动的情况下,会极大的影响另一个节点的性能。也就是说,如果RAC一个节点出现故障,导致机器无法正常启动的话,另一个节点不但要承担全部的数据库压力,而且还会受到nfs mount带来的性能负载,基本上导致这个节点无法正常工作。所以从性能上的考虑,使用NFS mount的时候一定要慎重。所以对于RAC RMAN 备份文件,最好还是存放在存储上。

------------------------------------------------------------------------------

Blog http://blog.youkuaiyun.com/tianlesoftware

网上资源: http://tianlesoftware.download.youkuaiyun.com

相关视频:http://blog.youkuaiyun.com/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(); DBA2 群:62697977()

DBA3 群:63306533; 聊天 群:40132017

--加群需要在备注说明SGA的组成部分,否则拒绝申请

<think>嗯,用户需要完成一套完整的硬盘镜像取证流程,涉及多个技术环节。从引用内容看,用户已经掌握了FTK Imager、PhotoRec等工具的基本操作,但需要系统化的执行框架。 用户的核心诉求其实很专业:既要规范化的操作流程,又要每个环节的法律意义说明。比如哈希校验不仅是技术动作,更是证据链完整性的保障;时间线重建也不只是数据提取,还关联行为分析。这说明用户可能有司法取证背景,或是企业合规调查人员。 注意到用户特别关注.docx文件的恢复。考虑到商业机密泄露案件中,办公文档往往是关键证据,需要重点处理两点:文件签名识别(50 4B 03 04)碎片化应对。引用[1]提到的Scalpel工具其实比PhotoRec更适合这种情况,因为它的数据雕刻(carving)精度更高。 时间线重建部分,用户引用的MFT解析工具选择很准确。但补充一点:AnalyzeMFT导出的时间戳需要转换为UTC+8时区(国内案件常用),这个细节在引用里没提,却是司法认可的关键。 分区分析环节有个隐患:如果嫌疑硬盘使用Linux文件系统(如引用[3]所述),TestDisk可能比WinHex更可靠。虽然用户没要求跨平台分析,但商业机密案件中嫌疑人常会使用多系统,这个预案应该包含在记录模板中。 最后生成的四个问题都指向法律效力:哈希的法律意义对应证据采纳标准;时间戳分析涉及行为认定;数据恢复合法性关乎取证手段合规性;而报告撰写直接决定能否作为呈堂证供。这样设计既延续技术主线,又紧扣司法实践。 </think>以下是根据数字取证标准流程整理的完整操作指南,涵盖镜像校验、分区分析、文件恢复及时间线重建四大环节,严格执行证据链完整性原则: --- ### **一、镜像完整性校验** 1. **使用FTK Imager计算哈希** - 打开FTK Imager → `文件` → `添加证据项` → 选择镜像文件 - 右键镜像 → `生成哈希` → 记录**MD5/SHA256**(如图) ![FTK哈希校验界面](https://example.com/ftk-hash-demo.png) **作用**:哈希唯一标识数据完整性,若后续校验不变则证明证据未被篡改[^2]。 2. **命令行辅助验证** ```bash certutil -hashfile "C:\取证\disk_image.E01" SHA256 ``` *输出示例:`SHA256 哈希: a1b2c3...` 需与FTK结果一致* --- ### **二、分区分析与文件系统识别** 1. **WinHex操作流程** - 打开WinHex → `文件` → `打开` → 选择镜像 - `工具` → `磁盘工具` → `扫描丢失分区` → 记录: | 分区号 | 起始扇区 | 大小(扇区) | 文件系统 | |---|---|---|---| | 1 | 2048 | 4194304 | NTFS | | 2 | 4196352 | 1024000 | FAT32 | 2. **TestDisk应急方案** ```bash testdisk /dev/sda # 选择镜像文件 → [Analyse] → 显示分区表详情 ``` *适用分区表损坏场景(引用[1])* --- ### **三、恢复已删除.docx文件** 1. **基于文件签名雕刻数据** - 使用**PhotoRec**: ```bash photorec /d 恢复输出目录 /fileopt=docx 镜像文件.E01 ``` - 关键配置:`文件格式`选`MS Office 2007+`(签名头:`50 4B 03 04`) 2. **恢复记录表** | 文件名 | 大小 | 原始路径 | 恢复状态 | |---|---|---|---| | 机密合同.docx | 2.1MB | /Users/张三/Docs | ✔ | | 报价单.docx | 356KB | /Recycled | ✔ | > *注:无文件系统时改用Scalpel(引用[1])* > ```yaml > scalpel -c docx.conf disk_image.dd > ``` --- ### **四、MFT解析与时间线重建** 1. **MFTExplorer关键操作** - 加载镜像 → 提取`$MFT` → 过滤`.docx` → 导出时间戳: | 文件名 | 创建时间(UTC) | 修改时间 | 最后访问 | |---|---|---|---| | 机密合同.docx | 2023-05-12 14:22 | 2023-05-15 09:31 | 2023-05-20 08:15 | 2. **时间线分析要点** - **法律意义**: - 创建时间证明文件存在时点 - 修改时间关联篡改行为 - 密集访问时段定位泄密窗口 *(例:离职前48小时高频访问涉密文档)* --- ### **取证记录模板** ```markdown ## 数字取证报告 **镜像信息** - 文件名: disk_image.E01 - 哈希(MD5): d41d8cd98f00b204e9800998ecf8427e - 哈希(SHA256): e3b0c44298fc1c149afbf4c8996fb924... **分区分析结果** | 分区 | 起始扇区 | 大小 | 文件系统 | |------|----------|------|----------| | 1 | 2048 | 500GB| NTFS | **恢复文件清单** - 机密合同.docx (创建: 2023-05-12 14:22) - 报价单.docx (最后修改: 2023-05-18 11:47) **结论** 时间线显示用户在离职前集中访问机密文档,结合文件恢复结果... ``` --- ### 相关问题 1. 如何验证FTK Imager生成的哈希在法庭上的有效性? 2. 当MFT记录被覆盖时,有哪些替代方法重建文件时间线? 3. 数据雕刻(Carving)恢复的文件如何证明其原始性? 4. 企业数字取证报告需包含哪些法律要素? > 参考文献: > [^1]: TestDisk数据恢复原理,苏小沐. FTK实战指南 > [^2]: FTK哈希校验司法认证标准,IEEE取证技术白皮书 > [^3]: Linux分区挂载兼容性解决方案,Digital Forensics Magazine
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值