暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle只有数据文件如何恢复数据库

nirvana 2024-11-29
206

异机恢复操作

1.手动copy数据文件到新的目录

cp 源库的数据文件到新的目录
[oracle@10gdb 10gdb]$ scp *.dbf 192.168.90.17:/u01/app/oracle/oradata/zen/
oracle@192.168.90.17's password: 
syszen01.dbf                                                          100%  340MB   7.7MB/s   00:44    
system01.dbf                                                          100%  490MB  12.0MB/s   00:41    
temp01.dbf                                                            100%   20MB  10.0MB/s   00:02    
undotbs01.dbf                                                         100%   25MB  12.5MB/s   00:02    
users01.dbf                                                           100% 5128KB   5.0MB/s   00:01    
zentbs01.dbf                                                          100% 5128KB   5.0MB/s   00:01   

2.通过对system数据文件头部信息找到数据库名称及字符集信息

[oracle@10gdb zen]$ dd if=system01.dbf of=zen bs=8192 skip=722 count=1
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 2.9e-05 seconds, 282 MB/s

查看具体信息

[oracle@10gdb zen]$ strings zen
GLOBAL_DB_NAME%10GDB.REGRESS.RDBMS.DEV.US.ORACLE.COM   --dbname为10gdb
Global database name,
DBTIMEZONE
00:00
DB time zone,
EXPORT_VIEWS_VERSION
Export views revision #,
GLOBAL_DB_NAME(SEEDDATA.REGRESS.RDBMS.DEV.US.ORACLE.COM
Global database name,
NLS_RDBMS_VERSION
10.2.0.1.0 RDBMS version for NLS parameters,
NLS_NCHAR_CHARACTERSET AL16UTF16
NCHAR Character set,
NLS_NCHAR_CONV_EXCP
FALSE
NLS conversion exception,
NLS_LENGTH_SEMANTICS
BYTE
NLS length semantics,
NLS_COMP
BINARY
NLS comparison,
NLS_DUAL_CURRENCY
Dual currency symbol,
NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR
Timestamp with timezone format,
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR
Time with timezone format,
NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM
Time stamp format,
NLS_TIME_FORMAT
HH.MI.SSXFF AM
Time format,
NLS_SORT
BINARY
Linguistic definition,
NLS_DATE_LANGUAGE
AMERICAN
Date language,
NLS_DATE_FORMAT DD-MON-RR
Date format,
NLS_CALENDAR GREGORIAN
Calendar system,
NLS_CHARACTERSET       ---字符集ZHS16GBK
ZHS16GBK
Character set,
NLS_NUMERIC_CHARACTERS
Numeric characters,
NLS_ISO_CURRENCY
AMERICA
ISO currency,
NLS_CURRENCY
Local currency,
NLS_TERRITORY
AMERICA Territory,
NLS_LANGUAGE
AMERICAN
Language,
DEFAULT_TBS_TYPE SMALLFILE
Default tablespace type<
DEFAULT_PERMANENT_TABLESPACE
USERS$Name of default permanent tablespace,
DEFAULT_TEMP_TABLESPACE
TEMP$Name of default temporary tablespace,
 DICT.BASE
dictionary base tables version #

3.编写参数文件

手动写一个pfile

vim 1.ora
*.audit_file_dest='/u01/app/oracle/admin/zen/adump'
*.background_dump_dest='/u01/app/oracle/admin/zen/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/oradata/zen/control01.ctl','/u01/app/oracle/oradata/zen/control02.ctl','/u01/app/oracle/oradata/zen/control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/zen/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='10gdb'                ---数据库名称要与system头部信息一致
*.db_unique_name='zen'           ---要恢复的实例名称
*.dispatchers='(PROTOCOL=TCP) (SERVICE=10gdbXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='location=/u01/app/oracle/arch1'
*.open_cursors=300
*.pga_aggregate_target=252706816
*.processes=1500
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=758120448
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/zen/udump'
*._allow_resetlogs_corruption=true          ---由于是不完全恢复因此以下两个参数必须要添加。
*._allow_terminal_recovery_corruption=true

4.通过手写的参数文件启动数据库到nomount

startup nomount pfile='/home/oracle/1.ora'

5.手动创建控制文件

CREATE CONTROLFILE REUSE DATABASE "10GDB" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/zen/redo01.log'  SIZE 50M,
  GROUP 2 '/u01/app/oracle/oradata/zen/redo02.log'  SIZE 50M,
  GROUP 3 '/u01/app/oracle/oradata/zen/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/zen/system01.dbf',
  '/u01/app/oracle/oradata/zen/undotbs01.dbf',
  '/u01/app/oracle/oradata/zen/syszen01.dbf',
  '/u01/app/oracle/oradata/zen/users01.dbf',
  '/u01/app/oracle/oradata/zen/zentbs01.dbf'
CHARACTER SET ZHS16GBK
;

dbname和字符集均由system数据文件查出。

6.将归档迁移到恢复服务器中,存放位置与参数文件一致 从源端scp到目标端

[oracle@10gdb ~]$ cd /u01/app/oracle/arch
[oracle@10gdb arch]$ ll
total 73152
-rw-r----- 1 oracle dba  2104832 Mar  7 15:37 1_10_1130749717.dbf
-rw-r----- 1 oracle dba 48741888 Mar  7 09:28 1_1_1130749717.dbf
-rw-r----- 1 oracle dba     1024 Mar  7 09:28 1_2_1130749717.dbf
-rw-r----- 1 oracle dba     1024 Mar  7 09:28 1_3_1130749717.dbf
-rw-r----- 1 oracle dba     1024 Mar  7 09:28 1_4_1130749717.dbf
-rw-r----- 1 oracle dba    74752 Mar  7 09:30 1_5_1130749717.dbf
-rw-r----- 1 oracle dba 23804416 Mar  7 13:25 1_6_1130749717.dbf
-rw-r----- 1 oracle dba     1024 Mar  7 13:25 1_7_1130749717.dbf
-rw-r----- 1 oracle dba     1024 Mar  7 13:25 1_8_1130749717.dbf
-rw-r----- 1 oracle dba    60928 Mar  7 13:26 1_9_1130749717.dbf
[oracle@10gdb arch]$ scp * 192.168.90.17:/u01/app/oracle/arch1/
oracle@192.168.90.17's password: 
1_10_1130749717.dbf                                                   100% 2056KB   2.0MB/s   00:00    
1_1_1130749717.dbf                                                    100%   46MB   7.8MB/s   00:06    
1_2_1130749717.dbf                                                    100% 1024     1.0KB/s   00:00    
1_3_1130749717.dbf                                                    100% 1024     1.0KB/s   00:00    
1_4_1130749717.dbf                                                    100% 1024     1.0KB/s   00:00    
1_5_1130749717.dbf                                                    100%   73KB  73.0KB/s   00:00    
1_6_1130749717.dbf                                                    100%   23MB   7.6MB/s   00:03    
1_7_1130749717.dbf                                                    100% 1024     1.0KB/s   00:00    
1_8_1130749717.dbf                                                    100% 1024     1.0KB/s   00:00    
1_9_1130749717.dbf                                                    100%   60KB  59.5KB/s   00:00    

在恢复的数据库中注册归档文件:

alter database register physical logfile '/u01/app/oracle/arch1/1_1_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_2_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_3_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_4_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_5_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_6_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_7_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_8_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_9_1130749717.dbf';
alter database register physical logfile '/u01/app/oracle/arch1/1_10_1130749717.dbf';

  1. 恢复数据库

相关的报错信息不用管,因为使用的until cancel,因此会恢复到报错归档的前一个。

SQL> recover database using backup controlfile until cancel
ORA-00279: change 1834585 generated at 03/09/2023 10:14:21 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/arch1/1_12_1130749717.dbf
ORA-00280: change 1834585 for thread 1 is in sequence #12


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log '/u01/app/oracle/arch1/1_12_1130749717.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


ORA-00308: cannot open archived log '/u01/app/oracle/arch1/1_12_1130749717.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

8.查询控制文件记录的scn号与数据文件头部记录scn号是否一致

SQL> select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
  1       1834585
  2       1834585
  3       1834585
  4       1834585
  5       1834585

SQL> select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
  1       1834585
  2       1834585
  3       1834585
  4       1834585
  5       1834585
  1. 使用open resetlogs进行开启数据库
SQL> alter database open resetlogs;

Database altered.

10.后续操作

导出所需要的所有表内容,此数据库只能临时使用,不能用于正式环境。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论