Oracle手工恢复案例(非归档模式)

本文详细介绍了Oracle数据库故障恢复与冷备的全过程,包括如何将数据库切换为非归档模式、进行冷备份、操作日志、关闭数据库删除数据文件、恢复数据文件并验证恢复效果,以及在日志发生切换导致历史日志被覆盖时的不完全恢复流程。此外,还阐述了如何通过还原控制文件和数据文件来实现不完全恢复,并最终验证恢复后的数据完整性和正确性。

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

转自http://www.2cto.com/database/201307/224409.html


1.首先把数据库切成非归档模式:

startup mountforce

alter database noarchivelog;

alter database open;

再次查看数据库模式

sys@SIQIAN11>archive log list

Database log mode              No Archive Mode

Automaticarchival             Disabled

Archivedestination            /backup/arch

Oldest online log sequence    15

Current log sequence           17

2.冷备

3.查看当前日志信息

sys@SIQIAN11>select group#,sequence#,archived,status from v$log;



    GROUP#  SEQUENCE# ARC STATUS

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

         1         19 NO  CURRENT

         2         17 NO  INACTIVE

         3         18 NO  INACTIVE

4.用test用户登录建表插入数据

test@SIQIAN11>create table t01(id int) tablespace test;



test@SIQIAN11>begin

  2  for i in 1..10

  3  loop

  4  insert into t01 values(i);

  5  end loop;

  6  end;

  7  /

  commit;

  再次查看当前日志

  sys@SIQIAN11>select group#,sequence#,archived,status from v$log;



    GROUP#  SEQUENCE# ARC STATUS

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

         1         19 NO  CURRENT

         2         17 NO  INACTIVE

         3         18 NO  INACTIVE

    说明这次变化记录在了第1组日志中,此时日志没有被覆盖。

5.关库删除数据文件

shutdown abort

[oracle@siqian siqian11g]$ rm -f /u01/oradata/siqian11g/test01.dbf

6.起库并查看要恢复的数据文件

startup

出错:

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file

ORA-01110: data file 6: '/u01/oradata/siqian11g/test01.dbf'

查看要恢复的数据文件

sys@SIQIAN11>select file#,error from v$recover_file;

     FILE# ERROR

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

         1 UNKNOWNERROR

         2 UNKNOWNERROR

         3 UNKNOWNERROR

         4 UNKNOWNERROR

         5 UNKNOWNERROR

         6 FILE NOT FOUND



6 rows selected.

7.还原数据文件并做恢复

[oracle@siqian siqian11g]$ cp /backup/cold/test01.dbf /u01/oradata/siqian11g/

sys@SIQIAN11>recover datafile 6;

Media recoverycomplete.

sys@SIQIAN11>alter database open;

8.验证

sys@SIQIAN11>select * from test.t01;

        ID

----------

         1

         2

         3

         4

         5

         6

         7

         8

         9

        10

10 rows selected.

 

 
案例二:日志发生切换,历史日志被覆盖(只能作不完全恢复)
承接上面的例子,这次做完一些操作后切日志使其切换。
 
模拟环境:

1.test用户登录再在t01表中插入若干数据

test@SIQIAN11>begin

  2  for i in 11..20

  3  loop

  4  insert into t01 values(i);

  5  end loop;

  6  end;

  7  /

PL/SQL procedure successfully completed.

commit;

2.查看当前日志信息



sys@SIQIAN11>select group#,sequence#,archived,first_change# from v$log;



    GROUP#  SEQUENCE# ARC FIRST_CHANGE#

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

         1         19 NO        2200111

         2         20 NO        2225498

         3         18 NO        2179197

也就是说刚才的变化记录在了第1组中

3.切换日志,使其被覆盖

alter system switch logfile;

多切几次然后再次查看:

sys@SIQIAN11>select group#,sequence#,archived,first_change# from v$log;

    GROUP#  SEQUENCE# ARC FIRST_CHANGE#

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

         1         22 NO        2226207

         2         23 NO        2226211

         3         21 NO        2226205

现在序列19已经被覆盖。

而且t01表中有20条记录。

4.关库删除相应的数据文件

shutdown abort

[oracle@siqian siqian11g]$ rm -f /u01/oradata/siqian11g/test01.dbf

5.起库并查看要恢复的数据文件

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file

ORA-01110: data file 6: '/u01/oradata/siqian11g/test01.dbf'

sys@SIQIAN11>select file#,error from v$recover_file;

     FILE# ERROR

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

         1 UNKNOWN ERROR

         2 UNKNOWN ERROR

         3 UNKNOWN ERROR

         4 UNKNOWN ERROR

         5 UNKNOWN ERROR

         6 FILE NOT FOUND



6 rows selected.

6.还原数据文件并恢复

[oracle@siqian siqian11g]$ cp /backup/cold/test01.dbf /u01/oradata/siqian11g/

sys@SIQIAN11>recover datafile 6;

ORA-00279: change 2201687 generated at 06/29/2013 18:36:58 needed for thread 1

ORA-00289: suggestion : /backup/arch/arch_1_819372290_19.log

ORA-00280: change 2201687 for thread 1 is in sequence #19

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

auto

ORA-00308: cannot open archived log '/backup/arch/arch_1_819372290_19.log'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3



ORA-00308: cannot open archived log '/backup/arch/arch_1_819372290_19.log'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

因为序列19的日志没有被归档,所以在恢复时会报错。所以只能做不完全恢复。

7.还原所有控制文件和数据文件来做不完全恢复

[oracle@siqian siqian11g]$ cp /backup/cold/ *.ctl /u01/oradata/siqian11g/

[oracle@siqian siqian11g]$ cp /backup/cold/ *.dbf /u01/oradata/siqian11g/

8.把库起到Mount并查看数据文件头和控制文件头的SCN信息

startup mount force

查看SCN

sys@SIQIAN11>select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#

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

         1            2201687

         2            2201687

         3            2201687

         4            2201687

         5           2201687

         6            2201687



6 rows selected.

sys@SIQIAN11>select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#

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

         1            2201687

         2            2201687

         3            2201687

         4            2201687

         5            2201687

         6            2201687



6 rows selected.

但redo里的SCN和数据文件、控制文件里的SCN是不同步的,所以现在开库会出问题

alter database open;

ERROR at line 1:

ORA-00338: log 1 of thread 1 is more recent than control file

ORA-00312: online log 1 thread 1: '/u01/oradata/siqian11g/redo01.log'

7.对整个数据库做不完全恢复

recover database untilcancel;

8.以resetlogs方式打开数据库

alter database open resetlogs;

9.验证

select * from test.t01;

发现只有10条记录。

10.冷备

 

因为数据库是以resetlogs方式打开的,所以此时最好做一个数据库全备。
资源下载链接为: https://pan.quark.cn/s/140386800631 通用大模型文本分类实践的基本原理是,借助大模型自身较强的理解和推理能力,在使用时需在prompt中明确分类任务目标,并详细解释每个类目概念,尤其要突出类目间的差别。 结合in-context learning思想,有效的prompt应包含分类任务介绍及细节、类目概念解释、每个类目对应的例子和待分类文本。但实际应用中,类目和样本较多易导致prompt过长,影响大模型推理效果,因此可先通过向量检索缩小范围,再由大模型做最终决策。 具体方案为:离线时提前配置好每个类目的概念及对应样本;在线时先对给定query进行向量召回,再将召回结果交给大模型决策。 该方法不更新任何模型参数,直接使用开源模型参数。其架构参考GPT-RE并结合相关实践改写,加入上下文学习以提高准确度,还使用BGE作为向量模型,K-BERT提取文本关键词,拼接召回的相似例子作为上下文输入大模型。 代码实现上,大模型用Qwen2-7B-Instruct,Embedding采用bge-base-zh-v1.5,向量库选择milvus。分类主函数的作用是在向量库中召回相似案例,拼接prompt后输入大模型。 结果方面,使用ICL时accuracy达0.94,比bert文本分类的0.98低0.04,错误类别6个,处理时添加“家居”类别,影响不大;不使用ICL时accuracy为0.88,错误58项,可能与未修改prompt有关。 优点是无需训练即可有较好结果,例子优质、类目界限清晰时效果更佳,适合围绕通用大模型api打造工具;缺点是上限不高,仅针对一个分类任务部署大模型不划算,推理速度慢,icl的token使用多,用收费api会有额外开销。 后续可优化的点是利用key-bert提取的关键词,因为核心词语有时比语意更重要。 参考资料包括
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值