我刚刚开始工作,并确定了一个问题,其中数据库当前没有正确备份,可以这么说。我们每6小时备份一次,使用Oracle本地备份实用程序,但我们也被一家公司出售了一个流程,他们声称只需获取文件系统副本就可以在本质上执行数据库的“热”备份我们的数据库文件,当我们需要恢复时,我们只需关闭Oracle,然后复制已经复制的文件,重新启动Oracle,世界将再次完整。我们面临的挑战是,我们还没有让它发挥作用。我需要花更多时间来回顾一下Oracle给出的消息,但我的主要问题是,“是否有可能”在Oracle仍在运行时获取Oracle文件的副本,并在以后使用这些文件来恢复数据库?我知道,如果关闭数据库,然后进行复制,它就可以工作了,但这是我第一次听到在数据库运行时可以创建副本(文件系统)。任何指导将不胜感激。这是我们得到的错误。
ORA-00314: log 3 of thread 1, expected sequence# 1939 doesn't match 1944
ORA-00312: online log 3 thread 1: 'E:\ORACLE\ORADATA\ITMS\REDO03.LOG'
答案 0 :(得分:3)
是的,这是可能的,但您必须先将所有表空间置于备份模式,然后将其取出(例如ALTER TABLESPACE x BEGIN BACKUP
和ALTER TABLESPACE x END BACKUP
;您需要检查语法并制作确定它适合你的情况!)。这非常简单化,这告诉Oracle不要写入任何数据文件,因此它们都保持一致状态。
否则,您遇到的两个主要问题是,在复制单个文件时会更新这些文件,因此单个文件可能会损坏;更明显的是,不同的文件具有不同的内部时间戳和序列,因此Oracle不允许使用它们。
如果您正在使用您已购买的流程,那么它应该已经在处理所有这些了。听起来备份是可以的,这是你没有工作的恢复。
我有一段时间没有参与热备份的恢复,所以其他人需要提供有关实际错误的详细信息。我读到它的是你试图用恢复的数据文件打开但是后来的实时重做日志。在恢复时,我认为您必须使用自备份以来生成的重做日志来RECOVER
数据库;或者,如果您尝试恢复到该时间点,则可以使用RESETLOGS
指令打开数据,并丢失稍后发布的所有重做日志中的所有更改。但真的需要比这更明智的建议......
答案 1 :(得分:3)
据我所知,有两种方法可以从正在运行的Oracle实例中“复制”数据文件。
答案 2 :(得分:1)
有可能。您必须处于ARCHIVELOG模式。
示例脚本适用于手册:
Alter tablespace USERS begin backup;
host cp -p /u02/oradata/PROD/users01.dbf /u03/backup/PROD/
host cp -p /u02/oradata/PROD/users02.dbf /u03/backup/PROD/
Alter tablespace USERS end backup;
但是,我建议只使用RMAN。 RMAN是QUITE ROBUST,免费提供,可以进行热备份,也可以进行冷备份。它将克隆到另一个实例,克隆为某个时间点,恢复到某个时间点等。任何手动备份过程都应该迁移到使用RMAN。
如果你想在整个数据库打开时备份它(我更喜欢带有DBA的Oracle,所以你可以避免脚本中的密码,但是ymmv):
$ ORAENV_ASK=NO
$ ORACLE_SID=PROD
$ . oraenv
$ rman target=/
Recovery Manager: Release 10.2.0.4.0 - Production on Thu Oct 28 14:23:29 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: PROD (DBID=x)
RMAN> backup as compressed backupset database plus archivelog;
...
Backup Complete.
答案 3 :(得分:1)
我使用在Amazon EC2上运行的非任务关键型数据库有效地完成了这项工作。我的备份策略是定期拍摄EBS卷的快照。要恢复备份,我从快照创建一个新的EBS卷,使用它启动实例,然后运行RECOVER DATABASE
。
当然,这会丢失拍摄快照时正在进行的所有交易。