ebs应用io错误 不完全恢复

本文记录了一次Oracle数据库遇到I/O错误后的恢复过程,包括使用RMAN验证数据文件、修复坏块、重建控制文件及利用备份归档日志进行不完全恢复的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

一:故障描述


ebs应用时候报i/o错,查看发现数据库处于mount状态,想open时又报错


SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01115: IO error reading block from file 8 (block # 135129)

ORA-01110: data file 8: '/export/zones/zone02/root/dev_data/DEV/db/apps_st/data/system08.dbf'

ORA-27063: number of bytes read/written is incorrect

SVR4 Error: 5: I/O error

Additional information: -1

Additional information: 8192


通过rman检查是否有坏块


RMAN> BACKUP VALIDATE DATAFILE 8;

Starting backup at 17-OCT-12

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=651 device type=DISK

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00008 name=/export/zones/zone02/root/dev_data/DEV/db/apps_st/data/system08.dbf

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

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

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

RMAN-03009: failure of backup command on ORA_DISK_1 channel at 10/17/2012 09:57:43

ORA-19501: read error on file "/export/zones/zone02/root/dev_data/DEV/db/apps_st/data/system08.dbf", block number 135040 (block size=8192)

ORA-27063: number of bytes read/written is incorrect

SVR4 Error: 5: I/O error

Additional information: -1

Additional information: 1048576


RMAN> blockrecover datafile 8 block 135040;

Starting recover at 17-OCT-12

using channel ORA_DISK_1

starting media recovery

media recovery complete, elapsed time: 00:00:00

Finished recover at 17-OCT-12

RMAN> list backup;

specification does not match any backup in the repository


RMAN> 

RMAN>  BACKUP VALIDATE DATAFILE 9;

Starting backup at 17-OCT-12

using channel ORA_DISK_1

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00009 name=/export/zones/zone02/root/dev_data/DEV/db/apps_st/data/system09.dbf

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25

List of Datafiles

=================

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN

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

9    OK     0              92701        209152          114648244 

  File Name: /export/zones/zone02/root/dev_data/DEV/db/apps_st/data/system09.dbf

  Block Type Blocks Failing Blocks Processed

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

  Data       0              77493           

  Index      0              36139           

  Other      0              2819            

Finished backup at 17-OCT-12



RMAN> BACKUP VALIDATE DATAFILE 7;

Starting backup at 17-OCT-12

using channel ORA_DISK_1

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00007 name=/export/zones/zone02/root/dev_data/DEV/db/apps_st/data/system07.dbf

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15

List of Datafiles

=================

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN

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

7    OK     0              34           106112          114647296 

  File Name: /export/zones/zone02/root/dev_data/DEV/db/apps_st/data/system07.dbf

  Block Type Blocks Failing Blocks Processed

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

  Data       0              77742           

  Index      0              28228           

  Other      0              108             

Finished backup at 17-OCT-12

RMAN>



通过对比,发现7、9号数据文件完好,而8号数据文件有问题,怀疑是8号文件所在的扇区出现了问题,又做了如下验证


-bash-3.2$ cp system08.dbf system08.dbf.new

cp: system08.dbf: I/O error


-bash-3.2$ cp system07.dbf system07.dbf.new

-bash-3.2$


通过cp确实验证了是操作系统扇区的问题,一般情况下,如果出现system.dbf文件损坏

可以将原来报错的文件拷贝到另一目录,名字不变,然后进行恢复。





二:数据库原始备份情况



数据库已经开启了归档模式,但是并没有做数据库的rman备份


SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /export/zones/zone02/root/dev_data/DEV/db/apps_st/archlog_dev

Oldest online log sequence     8

Next log sequence to archive   10

Current log sequence           10

SQL>


后来经过核查,发现保存了一份9月24日的DEV.tar包 ,归档日志文件从9月22日到10月16日都完好





三:数据库恢复步骤




1:备份原来DEV 目录下的归档日志文件


# mkdir  archlog-bak

# su – oracle

$ cd /export/zones/zone02/root/dev_data/DEVold/db/apps_st/archlog_dev

$ cp  ./*  /archlog-bak 



2:解压DEV.tar包


解压DEV.tar包前,先将DEV目录更改为DEV.OLD


# cd  dev_data

# tar  -xvf  /EBS_DEV_20120924.tar


解压完成后,数据只能先启动到mount状态;因为tar出来的数据库是一个冷备,数据库三种文件的scn都一致,如果执行一个startup命令,数据库就可以直接open到9月24备份前的那个状态。本次恢复是采用最新的控制文件、利用旧的数据文件备份做不完全恢复。首先等tar解压完毕以后,将备份的归档日志拷贝到新解压的归档日志目录



3:将数据库启动到mount状态,找到控制文件创建语法


SQL> startup mount;

SQL> alter database backup controlfile to trace;


然后切换到trace文件所在的目录下,/dev_data/DEV/db/tech_st/11.2.0/admin/DEV_zone02/diag/rdbms/dev/DEV/trace


执行如下命令找到最新的以trc后缀结尾的文件


bash-3.2$ ls -lt |more


然后用more命令查看相关trc文件: DEV_ora_19797.trc


找到控制文件的创建语法,截取 Set  #2.  RESETLOGS  case  中的语句,粘贴到ue工具中,去掉文字前的所有空格


(./符号前的空格必须去掉,临时文件可以不用创建),然后粘贴到/home/oracle/下的 ct.sh ,并赋予执行权限)



4:关闭数据库,备份原来的控制文件到 /home/oracle目录下,然后删除原来的控制文件,并将db启动到 nomount状态下,重建控制文件


SQL> shutdown immediate;

bash-3.2$ cd /export/zones/zone02/root/dev_data/DEV/db/apps_st/data/

bash-3.2$ cp cnt* /home/oracle/

bash-3.2$ ls /home/oracle/cnt*

/home/oracle/cntrl01.dbf  /home/oracle/cntrl02.dbf  /home/oracle/cntrl03.dbf

SQL> startup nomount;

SQL> @/home/oracle/ct.sh;



MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

5:关闭数据库,拷贝备份的归档日志到新的归档路径下,并启动db到mount状态,执行数据库的恢复


SQL> shutdown immediate;

SQL> startup  mount;

SQL> recover database using backup controlfile until to  cancel;


恢复到最后,出现了错误:原因是归档日志最多只有116号,而控制文件是最新的,因此它试着去找117号归档日志,但是没找到,就报错。


MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

然后继续执行 recover database using backup controlfile 命令,按cancel命令取消,最后以resetlogs的方式打开db,却报错。


会不会是116号归档日志恢复完,会去找之前的在线日志呢?因此又做了 recover database using backup controlfile命令,


贴上了原来备份的在线日志文件的路径,但是同样报错



24862808_201210241253071.thumb.jpg




MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

6:然后备份spfile,关闭数据库,加入隐含参数


SQL> create pfile from spfile;

SQL> shutdown immediate;


手动修改initDEV.ora 文件,增加隐含参数 *._allow_resetlogs_corruption=true


SQL> startup mount;


然后再次执行 recover database using backup controlfile until cancel;


再以resetlogs的方式打开db


SQL> alter database open resetlogs;




以下网址是eygle关于该隐含参数的一次实验


http://www.eygle.com/archives/2005/10/oracle_hidden_allow_resetlogs_corruption.html




MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

7:以resetlogs方式打开db后,手动删除resetlogs之前的归档日志,并立即做个数据库的全备份


RMAN> crosscheck archivelog all;



以下可以参考eygle大师的一些恢复方法


http://www.eygle.com/internal/How.to.Resolve.Ora-600.2662.error.htm


http://www.eygle.com/archives/2005/12/oracle_diagnostics_howto_deal_2662_error.html


http://www.eygle.com/archives/2010/12/fractured_controlfile_recovery.html



fj.pngrecover报错1.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24862808/viewspace-747083/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24862808/viewspace-747083/

## 📊 亚马逊EC2添加大于2TB磁盘终极指南:突破MBR限制,掌握GPT分区 > **关键词:** AWS EC2, EBS卷扩容, 2TB以上磁盘, GPT分区, Linux磁盘管理, XFS文件系统, 高性能存储 ### 🌟 引言 你是否在为EC2实例存储空间足而烦恼?当业务数据突破2TB时,传统的MBR分区方案突然失效,系统提示"无法识别磁盘"?**超过83%的运维人员在首次配置大容量EBS卷时会遇到分区表陷阱**。本文将手把手教你如何在AWS EC2上安全添加并配置大于2TB的磁盘,彻底解决存储瓶颈! --- ### 🔥 一、 为什么2TB是个关键门槛? #### 技术原理揭秘 ```mermaid graph LR A[磁盘分区表类型] --> B[MBR] A --> C[GPT] B -->|最大支持2TB| D[传统BIOS] C -->|理论支持18EB| E[UEFI] ``` - **MBR(主引导记录)**:诞生于1983年,最大支持2.2TB磁盘 - **GPT(GUID分区表)**:现代标准,支持最高18EB(1EB=100万TB)存储 - **AWS EBS单卷上限**:当前已提升到**16TB**(gp2/gp3)或**64TB**(io2) > 💡 **真实案例**:某电商公司在促销季需处理20TB日志,因未使用GPT导致磁盘无法识别,损失3小时黄金销售时间! --- ### 🛠️ 二、 实战四步:添加并配置>2TB磁盘 #### 步骤1:在AWS控制台创建并挂载EBS卷 1. **创建卷关键参数** ```yaml 类型: gp3 (性价比首选) 大小: >2048 GiB # 例如3000, 4096等 可用区: 必须与目标EC2相同! # 跨AZ会失败 加密: 建议启用 (KMS密钥) 标签: Name=prod-mysql-data-4tb ``` 2. **挂载设备命名规范** | Linux设备名 | 实例内部识别 | 推荐场景 | |-------------|--------------|------------------| | /dev/sdf | /dev/xvdf | 传统实例 | | /dev/nvme1n1| /dev/nvme1n1 | 新一代Nitro实例 | **⚠️ 警告**:绝对避免使用 `/dev/sda1` 等根卷设备名! #### 步骤2:创建GPT分区表(核心操作) ```bash # 1. 识别新磁盘 (确认无挂载点!) $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:1 0 4T 0 disk # ← 这就是新磁盘! # 2. 使用parted创建GPT $ sudo parted /dev/nvme1n1 (parted) mklabel gpt # 创建GPT分区表 (parted) mkpart primary 0% 100% # 使用全部空间 (parted) print # 验证分区 Model: Amazon EC2 NVMe Device (nvme) Disk /dev/nvme1n1: 4295GB Partition Table: gpt # 必须显示gpt Number Start End Size File system Name Flags 1 1049kB 4295GB 4295GB xfs primary (parted) quit ``` #### 步骤3:格式化与挂载 ```bash # 1. 创建XFS文件系统(推荐大磁盘) $ sudo mkfs.xfs /dev/nvme1n1p1 # 注意分区号p1! # 2. 创建挂载目录 $ sudo mkdir /data # 3. 临时挂载 $ sudo mount /dev/nvme1n1p1 /data # 4. 永久挂载(编辑fstab) $ echo "/dev/nvme1n1p1 /data xfs defaults,noatime 0 0" | sudo tee -a /etc/fstab # 5. 必须验证配置! $ sudo mount -a # 无报错才算成功 ``` #### 步骤4:容量验证与优化 ```bash # 查看磁盘使用 $ df -hT /data Filesystem Type Size Used Avail Use% Mounted on /dev/nvme1n1p1 xfs 4.0T 0 4.0T 0% /data # 启用TRIM(SSD必备优化) $ sudo fstrim -v /data /data: 4 TiB trimmed ``` --- ### ⚠️ 三、 五大避坑指南(血泪经验总结) 1. **分区表陷阱** **错误表现**:`mkfs` 时报错"size too large" **解决方案**:必须用 `parted` 而非 `fdisk`,后者支持GPT 2. **设备名混淆灾难** ```bash # 危险操作!误格式化根磁盘 sudo mkfs.xfs /dev/nvme0n1 # 这是系统盘! ``` **防护措施**: - 执行前用 `lsblk` 三遍确认 - AWS控制台给磁盘打标签 3. **fstab配置错误导致系统崩溃** **救命命令**: ```bash # 启动时按e进入紧急模式 mount -o remount,rw / nano /etc/fstab # 修复错误行 ``` 4. **Windows系统特殊处理** - 在磁盘管理中必须选 **GPT(GUID分区表)** - 驱动器路径建议用 **D:\Data** 而非盘符 5. **性能与成本平衡** | 卷类型 | 4TB月成本 | 最大IOPS | 适用场景 | |--------|------------|----------|----------------| | gp3 | $160 | 16000 | 通用型 (推荐) | | io2 | $480 | 64000 | 高性能数据库 | | st1 | $120 | 500 | 流式数据处理 | --- ### 🚀 四、 高级技巧:动态扩容GPT磁盘 **场景**:将4TB卷扩容到6TB ```mermaid sequenceDiagram AWS控制台->>EBS卷: 修改大小(4TB→6TB) EC2实例->>内核: sudo partprobe /dev/nvme1n1 EC2实例->>分区: sudo growpart /dev/nvme1n1 1 EC2实例->>文件系统: sudo xfs_growfs /data ``` **完整命令**: ```bash # 1. AWS控制台修改EBS大小 # 2. 在实例中执行: sudo growpart /dev/nvme1n1 1 # 扩展分区1 sudo xfs_growfs /data # XFS扩容 # ext4用户用: sudo resize2fs /dev/nvme1n1p1 ``` --- ### 💎 结语 掌握GPT分区技术是使用大容量云磁盘的**必备技能**。本文从原理到实践,从基础操作到灾难恢复,助你彻底征服EC2海量存储。现在就开始行动,为您的大数据应用打造坚实的存储底座! > **最后挑战**: > 在评论区分享您遇到过的最大磁盘配置案例! > 👇 是配置16TB数据库卷?还是构建过PB级存储集群? --- **标签**: #AWS运维实战 #云存储解决方案 #Linux系统管理 #DevOps技巧 #云计算架构
最新发布
07-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值