假设数据文件顺序被打乱,你有办法找回正确的文件把数据库打开吗
一种非常应用很广泛的架构:HACMP+RAC+RAW。这种架构采用裸设备作为数据文件。今天演示一种恢复场景:数据库异常宕机,数据文件顺序错乱,数据库无法启动。 下面通过实验逐步演示,如果把数据文件的正确顺序找出来: SQL select * from v$version;BANNER----
一种非常应用很广泛的架构:HACMP+RAC+RAW。这种架构采用裸设备作为数据文件。今天演示一种恢复场景:数据库异常宕机,数据文件顺序错乱,数据库无法启动。
下面通过实验逐步演示,如果把数据文件的正确顺序找出来:
SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0 - Production CORE 11.2.0.4.0 Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production
展示表空间、数据文件的简要情况
SQL> select ts#,name from v$tablespace;
TS# NAME
---------- --------------------
0 SYSTEM
1 SYSAUX
2 UNDOTBS1
3 TEMP
4 USERS
SQL> select file#,name from v$datafile;
FILE# NAME
---------- ---------------------------------------------------------------------
1 /u01/app/oracle/oradata/primary/system01.dbf
2 /u01/app/oracle/oradata/primary/sysaux01.dbf
3 /u01/app/oracle/oradata/primary/undotbs01.dbf
4 /u01/app/oracle/oradata/primary/users01.dbf
“断电”式快速强制停库
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2257352 bytes
Variable Size 700452408 bytes
Database Buffers 79691776 bytes
Redo Buffers 2596864 bytes
Database mounted.
搞破坏,将system01.dbf和sysaux01.dbf两个数据文件相互替换名字
mv /u01/app/oracle/oradata/primary/system01.dbf /u01/app/oracle/oradata/primary/a
mv /u01/app/oracle/oradata/primary/sysaux01.dbf /u01/app/oracle/oradata/primary/system01.dbf
mv /u01/app/oracle/oradata/primary/a /u01/app/oracle/oradata/primary/sysaux01.dbf
尝试启库,但会报错
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/u01/app/oracle/oradata/primary/system01.dbf'
ORA-01210: data file header is media corrupt
细心的朋友可能会顺便查询一下视图v$datafile_header
v$datafile是从控制文件里读取信息,而v$datafile_header是从数据文件头部读取信息。
其实到这里,已经能从FILE#,ERROR,RFILE#的值就可以看出,system01.dbf与sysaux01.dbf到换了,可以改名直接将数据库打开。我们不妨通过其他方法去修复破坏
以下已经提示system01.dbf数据文件头部损坏,我们dump部分数据文件瞧瞧:
DUMP数据文件头部
SQL> alter system dump datafile '/u01/app/oracle/oradata/primary/system01.dbf' block 2;
System altered.
SQL> alter system dump datafile '/u01/app/oracle/oradata/primary/sysaux01.dbf' block 2;
System altered.
以上可以看出,system01.dbf的头部记录着自身其实是2号数据文件
从以上可以看出,sysaux01.dbf头部记录着自身其实是1号数据文件
至此,可以判断,system01.dbf其实是SYSAUX表空间的数据文件,sysaux01.dbf其实是SYSTEM的数据文件,对照v$datafile视图的输出将数据文件重命名:
重命名数据文件,修复破坏
mv /u01/app/oracle/oradata/primary/system01.dbf /u01/app/oracle/oradata/primary/b
mv /u01/app/oracle/oradata/primary/sysaux01.dbf /u01/app/oracle/oradata/primary/system01.dbf
mv /u01/app/oracle/oradata/primary/b /u01/app/oracle/oradata/primary/sysaux01.dbf
再次尝试打开数据库:
SQL> alter database open;
Database altered.
SQL> select * from dual;
DUM
---
X
经过以上实验的演示将数据文件重新对应,最终得以顺利打开数据库。
启示:
数据文件头部记录都记录着DBID,DB_NAME,File Number,Blsize等信息,同时数据块也通过rdba标识着该数据块的物理位置(数据文件+数据块),因此可以通过这些信息与控制文件的信息做对照。
-------------------------------------------------------------------------------------------------
本文来自于我的技术博客 http://blog.csdn.net/robo23
转载请标注源文链接,否则追究法律责任!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

지난주 내부 사퇴와 외부 비판의 물결 속에서 OpenAI는 대내외적 난관에 봉착했다. - 미망인 여동생의 침해로 글로벌 열띤 논의가 촉발됐다. - '대군주 조항'에 서명한 직원들이 잇달아 폭로됐다. - 네티즌들은 울트라맨의 '' 일곱 가지 대죄" ” 소문 파기: Vox가 입수한 유출된 정보와 문서에 따르면 Altman을 포함한 OpenAI의 고위 경영진은 이러한 지분 회수 조항을 잘 알고 있었고 이에 서명했습니다. 또한 OpenAI가 직면한 심각하고 시급한 문제인 AI 보안이 있습니다. 최근 가장 눈에 띄는 직원 2명을 포함해 보안 관련 직원 5명이 퇴사하고, '슈퍼얼라인먼트' 팀이 해체되면서 OpenAI의 보안 문제가 다시 한 번 주목을 받고 있다. 포춘지는 OpenA가

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

70B 모델에서는 1000개의 토큰을 몇 초 만에 생성할 수 있으며 이는 거의 4000자로 변환됩니다! 연구진은 Llama3를 미세 조정하고 가속 알고리즘을 도입하여 기본 버전과 비교하여 속도가 13배 빨라졌습니다. 속도가 빠를 뿐만 아니라 코드 재작성 작업 성능도 GPT-4o를 능가합니다. 이 성과는 인기 있는 AI 프로그래밍 아티팩트인 Cursor를 개발한 팀과 OpenAI도 투자에 참여한 anysphere에서 이루어졌습니다. 빠른 추론 가속 프레임워크로 잘 알려진 Groq에서는 70BLlama3의 추론 속도가 초당 300개 토큰이 조금 넘는다는 사실을 아셔야 합니다. Cursor의 속도 덕분에 거의 즉각적인 완전한 코드 파일 편집이 가능하다고 할 수 있습니다. 어떤 사람들은 좋은 사람이라고 커스를 넣으면

가상시장의 확대는 가상화폐 유통과 불가분의 관계이며, 당연히 가상화폐 이체 문제와도 불가분의 관계에 있습니다. 일반적인 전송 오류는 주소 복사 오류이고, 또 다른 오류는 체인 선택 오류입니다. 가상 화폐를 잘못된 체인으로 이체하는 것은 여전히 까다로운 문제이지만, 이체 작업 경험이 부족하여 초보자가 잘못된 체인을 이체하는 경우가 많습니다. 잘못된 링크는 제3자 플랫폼을 통해 검색할 수 있지만 성공하지 못할 수도 있습니다. 다음으로, 가상자산을 더 잘 관리할 수 있도록 에디터가 자세히 알려드립니다. 잘못된 가상 화폐 체인을 검색하는 방법은 무엇입니까? 잘못된 체인으로 전송된 가상 화폐를 검색하는 과정은 복잡하고 어려울 수 있지만 전송 세부 정보를 확인하고 거래소 또는 지갑 제공업체에 문의하고 개인 키를 호환되는 지갑으로 가져오고 크로스 체인 브리지 도구를 사용하여

26일 뉴스에 따르면 2024년 상하이 세계이동통신회의(MWC 상하이) 개막식에서 양지에 차이나모바일 회장이 연설을 했다. 그는 현재 인류사회는 정보가 지배하고 정보와 에너지가 깊이 융합되는 4차 산업혁명, 즉 '디지털·지능 혁명'에 진입하고 있으며, 새로운 생산력의 형성이 가속화되고 있다고 말했다. Yang Jie는 증기기관이 주도하는 '기계화 혁명'부터 전기와 내연기관이 주도하는 '전기화 혁명', 컴퓨터와 인터넷이 주도하는 '정보 혁명'에 이르기까지 모든 산업 혁명이 다음을 기반으로 한다고 믿습니다. "정보"와 "에너지"가 주력으로 생산성 향상을 가져옵니다

Golang의 데이터베이스 콜백 기능을 사용하면 다음을 달성할 수 있습니다. 지정된 데이터베이스 작업이 완료된 후 사용자 정의 코드를 실행합니다. 추가 코드를 작성하지 않고도 별도의 함수를 통해 사용자 정의 동작을 추가할 수 있습니다. 삽입, 업데이트, 삭제, 쿼리 작업에 콜백 함수를 사용할 수 있습니다. 콜백 함수를 사용하려면 sql.Exec, sql.QueryRow, sql.Query 함수를 사용해야 합니다.
