数据库restore时遇到1119错误

本文记录了一次紧急的Oracle数据库恢复经历。在客户主服务器发生故障后,通过备用机进行数据库恢复时遇到ORA-01119和ORA-27040错误。经过排查,发现是由于AIX系统上的文件大小限制导致大文件无法恢复。通过调整文件大小限制解决了问题。

今夜天高云淡,夜色迷人,正跟LP在餐馆吃饭,没事聊聊天,忽然电话响起,美好画面就此打破。。。
客户紧急求助,让我立马赶赴现场解决故障,没法,跟LP致歉,然后飞奔出去,打着飞的就奔赴现场。
故障情况如下:客户主服务器重大故障,盘阵损坏,暂时无法使用或者修复,不过磁带机上有Rman备份,因此选择了一台备用机进行修复,服务器为AIX4.3,Oracle为10g,单机,所有备份归档都有(这就放心了)。。。
客户在做恢复时报错(一颗心立马揪了起来。。。不会备份的文件有问题吧),错误代码为ORA-01119和ORA-27040,也就是说,在restore文件到新服务器存储的时候报错,无法restore备份。
感到客户现场,气氛有点紧张,呵呵,原来客户领导也在,这不给咱压力嘛。
开始了解详细的用户操作步骤,从描述上看,备机与原服务器的os版本相同,补丁也都打完全了,数据库版本也一致,存储空间和目录也都与原来一样,用户将磁带机连好后,将初始化参数文件复制到相应位置,创建了口令文件,nomount数据库后,通过rman将控制文件restore到相应的目录中,mount数据库后开始restore数据文件,在数据文件restore到一个undo表空间的文件时报错。
听上去好像用户也没有任何操作错误,检查了一下,确实备机与主机环境基本上一样,为什么会报ORA-01119和ORA-27040错误呢?还是先亲自试试看吧。
在mount状态下,我开始逐一测试restore文件,结果发现,并不是所有的数据文件都不能restore,有些可以正常restore出来,但有些数据文件不行,而且发现了一个很明显的现象,不能restore出来的文件一般都比较大。
分析ORA-01119和ORA-27040错误原因,一般来说主要是存储空间不够,没有目录操作权限之类,但如果是这种原因,那应该在相应目录下所有文件都不能创建,但现在的情况是大文件创建不行,小文件没问题。。。说到这里,可能大部分人都猜到了——对地,就是大文件的问题。。。这也算是经典问题了,很多平台都有,这次是aix,上次我还遇到过在hp unix上。
经过检查,发现备机上确实没有调整文件大小限制,需要进行调整。在aix上影响文件大小限制的主要有两个地方,一个是文件系统类型本身,需要使用large file enable filesystem,例如如果使用jfs2系统,默认就支持大文件;另一个是os上一个核心参数的设置。
可以使用下面的方法取消文件大小限制:
找到 /etc/security/limits文件,把fszie改为-1,-1表示文件大小无限制(当然也可以设置为有限制,如果限制为4GB,可以将fszie设置为 4GB/512 的值),在设置后重新连接会话,设置生效。
找到问题原因了,自然后面的restore、recover就没问题了,该故障解决完成,我还来得及继续回家跟LP欣赏夜景去。。。


注意:Oracle的有些文件需要注意这个问题,如果用到这些文件,最好将文件大小设置为无限制,主要要关注的文件有:
1、数据文件(设置了自动扩展,一般可以扩展到8gb-128GB,大文件表空间的数据文件可以扩展到128TB)
2、告警和trace文件,尤其是一些bug或者异常产生的trace文件
3、Rman备份文件
4、exp或者expdp的导出文件

 

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

转载于:http://blog.itpub.net/22235/viewspace-591452/

<think>我们正在讨论金仓数据库的sys_restore工具,用户的问题是如何使用sys_restore恢复特定数据库。 根据引用[1]的内容,我们得知可以通过图形界面工具sysmodel进行数据库的导出(即备份),但用户明确要求使用命令行工具sys_restore进行恢复。 注意:引用[1]主要描述的是通过图形界面导出备份,但用户的问题是关于命令行恢复。因此,我们需要结合金仓数据库的文档和常见用法来回答。 在之前的回答中,我们已经提到sys_restore的基本用法,并指出错误“too many command-line arguments”通常是由于参数格式错误引起的。 现在,用户意图是了解如何使用sys_restore恢复特定数据库。 正确的恢复步骤: 1. 确保已经创建了目标数据库(如果不存在,需要先创建)。 2. 使用sys_restore命令,指定目标数据库名和备份文件。 基本命令格式: ```bash sys_restore -d [目标数据库名] [备份文件路径] ``` 例如,将备份文件`/backup/testdb_20240524.dmp`恢复到数据库`testdb`: ```bash sys_restore -d testdb /backup/testdb_20240524.dmp ``` 如果备份文件是自定义格式(比如目录格式或压缩格式),可能需要使用其他选项,例如`-F c`(自定义格式)或`-F d`(目录格式),但通常金仓的备份文件扩展名为dmp,默认格式是二进制格式(由sys_dump生成)。 注意:如果备份文件是通过sys_dump导出的全库备份,那么恢复会将所有对象恢复到指定的数据库中。 如果需要恢复到一个新的数据库,请确保先创建该数据库。可以使用命令行工具`createdb`或SQL命令`CREATE DATABASE`。 例如,创建数据库: ```bash createdb -U username testdb ``` 然后使用sys_restore恢复。 如果备份文件只包含特定模式或表,恢复也可以选择只恢复部分对象,但通常需要指定相应的选项。 常用选项: - `-d dbname` 或 `--dbname=dbname`:指定要恢复到的数据库名。 - `-c`:在恢复前先删除数据库对象(如果存在)。 - `-C`:在恢复前先创建数据库(需要先连接到某个数据库,如postgres,然后创建目标数据库)。 - `-F format`:指定备份文件的格式(t: 文本, c: 自定义, d: 目录)。 - `-l`:列出备份文件中的内容。 - `-t table`:只恢复指定的表。 - `-s`:只恢复模式(结构),不恢复数据。 - `-a`:只恢复数据,不恢复模式(结构)。 - `-j` 或 `--jobs`:使用多个并行任务进行恢复(加快速度)。 示例:使用并行任务(4个)恢复数据库: ```bash sys_restore -d testdb -j 4 /backup/testdb_20240524.dmp ``` 示例:只恢复备份文件中的某个表(例如mytable): ```bash sys_restore -d testdb -t mytable /backup/testdb_20240524.dmp ``` 注意:恢复操作需要确保目标数据库不存在冲突(比如表已经存在)。可以使用`-c`选项在恢复前删除已有对象,但请谨慎使用,以免丢失数据。 另外,恢复操作通常需要以超级用户身份执行,或者具有足够权限的用户。 如果备份文件是加密的,还需要提供解密密钥。 查看帮助: ```bash sys_restore --help ``` 或者 ```bash sys_restore -? ``` 根据金仓数据库的版本,选项可能略有不同,请以实际版本为准。 因此,总结恢复特定数据库的步骤: 1. 创建目标数据库(如果不存在)。 2. 使用sys_restore命令,通过`-d`选项指定目标数据库,并提供备份文件路径。 注意:在恢复过程中,确保没有其他用户连接到目标数据库,否则可能会失败。 如果遇到权限问题,可能需要使用`-U`选项指定数据库超级用户。 例如: ```bash sys_restore -U system -d testdb /backup/testdb_20240524.dmp ``` 其中,`system`是金仓数据库的默认超级用户。 如果备份文件很大,恢复可能需要较长间。 最后,生成相关问题: 1. 如何创建金仓数据库? 2. 如何使用sys_dump备份金仓数据库? 3. sys_restore恢复如何只恢复特定表? 4. 恢复过程中出现权限错误怎么办? 5. sys_restore支持哪些备份格式? 注意:引用[1]中提到了图形界面导出备份,但用户的问题是关于命令行恢复,所以我们在回答中主要关注命令行方式。</think>### 金仓数据库使用 sys_restore 恢复特定数据库的步骤 #### 1. **准备目标数据库** - 如果目标数据库不存在,需先创建: ```sql CREATE DATABASE target_db; ``` - 确保当前用户具有目标数据库的恢复权限(建议使用超级用户) #### 2. **执行恢复命令** 基本语法: ```bash sys_restore -d [目标数据库名] [备份文件路径] ``` **示例**: ```bash sys_restore -d sales_db /backups/sales_20240524.dmp ``` - `-d sales_db`:指定目标数据库名 - `/backups/sales_20240524.dmp`:备份文件路径 #### 3. **常用选项说明** | 选项 | 功能 | 示例 | |------|------|------| | `-c` | 恢复前删除已有对象 | `sys_restore -c -d sales_db backup.dmp` | | `-s` | 只恢复模式(表结构) | `sys_restore -s -d sales_db backup.dmp` | | `-a` | 只恢复数据(需表已存在) | `sys_restore -a -d sales_db backup.dmp` | | `-t table_name` | 恢复特定表 | `sys_restore -t orders -d sales_db backup.dmp` | | `-j 4` | 并行恢复(加速大文件恢复) | `sys_restore -j 4 -d sales_db backup.dmp` | #### 4. **恢复流程验证** ```bash # 连接目标数据库 ksql -U system -d sales_db -- 检查恢复结果 SELECT * FROM pg_tables WHERE schemaname='public'; ``` #### 5. **注意事项** - 备份文件需由 `sys_dump` 生成(如引用[1]所述导出流程) - 恢复大型数据库建议使用 `-j` 并行选项 - 若出现权限错误,可尝试: ```bash sys_restore -U system -W -d sales_db backup.dmp ``` (`-U` 指定管理员账号,`-W` 强制密码验证) > 引用[1]中提到的图形界面操作(sysmodel工具)可作为替代方案,但命令行方式更灵活高效,尤其适合自动化任务[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值