无法复制和rename ASM磁盘组上的数据文件处理方法

本文介绍了一种解决Oracle RAC环境下SYSTEM数据文件丢失的方法。通过从备用数据库拷贝SYSTEM数据文件,并采用特定的命名规则及使用RMAN工具进行重命名、切换和恢复操作,最终成功恢复了丢失的数据文件。

由于SYSTEM 数据文件丢失,启动数据库时会报如下无法标识或找不到数据文件1的错误:

03:47:02 SYS@racdb1*SQL> startup;
ORACLE instance started.


Total System Global Area          413372416 bytes
Fixed Size                          2213896 bytes
Variable Size                     381683704 bytes
Database Buffers                   20971520 bytes
Redo Buffers                        8503296 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '+DATA/racdb/datafile/system.256.858651361'

需要从备库拷贝system数据文件过来,但从常规的文件系统中拷贝到ASM磁盘组中有一定的命名规则,随便拷贝会报如下错误:

ASMCMD [+DATA/racdb/datafile] > cp /home/grid/tmp/SYSTEM.258.910919287 ./SYSTEM.256.858651361

copying /home/grid/tmp/SYSTEM.258.910919287 -> +DATA/racdb/datafile/./SYSTEM.256.858651361
ASMCMD-08016: copy source->'/home/grid/tmp/SYSTEM.258.910919287' and target->'+DATA/racdb/datafile/./SYSTEM.256.858651361' failed
ORA-19505: failed to identify file "+DATA/racdb/datafile/./SYSTEM.256.858651361"
ORA-17502: ksfdcre:4 Failed to create file +DATA/racdb/datafile/./SYSTEM.256.858651361
ORA-15046: ASM file name '+DATA/racdb/datafile/./SYSTEM.256.858651361' is not in single-file creation form
ORA-15122: ASM file name '+DATA/racdb/datafile/./SYSTEM.256.858651361' contains an invalid file number
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)


所以,不能随便复制OMF格式的文件名,用常规的文件名复制方式即可,如下:

ASMCMD [+DATA/racdb/datafile] > cp /home/grid/tmp/SYSTEM.dbf  ./
copying /home/grid/tmp/SYSTEM.dbf -> +DATA/racdb/datafile/SYSTEM.dbf


ASMCMD [+DATA/racdb/datafile] > ls -ls 
Type      Redund  Striped  Time             Sys  Block_Size  Blocks      Bytes      Space  Name
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   12801  104865792  106954752  EXAMPLE.264.858651503
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   87041  713039872  715128832  SYSAUX.257.858651361
                                            N                                              SYSTEM.dbf => +DATA/ASM/DATAFILE/SYSTEM.dbf.256.917754869
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   12033   98574336  100663296  TEST_TBS.275.910289303
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   14081  115351552  117440512  UNDOTBS1.258.858651363
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192    3201   26222592   27262976  UNDOTBS2.265.858651785
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192     641    5251072    6291456  USERS.259.858651363


但是,还必须使用 alter database rename file '+DATA/racdb/datafile/system.256.858651361' to '+DATA/racdb/datafile/SYSTEM.dbf'; 命令重命名system数据文件,

但由于+DATA/racdb/datafile/system.256.858651361 这个数据文件已经丢失,不存在这个数据文件,所以无法执行以上重命名文件命令,会报如下错误:

03:56:12 SYS@racdb1*SQL> alter database rename file '+DATA/racdb/datafile/system.256.858651361' to 'DATA/racdb/datafile/SYSTEM.dbf';
alter database rename file '+DATA/racdb/datafile/system.256.858651361' to 'DATA/racdb/datafile/SYSTEM.dbf'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01141: error renaming data file 1 - new file 'DATA/racdb/datafile/SYSTEM.dbf' not found
ORA-01110: data file 1: '+DATA/racdb/datafile/system.256.858651361'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

Additional information: 3


可以通过如下方法解决:

RMAN> run {
2> set newname for datafile 1 to '+DATA/racdb/datafile/SYSTEM.dbf';
3> switch datafile 1;
4> }



executing command: SET NEWNAME


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of switch command at 07/21/2016 04:04:30
RMAN-20230: datafile copy not found in the repository
RMAN-06015: error while looking up datafile copy name: +DATA/racdb/datafile/system.dbf


RMAN> catalog start with '+DATA/racdb/datafile';   ##这个必须要执行,否则执行 switch datafile 1;会报如上错误。

searching for all files that match the pattern +DATA/racdb/datafile


List of Files Unknown to the Database
=====================================
File Name: +data/racdb/DATAFILE/SYSTEM.dbf


Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done


List of Cataloged Files
=======================
File Name: +data/racdb/DATAFILE/SYSTEM.dbf

然后再执行以上的rman命令更新控制文件中system数据文件的新位置即可,如下:

RMAN> run {
2> set newname for datafile 1 to '+DATA/racdb/datafile/SYSTEM.dbf';
3> switch datafile 1;
4> }


executing command: SET NEWNAME


datafile 1 switched to datafile copy
input datafile copy RECID=9 STAMP=917755520 file name=+DATA/racdb/datafile/system.dbf


RMAN> 


04:07:02 SYS@racdb1*SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '+DATA/racdb/datafile/system.dbf'    ##已经提示新的system.dbf文件需要恢复了,执行如下恢复即可:


04:07:07 SYS@racdb1*SQL> recover datafile 1;
Media recovery complete.
04:07:15 SYS@racdb1*SQL> alter database open;


Database altered.


OK,主库system数据文件丢失,恢复完成。


<think>嗯,用户需要了解在Oracle 11g RAC环境下对ASM文件改名的方法。用户已经提供了两个站内引用,但主要是关于ASM状态检查文件系统迁移的,改名需求关系不大。 用户可能正在管理一个Oracle 11g RAC环境,需要对ASM磁盘组中的文件进行重命名操作。考虑到ASM文件命名的特殊性,用户可能遇到了存储规范变更或文件命名冲突的问题。从专业角度来看,ASM文件改名在RAC环境下确实需要特殊处理,因为涉及多节点同步文件锁问题。 关于技术方案,首先需要区分文件类型:数据文件、控制文件、日志文件等改名的操作差异很大。核心原则是:必须确保所有节点一致性,操作前要验证磁盘组状态,操作后要验证数据库可用性。特别要注意控制文件改名的特殊要求,因为涉及spfile的修改。 用户可能没有意识到命名限制:ASM文件名不能包含空格或特殊字符,最大长度也有严格限制。这个细节需要在操作手册中强调。另外,用户可能忽略了监听器动态注册问题,在修改spfile路径后需要重新注册监听,这个坑必须提前说明。 考虑到用户引用中提到了srvctl命令,说明用户具备基础运维能力。但改名操作风险较高,必须在操作手册中加入完整的前置检查清单回退方案。特别是对于OCR/Voting Disk这种特殊文件,绝对不能在11g环境下直接改名,这个风险点要重点标注。 最后需要生成的操作手册要突出RAC特性:比如使用asmcmd连接时要注意指定实例名,停机窗口要确保所有节点应用一致等。回退方案必须包含控制文件恢复步骤,因为这是最容易出问题的环节。 </think>在Oracle 11g RAC环境下对ASM文件进行改名需谨慎操作,以下是详细步骤及注意事项: ### 操作步骤(以数据文件为例) 1. **确定文件当前路径** ```sql SELECT file_name FROM dba_data_files; --查询数据文件 SELECT member FROM v$logfile; --查询日志文件 ``` 2. **将表空间置为OFFLINE** ```sql ALTER TABLESPACE users OFFLINE NORMAL; ``` 3. **使用RMAN重命名文件**(核心步骤) ```shell rman target / RMAN> RUN { SET NEWNAME FOR DATAFILE '+DATA/old_dbname/users01.dbf' TO '+DATA/new_dbname/users01.dbf'; ALTER DATABASE COPY OF DATAFILE '+DATA/old_dbname/users01.dbf' TO '+DATA/new_dbname/users01.dbf'; } ``` 4. **更新控制文件** ```sql ALTER DATABASE RENAME FILE '+DATA/old_dbname/users01.dbf' TO '+DATA/new_dbname/users01.dbf'; ``` 5. **恢复表空间在线** ```sql ALTER TABLESPACE users ONLINE; ``` ### 关键注意事项 1. **RAC特有操作** - 操作前关闭所有节点数据库:`srvctl stop database -d dbname` - 仅在**一个节点**执行重命名操作 - 完成后同步节点:`srvctl start database -d dbname` 2. **控制文件特殊处理** 若需移动控制文件(如引用[2]场景): ```sql ALTER SYSTEM SET control_files='+NEW_DG/controlfile.ctl' SCOPE=spfile; ``` **必须重启数据库生效**且需手动复制物理文件。 3. **OCR/Voting Disk禁止直接改名** 如引用[1]所述,OCR/Voting Disk路径变更需使用专用命令: ```shell ocrconfig -replace /new/ocr/path crsctl replace votedisk +NEW_DG ``` ### 验证命令 ```shell asmcmd ls -l +DATA/new_dbname # 验证新文件存在 srvctl status asm -a # 检查ASM状态[^1] SELECT name FROM v$datafile; # 数据库层面验证 ``` ### 风险规避 1. **强制备份**:操作前执行`RMAN> BACKUP CURRENT CONTROLFILE;` 2. **停机窗口**:必须在维护时段操作 3. **回退方案**:备份旧路径文件直至验证完成 4. **命名规范**:避免使用空格特殊字符,最大长度30字节 > **重要提示**:重命名后若出现ORA-01157错误,立即检查控制文件路径是否在所有节点同步。建议通过`asmcmd cp`命令创建副本而非直接移动原始文件以降低风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值