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

Oracle无法正常OPEN(三)

在Oracle数据库中,如果几个数据文件丢失,导致数据库无法启动,报错“ORA-01157: cannot identify/lock data file 2 - see DBWR trace file”,如果没有物理备份的情况下,位于丢失数据文件的数据是无法找回的,但是没有丢失的数据文件上的数据还在,所有可以通过重建控制文件,去掉丢失的数据文件,来恢复数据库

创建测试数据

create tablespace tbs1 datafile '/data/oracle/prod/tbs01.dbf' size 10M;
conn acl_test/oracle;
create table t2 (id int,name varchar2(10)) tablespace tbs1;
insert into acl_test.t2 values(1,'aaa');
commit;

模拟数据文件丢失

mv tbs01.dbf  tbs01.dbf_bak

重启数据库

shutdown abort;
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 2 - see DBWR trace file
ORA-01110: data file 2: '/data/oracle/prod/tbs01.dbf'

重建控制文件

#备份出当前控制文件
alter database backup controlfile  to trace as  '/home/oracle/cur.trc';
#根据/home/oracle/cur.ctl编辑重建控制文件语句
[oracle@test ~]$ vi ctl.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
--   GROUP 4 '/data/oracle/prod/std1.log'  SIZE 200M BLOCKSIZE 512,
--   GROUP 5 '/data/oracle/prod/std2.log'  SIZE 200M BLOCKSIZE 512,
--   GROUP 6 '/data/oracle/prod/std3.log'  SIZE 200M BLOCKSIZE 512,
--   GROUP 7 '/data/oracle/prod/std4.log'  SIZE 200M BLOCKSIZE 512
DATAFILE'/data/oracle/prod/system01.dbf','/data/oracle/prod/sysaux01.dbf','/data/oracle/prod/undotbs01.dbf','/data/oracle/prod/test01.dbf','/data/oracle/prod/users01.dbf'
CHARACTER SET AL32UTF8
;

在nomount状态下执行

 startup nomount;@ctl.sqlControl file created.SQL> select open_mode from v$database;OPEN_MODE
--------------------
MOUNTED

恢复数据库

SQL> RECOVER DATABASE;
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 2: '/data/oracle/prod/tbs01.dbf'#查看表空间
SQL> select name from v$tablespace2  ;NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEST
USERS
TBS1
发现tbs1表空间还在,查看数据文件SQL> select file#,name,status from v$datafile;FILE# NAME                                               STATUS
---------- -------------------------------------------------- -------1 /data/oracle/prod/system01.dbf                     SYSTEM2 /u01/app/oracle/product/12.1.0/db_1/dbs/UNNAMED000 RECOVER023 /data/oracle/prod/sysaux01.dbf                     RECOVER4 /data/oracle/prod/undotbs01.dbf                    RECOVER5 /data/oracle/prod/test01.dbf                       RECOVER7 /data/oracle/prod/users01.dbf                      RECOVER6 rows selected
#发现2号数据文件路径异常,尝试将此表空间offline
SQL> alter database datafile 2 offline;Database altered.
#恢复数据库
SQL> recover database;
Media recovery complete.
尝试open数据库
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 12452
Session ID: 9 Serial number: 19207
再次startup数据库
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.
Database opened.

查看测试数据

SQL> select * from acl_test.t2;
select * from acl_test.t2*
ERROR at line 1:
ORA-00376: file 2 cannot be read at this time
ORA-01111: name for data file 2 is unknown - rename to correct file
ORA-01110: data file 2: '/u01/app/oracle/product/12.1.0/db_1/dbs/UNNAMED00002'SQL> select file_name,tablespace_name,status from dba_data_files;FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME                STATUS
------------------------------ ---------
/data/oracle/prod/system01.dbf
SYSTEM                         AVAILABLE/data/oracle/prod/sysaux01.dbf
SYSAUX                         AVAILABLE/data/oracle/prod/test01.dbf
TEST                           AVAILABLEFILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME                STATUS
------------------------------ ---------
/data/oracle/prod/users01.dbf
USERS                          AVAILABLE/u01/app/oracle/product/12.1.0/db_1/dbs/UNNAMED00002
TBS1                           AVAILABLE/data/oracle/prod/undotbs01.dbf
UNDOTBS1                       AVAILABLE

删除丢失的表空间

DROP TABLESPACE tbs1 INCLUDING CONTENTS AND DATAFILES;
http://www.xdnf.cn/news/3678.html

相关文章:

  • ARConv的复现流程
  • btrace2.0使用方法
  • 基于FastApi实现本地部署DeepSeek-R1-Distill-Qwen与流式输出
  • 文章四《深度学习核心概念与框架入门》
  • 读书记:《认知红利》
  • 云盘系统设计
  • Vue3+Element Plus全套学习笔记-目录大纲
  • UE自动索敌插件Target System Component
  • MAAS Anvil - 高可用 MAAS 部署管理工具
  • 纳米AI搜索体验:MCP工具的实际应用测试,撰写报告 / 爬虫小红书效果惊艳
  • Matplotlib核心课程-2
  • JavaWeb学习打卡-Day7-正向代理、反向代理、Nginx
  • 使用AI-01开发板和开源后端服务搭建整套小智服务系统
  • 在运行 Hadoop 作业时,遇到“No such file or directory”,如何在windows里打包在虚拟机里运行
  • 赎金信(简单)
  • 单一职责原则(SRP)
  • 安妮推广导航系统开心版多款主题网址推广赚钱软件推广变现一键统计免授权源码Annie
  • 写了个脚本将pdf转markdown
  • C/C++工程师使用 DeepSeek
  • [面试]SoC验证工程师面试常见问题(三)
  • 2505C++,wmi客户端示例
  • MySQL:联合查询
  • Linux-07-Shell
  • 大模型在终末期肾脏病风险预测与临床方案制定中的应用研究
  • 如何封装一个线程安全、可复用的 HBase 查询模板
  • Encoder-free无编码器多模态大模型EVEv2模型架构、训练方法浅尝
  • Windows 使用set和setx设置环境变量(skywalk3)
  • 2.LED灯的控制和按键检测
  • 【MySQL】事务管理
  • 区块链+IoT:创新场景落地背后的技术攻坚战