当前位置: 首页 > java >正文

Oracle无法正常OPEN(四)

模拟部分数据文件和所有redo日志文件丢失

创建测试数据

create tablespace test datafile '/data/oracle/prod/test01.dbf' size 10M;
create user test identified by oracle default tablespace test;
grant connect,resource to test;
grant unlimited tablespace to test;
conn test/oracle;
create table t1(id int,name varchar(10));
insert into t1 values(1,'aaa');
commit;

模拟数据破坏

mv test01.dbf test01.dbf_bak
mv redo0*.log ../

尝试重启

SQL> startup
ORACLE instance started.Total System Global Area 3221225472 bytes
Fixed Size                  8625856 bytes
Variable Size             788529472 bytes
Database Buffers         2415919104 bytes
Redo Buffers                8151040 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/data/oracle/prod/test01.dbf'

控制文件恢复

alter database backup controlfile  to trace as  '/home/oracle/cur.trc';

恢复控制文件

SQL> @cur.sql
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS FORCE LOGGING ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01565: error in identifying file '/data/oracle/prod/redo01.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
#尝试使用noresetlogs 只能使用resetlogs 恢复控制文件
[oracle@test ~]$  vi cur.sql
CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS FORCE LOGGING ARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 100MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/data/oracle/prod/redo01.log'  SIZE 200M BLOCKSIZE 512,GROUP 2 '/data/oracle/prod/redo02.log'  SIZE 200M BLOCKSIZE 512,GROUP 3 '/data/oracle/prod/redo03.log'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE'/data/oracle/prod/system01.dbf','/data/oracle/prod/sysaux01.dbf','/data/oracle/prod/undotbs01.dbf','/data/oracle/prod/users01.dbf'
CHARACTER SET AL32UTF8
SQL>  @cur.sqlControl file created.

恢复数据库

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;
ORA-00279: change 2965079 generated at 05/02/2025 13:32:02 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/arch/1_2_1200058318.dbf
ORA-00280: change 2965079 for thread 1 is in sequence #2

修改隐含参数

alter system set "_allow_resetlogs_corruption"=true scope=spfile;
shutdown immediate;
startup mount;
alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-19502: write error on file "/data/oracle/prod/redo01.log", block number
329729 (block size=512)
ORA-27072: File I/O error
Additional information: 4
Additional information: 329729
Additional information: 3584

再次恢复数据库


SQL> recover database using backup controlfile until cancel;
ORA-00279: change 2965079 generated at 05/02/2025 13:32:02 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/arch/1_2_1200058318.dbf
ORA-00280: change 2965079 for thread 1 is in sequence #2Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/data/oracle/prod/system01.dbf'ORA-01112: media recovery not started

清理redo日志的未归档记录

alter database clear unarchived logfile group 1;   
alter database clear unarchived logfile group 2;
alter database clear unarchived logfile group 3;

尝试启动数据库

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [kcbzib_kcrsds_1], [], [], [], [],
[], [], [], [], [], [], []
Process ID: 22694
Session ID: 9 Serial number: 11734#重新启动
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.Total System Global Area 3221225472 bytes
Fixed Size                  8625856 bytes
Variable Size             788529472 bytes
Database Buffers         2415919104 bytes
Redo Buffers                8151040 bytes
Database mounted.
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recoverySQL>  alter database open;alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/data/oracle/prod/system01.dbf'#查看数据文件SCN号和控制文件SCN号
SQL> select checkpoint_change# from v$database;CHECKPOINT_CHANGE#
------------------2965083SQL>  select name,CHECKPOINT_CHANGE# from v$datafile_header;NAME
--------------------------------------------------------------------------------
CHECKPOINT_CHANGE#
------------------
/data/oracle/prod/system01.dbf2965083/data/oracle/prod/sysaux01.dbf2965083/data/oracle/prod/undotbs01.dbf2965083NAME
--------------------------------------------------------------------------------
CHECKPOINT_CHANGE#
------------------
/data/oracle/prod/users01.dbf2965083#数据文件SCN号明明一致,但是open就是显示需要恢复数据文件,但是执行recover database 还是报错
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-16433: The database or pluggable database must be opened in read/write
mode.

以noresetlogs方式再次重建一次控制文件

[oracle@test ~]$ vi cur.sql 
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS FORCE LOGGING ARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 100MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/data/oracle/prod/redo01.log'  SIZE 200M BLOCKSIZE 512,GROUP 2 '/data/oracle/prod/redo02.log'  SIZE 200M BLOCKSIZE 512,GROUP 3 '/data/oracle/prod/redo03.log'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE'/data/oracle/prod/system01.dbf','/data/oracle/prod/sysaux01.dbf','/data/oracle/prod/undotbs01.dbf','/data/oracle/prod/users01.dbf'
CHARACTER SET AL32UTF8
;
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.Total System Global Area 3221225472 bytes
Fixed Size                  8625856 bytes
Variable Size             788529472 bytes
Database Buffers         2415919104 bytes
Redo Buffers                8151040 bytes
SQL> @cur.sqlControl file created.SQL> RECOVER DATABASE;
Media recovery complete.
SQL> alter database open;Database altered.

查看数据是否丢失

用户和数据完全丢失
SQL> select username from dba_users where username='TEST';no rows selectedSQL> select owner,table_name from dba_tables where table_name='T1' and owner='TEST';no rows selected

遗留问题

此时表空间test 在dba_tablespaces视图中还在
SQL>  select tablespace_name from dba_tablespaces;TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TEST
尝试删除页删除不了
SQL> drop tablespace test including contents and datafiles;
drop tablespace test including contents and datafiles
*
ERROR at line 1:
ORA-01561: failed to remove all objects in the tablespace specified创建test表空间会报错
SQL> create tablespace test datafile '/data/oracle/prod/test01.dbf' size 10M;
create tablespace test datafile '/data/oracle/prod/test01.dbf' size 10M
*
ERROR at line 1:
ORA-01543: tablespace 'TEST' already exists创建同名表也失败
SQL> conn test/oracle;
Connected.
SQL> create table t1(id int,name varchar(10));
create table t1(id int,name varchar(10))
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [], [], [], [], []
生产环境还是马上做迁移。测试环境也无所谓了。
如果有办法删除这个表空间,欢迎评论或留言
http://www.xdnf.cn/news/3644.html

相关文章:

  • Spring AI 实战:第一章、Spring AI入门之DeepSeek调用
  • 天翼云ftp服务器搭建详细步骤,ftp服务器路径怎么写?
  • Centos9 安装 RocketMQ5
  • WebSocket分布式实现方案
  • MySQL中的窗口函数
  • Modbus 通讯协议(超详细,简单易懂)
  • Qt 中实现观察者模式(Observer Pattern)
  • Milvus(12):分析器
  • 虚拟机软件详解
  • AI日报 · 2025年5月03日|Perplexity 集成 WhatsApp,苹果传与 Anthropic 合作开发 Xcode
  • 青少年编程与数学 02-018 C++数据结构与算法 24课题、密码学算法
  • 【C#】一个类中的接口方法使用static和不使用static的区别
  • aidermacs开源程序使用 Aider 在 Emacs 中进行 AI 配对编程
  • 使用xlwings将excel表中将无规律的文本型数字批量转化成真正的数字
  • 自定义Dockerfile,发布springboot项目
  • Mysql进阶篇1_存储引擎、索引、SQL性能分析指令
  • 基于Jenkins的DevOps工程实践之Jenkins共享库
  • AVIOContext 再学习
  • Spring 容器相关的核心注解​
  • 19. LangChain安全与伦理:如何避免模型“幻觉“与数据泄露?
  • Linux电源管理(5)_Hibernate和Sleep功能介绍
  • ElasticSearch深入解析(九):Object、Nested、Flattened类型
  • 【RabbitMQ】 RabbitMQ快速上手
  • Python 函数装饰器和闭包(使用装饰器改进“策略”模式)
  • 玩转Docker | 使用Docker部署AI证件照工具
  • 【2025】ORM框架是什么?有哪些常用?Mybatis和Hibernate是什么样的?
  • ES6/ES11知识点
  • wpf CommandParameter 传递MouseWheelEventArgs参数 ,用 MvvmLight 实现
  • Word域操作记录(从1开始的毕业论文格式排版)
  • 神经网络的基本概念与深度解析——基于生物机制的仿生建模与工程实现