Oracle数据库的备份与恢复

本文详细介绍了如何使用RMAN进行Oracle数据库的备份,包括设置备份介质、控制文件备份、归档模式转换、表空间备份以及使用DataPump进行全库和表空间导出/导入。还涵盖了恢复数据库的过程和注意事项。

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

Rman备份数据库:

准备工作:

设置RMAN默认备份介质保存目录

cd /u01/oracle/app/oradata
mkdir beifen

打开rman:
rman target / 

configure channel device type disk format '/u01/oracle/app/oradata/beifen/DB_%U';

 备份控制文件:

 RMAN> configure controlfile autobackup on; 

 设置备份介质保留期为7天

RMAN> configure retention policy to recovery window of 7 days;

一、首先检查Oracle数据库是否处于归档模式:

archive log list;

当前处于非归档模式,需要更改到归档模式下:

1.首先关闭数据库
shutdown immediate;
2.打开mount状态
startup mount;
3.更改数据库为归档模式
alter database archivelog;
4.打开数据库
alter database open;
5.再次检查
archive log list;

已经处于归档模式。

二、新开一个窗口,打开rman

rman target /

执行整体数据库的备份

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

三、如果你只想备份特定的表空间 举例:

先创建一个表空间:

SQL> create tablespace bf_temp tempfile '/u01/oracle/app/oradata/orcl/bf_temp01.dbf'
  2  size 100M;

执行rman 备份操作:

RMAN> backup tablespace bf_temp;

四、将上述备份集保存在自定义目录下

在rman中执行

RMAN> backup database format '/u01/oracle/app/oradata/beifen/%U';

注意:这里,FORMAT 选项指定了备份文件的格式和存储路径。%U 是一个 RMAN 占位符,它代表着备份文件的唯一标识符。当执行备份时,RMAN 将使用 %U 生成唯一的文件名。

在文件夹里查看:

Rman恢复数据库:

一、查询你要恢复的时间的SCN

1.将时间转化成SCN

SQL> select timestamp_to_scn(to_timestamp('2014-11-10 18:19:20.123456789','YYYY-MM-DD HH24:MI:SS.FF')) scn from dual; 

2.连接到rman

rman target /

3.恢复数据库

RMAN> RUN {
  SET UNTIL SCN 576933; -- 恢复到指定的 SCN
  RESTORE DATABASE;
  RECOVER DATABASE;
}

发现报错,原因:数据库处于open 状态

解决方案:

1.关闭数据库
shutdown immediate
2.打开mount状态
startup mount

4.再次打开rman(重新打开)

rman target /

执行上述命令:

RMAN> RUN {
  SET UNTIL SCN 576933; -- 恢复到指定的 SCN
  RESTORE DATABASE;
  RECOVER DATABASE;
}

恢复成功。

二、恢复表空间

方式一(失败案例,可以略过)

1.首先在Oracle中删除刚才创建的bf_temp表空间。

drop tablespace bf_temp including contents and datafiles;

select * from v$tablespace;
做完这些记得
shutdown immediate
startup mount

2.回到rman

rman target /

执行恢复命令:

RMAN> restore tablespace bf_temp;

出现错误,原因:数据库结构是不是存放在控制文件中的,刚才我们是怎么破坏的表空间的?使用了drop tablespace bf_tempincludingcontents and datafiles; 这条语句,它做的动作是删除表空间同时把控制文件中的表空间信息也一并删除,因此后来在使用控制文件恢复表空间时报找不到信息。怎么办,这个不行那就换一种方法。

方式二(*)

如果已经删除bf_temp表空间,重新创建一个:

create tablespace bf_temp datafile '/u01/oracle/app/oradata/orcl/bf_temp01.dbf' size 100M;

查看一下:

select file#,name,status from v$datafile where file#=5;

再次备份:重新进入rman

backup tablespace bf_temp;

进入相应的目录下删除表空间对应的数据文件

rm -rf bf_temp01.dbf

将表空间变为offline状态:

SQL> alter tablespace bf_temp offline;

脱机数据文件:

alter database datafile 5 offline;

此时可以在数据库open状态下恢复bf_temp表空间

在ramn中执行:

restore tablespace bf_temp;

恢复数据文件:

restore datafile 5;
recover datafile 5;

但看到datafile 5还是处于offline状态:

执行修改命令:

alter database datafile 5 online;

解决方法:

ALTER SYSTEM SET "_allow_resetlogs_corruption"=TRUE SCOPE=SPFILE;

SHUTDOWN IMMEDIATE

STARTUP MOUNT;

ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME ADJUST_SCN LEVEL 1';

SHUTDOWN IMMEDIATE

STARTUP MOUNT;

RECOVER UNTIL CANCEL;

alter database datafile 5 online;

查看一下:

SELECT TS#,FILE#,NAME,STATUS,CHECKPOINT_CHANGE# FROM V$DATAFILE;

完成操作。

使用 Data Pump手动备份

一、导出整个数据库

1.在Oracle中创建存储目录:

create directory exp_dir as '/u01/oracle/app/backup';

注意:exp_dir为自己命名的存储名。

2.在本机中创建上述存储目录:

mkdir /u01/oracle/app/backup

3.赋予权限:

chmod 777 /u01/oracle/app/backup

4.如果不在oracle群组的目录下修改路径隶属用户组

chown -R oracle:oinstall /u01/oracle/app/backup

5.在Oracle下为Oracle用户授予访问数据目录的权限,username为你想要导出的那个用户名,这个用户有权限向你创建的目录下读写。

Grant read,write on directory exp_dir to username;

exp_dir为上面创建的存储路径名。

6.为oracle用户授予导入导出操作授权,username为你想要导出的那个用户名,这个用户有权限使用导入导出命令。

grant exp_full_database,imp_full_database to dbuser;

7.导出整个数据库:

expdp username/password@connect_string schemas=username dumpfile=expdp.dmp directory=dir_exp logfile=expdp.log

注意:

  1. expdp: 这是 Oracle 数据泵导出工具的命令。

  2. username/password@connect_string: 这部分指定了连接数据库的用户名、密码和连接字符串。你需要将username替换为实际的数据库用户名,password替换为相应的密码,connect_string` 替换为数据库的连接信息。

  3. DUMPFILE=full_backup.dmp: 这部分指定了导出的 dump 文件的名称。在这个例子中,导出的文件名为full_backup.dmp`。你可以根据需要更改文件名。

  4. DIRECTORY=backup_dir: 这部分指定了导出文件存放的目录。backup_dir是一个预先在数据库中创建并配置的目录对象,用于指定导出文件的存放位置。在执行这个命令之前,你需要确保该目录对象已经存在,并且具有足够的读写权限。

  5. FULL=YES: 这部分表示执行完整数据库导出。FULL=YES 表示导出整个数据库,包括表、视图、存储过程等所有数据库对象。如果只需导出特定的对象或数据,可以根据需求调整参数。

在backup目录下查看

二、导出表空间

expdp username/password DUMPFILE=ts_backup.dmp DIRECTORY=backup_dir TABLESPACES=users;

注意:users为表空间名

impdp恢复数据库

一、导入整个数据库

执行命令

impdp username/password table_exists_action = replace directory=exp_dir dumpfile=expdp.dmp logfile=expdp.log

  1. impdp: 这是 Oracle 数据库中 Data Pump 导入工具的命令。

  2. username/password: 这是数据库用户的用户名和密码。在这里,username 是数据库用户的用户名,而 `password 是该用户的密码。请注意,明文密码的使用是不安全的,实际应用中应该使用更安全的方式来提供密码,比如通过交互式输入或者使用连接字符串。

  3. table_exists_action=replace: 这是导入操作的一个选项,表示如果导入的表已经存在,应该采取的行为。在这里,设置为 replace,意味着如果表已经存在,将被替换。

  4. directory=exp_dir: 这指定了 Data Pump 导入操作中使用的目录。exp_dir 是一个目录对象的名称,它通常与导出操作中使用的目录对象相对应,用于指定导入或导出文件的位置。

  5. dumpfile=expdp.dmp: 这是导入操作的导入文件的文件名。在这里,expdp.dmp 是导出操作生成的文件,其中包含了导出的数据和元数据。

  6. logfile=expdp.log: 这是导入操作的日志文件的文件名。在这里,expdp.log 是用于记录导入操作详细信息的日志文件。

二、导入表空间

同上述一致

impdp username/password DUMPFILE=ts_backup.dmp DIRECTORY=backup_dir TABLESPACES=users;

即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值