35、Oracle数据库备份、恢复与数据管理操作指南

Oracle数据库备份、恢复与数据管理操作指南

1. 数据库备份与恢复基础操作

在数据库管理中,备份和恢复是至关重要的操作,它能确保数据的安全性和可用性。以下是一些常见的备份和恢复操作示例。

1.1 TSPITR操作

执行TSPITR(表空间时间点恢复)时,需要执行以下SQL查询来筛选特定表空间和创建时间的数据:

WHERE TABLESPACE_NAME IN ('TEST')
AND CREATION_TIME >
TO_DATE('07-OCT-08:22:35:30','YY-MON-DD:HH24:MI:SS')
ORDER BY TABLESPACE_NAME, CREATION_TIME;

然后使用RMAN执行TSPITR:

RMAN>RECOVER TABLESPACE pdborcl:test UNTIL SCN <XXXX> AUXILIARY 
DESTINATION '/tmp';

注意,需要将 <XXXX> 替换为数据库中有效的SCN(系统更改编号)。

1.2 从目录报告数据库信息

可以使用以下SQL脚本显示注册在目录中的数据库以及它们最后一次完整备份或0级备份的日期:

SELECT a.db_key, a.dbid, a.name db_name,
b.backup_type, b.incremental_level,
b.completion_time, max(b.completion_time) 
over (partition by a.name, a.dbid) max_completion_time
FROM   catalog_bck.rc_database a, catalog_bck.rc_backup_set b
WHERE  b.status = 'A'
AND    b.backup_type = 'D'
AND    b.db_key = a.db_key;
1.3 双工备份

双工备份可以提高备份的可靠性,通过以下RMAN命令进行配置:

RMAN> CONFIGURE DATAFILE BACKUPCOPIES FOR DEVICE TYPE DISK TO 2;
RMAN> CONFIGURE ARCHIVELOG BACKUp COPIES FOR DEVICE TYPE DISK TO 2;
RMAN> BACKUP DATAFILE 1 FORMAT 
  '/DB/u02/backups/bck_orcl_%U','/Data/backup/bck_orcl_%U' PLUS 
  ARCHIVELOG;
2. 数据库恢复检查与顾问使用

在进行数据库操作时,可能会遇到各种问题,需要进行恢复检查和使用恢复顾问来解决。

2.1 检查数据库是否可恢复

使用以下RMAN命令检查数据库是否可恢复:

RMAN> RESTORE DATABASE PREVIEW;
2.2 恢复顾问场景示例

首先,创建一个表空间和用户,并插入一些数据:

CREATE TABLESPACE test3_tbs DATAFILE '/data/pdborcl 
  /test3_01.dbf' SIZE 100m;
CREATE USER test3 IDENTIFIED BY test3 DEFAULT TABLESPACE 
  test3_tbs QUOTA UNLIMITED ON test3_tbs;
GRANT CONNECT, RESOURCE to test3;
CREATE TABLE test3.EMPLOYEE  
( EMP_ID   NUMBER(10) NOT NULL,
  EMP_NAME VARCHAR2(30),
  EMP_SSN  VARCHAR2(9),
  EMP_DOB  DATE
);
INSERT INTO test.employee VALUES (101,'Francisco 
  Munoz',123456789,'30-JUN-73');
INSERT INTO test.employee VALUES (102,'Gonzalo 
  Munoz',234567890,'02-OCT-96');
INSERT INTO test.employee VALUES (103,'Evelyn 
  Aghemio',659812831,'02-OCT-79');

然后模拟文件损坏:

$ Cd /data/pdborcl
$ echo > test3_01_dbf.dbf
$ ls -lrt

最后使用恢复顾问进行检查和修复:

RMAN> VALIDATE DATABASE;
RMAN> LIST FAILURE;
RMAN> ADVISE FAILURE;
RMAN> REPAIR FAILURE PREVIEW;
RMAN> REPAIR FAILURE;
3. Data Pump操作

Data Pump是Oracle数据库中用于数据导入和导出的强大工具,以下是一些常见的Data Pump操作。

3.1 准备Data Pump环境
$ sqlplus / as sysdba
SQL> ALTER SESSION SET CONTAINER=pdborcl;
SQL> CREATE USER fcomunoz IDENTIFIED BY alvarez DEFAULT TABLESPACE 
  users QUOTA UNLIMITED ON users;
SQL> GRANT CREATE SESSION, RESOURCE, DATAPUMP_EXP_FULL_DATABASE, 
  DATAPUMP_IMP_FULL_DATABASE TO fcomunoz;
SQL> CREATE DIRECTORY datapump AS '/data/pdborcl/backups;
SQL> GRANT READ, WRITE ON DIRECTORY datapump to fcomunoz;
3.2 数据掩码操作

创建一个表并插入数据,然后创建一个包来实现数据掩码:

CREATE TABLE fcomunoz.EMPLOYEE  
( EMP_ID   NUMBER(10) NOT NULL,
  EMP_NAME VARCHAR2(30),
  EMP_SSN  VARCHAR2(9),
  EMP_DOB  DATE
)
/
INSERT INTO fcomunoz.employee VALUES (101,'Francisco 
  Munoz',123456789,'30-JUN-73');
INSERT INTO fcomunoz.employee VALUES (102,'Gonzalo 
  Munoz',234567890,'02-OCT-96');
INSERT INTO fcomunoz.employee VALUES (103,'Evelyn 
  Aghemio',659812831,'02-OCT-79');
CREATE OR REPLACE PACKAGE fcomunoz.pkg_masking 
 as 
 FUNCTION mask_ssn (p_in VARCHAR2) RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY fcomunoz.pkg_masking 
  AS 
    FUNCTION mask_ssn (p_in varchar2) 
    RETURN VARCHAR2
    IS 
    BEGIN 
      RETURN LPAD (
      ROUND(DBMS_RANDOM.VALUE (001000000,999999999)),9,0);
    END;
  END;
/

使用 expdp impdp 进行数据导出和导入,并应用数据掩码:

$expdp fcomunoz/alvarez@pdborcl tables=fcomunoz.employee 
  dumpfile=mask_ssn.dmp directory=datapump remap_data=fcomunoz.employee.
emp_ssn:pkg_masking.mask_ssn
$ impdp fcomunoz/alvarez@pdborcl table_exists_action=truncate 
  directory=datapump dumpfile=mask_ssn.dmp
3.3 元数据仓库操作

导出和导入元数据:

$ expdp fcomunoz/alvarez@pdborcl content=metadata_only full=y 
  directory=datapump dumpfile=metadata_06192013.dmp
$ impdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile= 
  metadata_06192013.dmp sqlfile=metadata_06192013.sql
$ expdp fcomunoz/alvarez@pdborcl content=metadata_only 
  tables=fcomunoz.employee directory=datapump dumpfile= 
    refresh_of_table_employee_06192013.dmp
$ impdp fcomunoz/alvarez@pdborcl table_exists_action=replace 
  directory=datapump dumpfile= refresh_of_table_name_06192013.dmp
4. 用户克隆与生产环境副本创建

在数据库管理中,有时需要克隆用户或创建生产环境的副本。

4.1 用户克隆
$ expdp fcomunoz/alvarez@pdborcl schemas=fcomunoz 
  content=metadata_only directory=datapump dumpfile= 
    fcomunoz_06192013.dmp
SQL> CREATE USER fcomunoz2 IDENTIFIED BY alvarez DEFAULT TABLESPACE 
  users QUOTA UNLIMITED ON users;
SQL> GRANT connect,resource TO fcomunoz2;
$ impdp fcomunoz/alvarez@pdborcl remap_schema=fcomunoz:fcomunoz2 
  directory=datapump dumpfile= fcomunoz_06192013.dmp
4.2 创建生产环境的较小副本
  • 仅元数据
$ expdp fcomunoz/alvarez@pdborcl content=metadata_
only tables=fcomunoz.employee directory=datapump 
dumpfile=example_206192013.dmp
$ impdp fcomunoz/alvarez@pdborcl content=metadata_
only directory=datapump dumpfile=example_206192013.dmp 
sqlfile=employee_06192013.sql
$ cat /data/pdborcl/backups/employee_06192013.sql
$ impdp fcomunoz/alvarez@pdborcl transform=pctspace:70 
content=metadata_only directory=datapump dumpfile= 
example_206192013.dmp sqlfile=transform_06192013.sql
$ cat /data/pdborcl/backups/transform_06192013.sql
  • 元数据和数据
$ expdp fcomunoz/alvarez@pdborcl sample=70 full=y 
directory=datapump dumpfile=expdp_70_06192013.dmp
$ impdp fcomunoz/alvarez@pdborcl2 transform=pctspace:70 
directory=datapump dumpfile=expdp_70_06192013.dmp
5. 数据库结构调整与时间点闪回

在数据库管理中,可能需要调整数据库结构或进行时间点闪回操作。

5.1 创建不同结构的数据库
$ expdp fcomunoz/alvarez@pdborcl full=y directory=datapump 
dumpfile=expdp_full_06192013.dmp
$ impdp fcomunoz/alvarez@pdborcl directory=datapump dumpfile= expdp_
full_06192013.dmp remap_datafile='/u01/app/oracle/oradata/pdborcl/
datafile_01.dbf':'/u01/app/oracle/oradata/pdborcl2/datafile_01.dbf'
5.2 时间点闪回操作
SQL> conn / as sysdba
SQL> SELECT dbms_flashback.get_system_change_number
  FROM dual;
SQL> SELECT SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number)
  FROM dual;
SQL> exit

使用 expdp 进行时间点闪回导出:

$ expdp fcomunoz/alvarez@pdborcl directory=datapump 
  tables=fcomunoz.employee dumpfile=employee_flashback_06192013.dmp
flashback_time="to_timestamp('19-06-2013 14:30:00', 'dd-mm-yyyy 
  hh24:mi:ss')"
$ expdp fcomunoz/alvarez@pdborcl directory=datapump 
  tables=fcomunoz.employee dumpfile=employee_flashback_06192013.dmp
flashback_scn=123 

注意,需要将 123 替换为数据库中有效的SCN。

6. 数据库备份与恢复场景

以下是一些常见的数据库备份和恢复场景。

6.1 数据库主动复制到不同服务器

当需要将数据库主动复制到不同服务器时,需要按照以下步骤进行操作:
1. 创建一个新的虚拟机,使用Oracle数据库12.1.0.1和Oracle Linux 6.4(不创建数据库),并设置正确的IP和主机名。
2. 按照Oracle Linux安装指南(http://docs.oracle.com/cd/E16655_01/install.121/e17720/toc.htm)准备该机器,创建Oracle用户时使用密码 oracle
3. 克隆新创建的虚拟机,并为其分配新的IP和主机名,作为辅助服务器(目标)。
4. 在步骤1创建的虚拟机中使用DBCA创建一个非CDB数据库 orcl ,作为源数据库。
5. 如果源数据库已打开,必须启用归档;如果未打开,则数据库不需要实例恢复。
6. 在辅助服务器上创建与源数据库相同的目录结构,例如:

mkdir /u01/app/oracle/fast_recovery_area
mkdir /u01/app/oracle/fast_recovery_area/orcl
mkdir /u01/app/oracle/admin/orcl/adump
mkdir /u01/app/oracle/oradata/orcl

然后执行以下步骤进行主动复制:
1. 在辅助服务器(目标)上创建一个新的密码文件:

$ orapwd file=/u01/app/oracle/product/12.1/db_1/dbs/orapworcl 
  password=oracle entries=10
  1. 将辅助数据库信息添加到源数据库的 TNSNAMES.ORA 文件中:
ORCL_DEST = 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP) (HOST=172.28.10.62) (PORT = 
  1521)
    (CONNECT_DATA)
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

注意,需要将示例IP地址替换为实际的辅助服务器IP。
3. 在辅助服务器上创建 LISTENER.ORA 文件:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u01/app/oracle/product/12.1/db_1)
      (SID_NAME = orcl)
    )
  )
LISTENER = 
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP) (HOST = 172.28.10.62) (PORT 
  = 1521))
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC1521))
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle

同样,需要将示例IP地址替换为实际的辅助服务器IP。
4. 将源数据库和辅助数据库信息添加到辅助服务器的 TNSNAMES.ORA 文件中:

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP) (HOST = 172.28.10.62) (PORT = 
  1521))
ORCL = 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP) (HOST = 172.29.62.11) (PORT = 
  1521))
    (CONNECT_DATA = 
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
ORCL_DEST = 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP) (HOST = 172.28.10.62) (PORT = 
  1521))
    (CONNECT_DATA = 
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

记得将示例IP地址替换为实际使用的虚拟机IP。
5. 为辅助数据库创建一个基本的PFILE,可从源数据库的SPFILE创建并复制到辅助数据库。
6. 使用SQL*Plus在辅助数据库中以NOMOUNT模式启动:

SQL> STARTUP NOMOUNT
  1. 启动辅助数据库的监听器:
$ lsnrctl start
  1. 在辅助服务器上启动RMAN会话,连接到源数据库和辅助数据库:
$ rman TARGET sys/oracle@orcl auxiliary sys/oracle@orcl_dest
  1. 运行 DUPLICATE 命令进行数据库复制:
RMAN> DUPLICATE DATABASE TO ORCL
FROM ACTIVE DATABASE 
SPFILE
NOFILENAMECHECK;

默认情况下,RMAN使用拉取方法(使用备份集)。也可以使用压缩备份集进行主动复制,命令如下:

DUPLICATE TARGET DATABASE TO orcl
FROM ACTIVE DATABASE
PASSWORD FILE
USING COMPRESSED BACKUPSET;

如果不希望复制完成后数据库自动打开,可以使用以下命令:

RMAN> DUPLICATE DATABASE TO ORCL
FROM ACTIVE DATABASE 
SPFILE
NOFILENAMECHECK
NOOPEN;
6.2 复制PDB

如果要复制PDB,需要使用DBCA创建一个多租户容器数据库 orcl 和一个PDB pdborcl ,然后按照上述数据库主动复制步骤操作,并将 DUPLICATE 命令替换为:

RMAN> DUPLICATE TARGET DATABASE TO orcl
PLUGGABLE DATABASE pdborcl
FROM ACTIVE DATABASE
PASSWORD FILE
SPFILE
NOFILENAMECHECK;

注意,根数据库和种子数据库会自动包含在复制中,辅助实例必须使用包含 enable_pluggable_database=TRUE 声明的初始化参数文件启动。

6.3 ASM备份和恢复

ASM(自动存储管理)的备份和恢复操作如下:
1. 对 USERS 表空间进行RMAN备份:

RMAN> BACKUP TABLESPACE users;
  1. 在磁盘组 DATA 中创建一个新目录 abc ,并为 USERS 表空间的数据文件创建一个别名:
ASMCMD> mkdir +DATA1/abc
ASMCMD> mkalias TBSJFV.354.323232323   +DATA1/abc/users.f
  1. 备份 DATA 磁盘组的ASM元数据:
ASMCMD> md_backup –g  data1

该命令会在当前目录生成一个名为 ambr_backup_intermediate_file 的恢复脚本,后续恢复操作需要使用该文件。
4. 模拟磁盘组 DATA 故障,先强制卸载磁盘组,然后强制删除:

SQL> ALTER DISKGROUP data1 DISMOUNT FORCE;
SQL> DROP DISKGROUP data1 FORCE INCLUDING CONTENTS;
  1. 编辑 ambr_backup_intermediate_file 文件,删除 au_size 条目,保存后运行 md_restore 命令恢复ASM元数据:
ASMCMD> md_restore –b ambr_backup_intermediate_file –t full 
  –g data
  1. 恢复 USERS 表空间:
RMAN> RESTORE TABLESPACE users;
6.4 恢复SYSTEM表空间

假设已有数据库的当前备份和自上次备份以来的所有归档重做日志文件,恢复 SYSTEM 表空间的步骤如下:
1. 连接到RMAN:

$ rman target / 
  1. 以挂载模式启动数据库并恢复 SYSTEM 表空间:
RMAN> STARTUP MOUNT; 
RMAN> RESTORE TABLESPACE SYSTEM;
  1. 恢复并打开数据库:
RMAN> RECOVER TABLESPACE SYSTEM; 
RMAN> ALTER DATABASE OPEN; 

如果没有当前备份和可用的归档重做日志文件,应执行数据库的时间点恢复,并使用 RESETLOGS 选项打开数据库。

6.5 从FRA恢复丢失的数据文件

假设在FRA(快速恢复区)中有数据文件7的当前映像副本,恢复数据文件7的步骤如下:
1. 创建数据库的副本备份。
2. 将数据文件7离线以模拟丢失:

SQL> ALTER DATABASE DATAFILE 7 OFFLINE;
  1. 切换到FRA中可用的数据文件副本:
$ rman target /
RMAN> SWITCH DATAFILE 7 TO COPY;
RMAN> RECOVER DATAFILE 7;
  1. 将数据文件7上线:
RMAN> ALTER DATABASE DATAFILE 7 ONLINE;

记得将FRA中的数据文件副本切换回磁盘,否则可能会再次出现问题。可以使用以下命令进行切换:

$ rman target /
RMAN> BACKUP AS COPY DATAFILE 7 FORMAT '/Data/data/test3_tbs_01.
dbf';
RMAN> SWITCH DATAFILE 7 TO COPY;
RMAN> RECOVER DATAFILE 7;
RMAN> ALTER DATABASE DATAFILE 7 ONLINE;

通过以上操作,可以有效地进行数据库的备份、恢复和数据管理,确保数据库的安全性和可用性。在实际操作中,需要根据具体情况进行调整和优化。

Oracle数据库备份、恢复与数据管理操作指南(续)

7. 关键概念与参数配置

在深入了解数据库备份和恢复操作后,我们还需要掌握一些关键概念和参数配置,这对于优化数据库性能和确保数据安全至关重要。

7.1 关键概念
概念 描述
ARCHIVELOG模式 数据库的一种运行模式,允许在数据库运行时对重做日志进行归档,支持在线备份和恢复操作。
NOARCHIVELOG模式 不进行重做日志归档,只能进行离线备份,恢复能力有限。
增量备份 只备份自上次备份以来发生变化的数据块,分为差异增量备份和累积增量备份。
恢复窗口 定义了备份保留的时间范围,确保在该时间范围内可以进行恢复操作。
冗余保留策略 通过设置备份的冗余度,确保有足够的备份副本可用。
7.2 参数配置

以下是一些重要的参数配置及其作用:
- ARCHIVELOG模式配置

RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

此配置设置了归档日志的删除策略,确保在所有备用数据库应用后才删除归档日志。
- 自动备份配置

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';

这些命令启用了控制文件的自动备份,并设置了备份文件的格式。
- 备份设备类型配置

RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2;

该配置设置了磁盘设备的并行度,提高备份性能。

8. 性能优化与监控

为了确保数据库备份和恢复操作的高效性,需要进行性能优化和监控。

8.1 性能优化
  • 使用压缩备份
RMAN> CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;

此命令配置了压缩算法,减少备份文件的大小,提高备份和恢复速度。
- 调整并行度

RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman_%U' PARALLELISM 4;

通过增加并行度,可以同时进行多个备份任务,提高备份效率。

8.2 性能监控

可以使用以下字典视图来监控RMAN的I/O性能:

SELECT * FROM V$BACKUP_ASYNC_IO;
SELECT * FROM V$BACKUP_SYNC_IO;

这些视图提供了有关备份I/O操作的详细信息,帮助我们发现性能瓶颈。

9. 常见问题与解决方法

在数据库备份和恢复过程中,可能会遇到一些常见问题,以下是一些解决方法。

9.1 备份失败
  • 问题描述 :备份任务在执行过程中失败。
  • 解决方法
    1. 检查备份设备是否可用,例如磁盘空间是否充足。
    2. 查看RMAN日志文件,查找错误信息,根据错误提示进行修复。
    3. 检查数据库状态,确保数据库正常运行。
9.2 恢复失败
  • 问题描述 :在恢复操作时出现错误,无法完成恢复。
  • 解决方法
    1. 检查备份文件是否完整,是否存在损坏。
    2. 确保归档日志文件可用,并且恢复过程中使用的归档日志序列正确。
    3. 检查恢复命令的参数是否正确,例如SCN号是否有效。
10. 总结

通过本文的介绍,我们详细了解了Oracle数据库的备份、恢复和数据管理操作。从基础的备份和恢复命令,到复杂的数据库复制、PDB复制和ASM备份恢复,以及关键概念、参数配置、性能优化和常见问题解决方法,涵盖了数据库管理的多个方面。

在实际应用中,我们需要根据数据库的特点和业务需求,合理选择备份策略和恢复方法。同时,要定期进行备份测试,确保备份的可用性和恢复的成功率。通过不断优化和监控数据库性能,我们可以确保数据库的安全性和稳定性,为业务的正常运行提供有力支持。

mermaid

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B{选择操作}:::decision
    B -->|备份| C(执行备份操作):::process
    B -->|恢复| D(执行恢复操作):::process
    C --> E{备份是否成功}:::decision
    E -->|是| F(完成备份):::process
    E -->|否| G(排查备份失败原因):::process
    D --> H{恢复是否成功}:::decision
    H -->|是| I(完成恢复):::process
    H -->|否| J(排查恢复失败原因):::process
    G --> B
    J --> B
    F --> K([结束]):::startend
    I --> K

这个流程图展示了数据库备份和恢复操作的基本流程,包括选择操作、执行操作、检查操作结果以及处理失败情况。通过这个流程,我们可以更好地管理数据库的备份和恢复过程,确保数据的安全性和可用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值