通过手工管理数据库备份的方式通常是在对数据库进行文件方面的操作,这个过程需要管理员全面参与并且手工完成。与使用RMAN不同的是手工管理不再完全依赖系统定义的参数进行配置。


手工冷备步骤

在完全关闭数据库的情况下,我们可以通过拷贝数据库的数据文件,控制文件和重做日志文件来完整的备份数据库。

首先查看文件位置:

1
2
3
SQL> select file_name from dba_data_files;
SQL> select name from v$controlfile;
SQL> select group#,member,status from v$logfile;

安全关闭数据库:

1
SQL> shutdown immediate;

然后依次创建datafile,controlfile, redofile三个备份目录,将对应文件一次拷贝到这三个目录即可。

对数据库恢复也只需要将备份的数据拷贝到原来的位置,然后启动数据库即可。


手工热备步骤

在使用联机热备功能的时候需要将数据置于归档模式.

1
2
3
4
5
6
7
8
SQL> archive log list;
Database log mode        Archive Mode
Automatic archival        Enabled
Archive destination           USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     27
Next log sequence to archive   29
Current log sequence         29
SQL>

显示处于开启状态。查看进程状态正常:

1
2
3
4
5
[root@temp-test ~]# ps -ef|grep arc
oracle    8724     1  0 Nov06 ?        00:00:02 ora_arc0_orcl
oracle    8726     1  0 Nov06 ?        00:00:04 ora_arc1_orcl
oracle    8728     1  0 Nov06 ?        00:00:02 ora_arc2_orcl
oracle    8730     1  0 Nov06 ?        00:00:02 ora_arc3_orcl

设置归档日志文件的冗余,保证数据安全:

查看归档日志相关参数:

1
SQL> show parameter log_archive_dest;

新建三个目录,分别存放三分相同的归档日志作为冗余备份:

1
2
3
4
5
6
[oracle@temp-test ~]$ mkdir -p /data/app/backup/arc{1..3} 
[oracle@temp-test ~]$ ll /data/app/backup/
total 0
drwxr-xr-x 2 oracle oinstall 6 Nov  7 13:44 arc1
drwxr-xr-x 2 oracle oinstall 6 Nov  7 13:44 arc2
drwxr-xr-x 2 oracle oinstall 6 Nov  7 13:44 arc3

设置3个归档目录:

1
2
3
4
5
6
SQL> alter system set log_archive_dest_1='location=/data/app/backup/arc1 mandatory';
System altered.
SQL> alter system set log_archive_dest_2='location=/data/app/backup/arc2 optional';
System altered.
SQL> alter system set log_archive_dest_3='location=/data/app/backup/arc3';
System altered.

查看设置信息:

1
SQL> show parameter log_archive;

mandatory表示强制日志归档的目录,要求日志数据必须归档成功后才可以切换,optional是可选的归档不成功也可以切换日志,如果optional目录损坏,不影响日志归档。

执行日志切换,归档文件会保存到指定的目录中:

1
2
SQL> alter system switch logfile;
System altered.

生成三份相同的归档文件:

1
2
3
4
5
6
7
8
[oracle@temp-test backup]$ tree /data/app/backup/
/data/app/backup/
├── arc1
│   └── 1_29_959021937.dbf
├── arc2
│   └── 1_29_959021937.dbf
└── arc3
    └── 1_29_959021937.dbf

设置最少必须归档成功的日志数量,必须成功两份:

1
2
SQL> alter system set log_archive_min_succeed_dest=2;
System altered.
1
2
3
4
SQL> show parameter log_archive_min_succeed_Dest;
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_min_succeed_dest     integer 2

由于总共只有三个冗余文件,如果设置的数量大于3会报错。

备份数据,查看表空间对应的数据文件:

1
2
3
4
5
6
7
8
9
10
SQL> col file_name for a47
SQL> col tablespace_name for a10
SQL> select file_id,file_name,tablespace_name from dba_data_files;
   FILE_ID FILE_NAME   TABLESPACE
---------- ----------------------------------------------- ----------
 /data/app/oracle/oradata/orcl/users01.dbf   USERS
 /data/app/oracle/oradata/orcl/undotbs01.dbf   UNDOTBS1
 /data/app/oracle/oradata/orcl/sysaux01.dbf   SYSAUX
 /data/app/oracle/oradata/orcl/system01.dbf   SYSTEM
 /data/app/oracle/oradata/orcl/example01.dbf   EXAMPLE

这里我们备份USER表,ID为4,将表置于备份模式:

1
2
SQL> alter tablespace users begin backup;
Tablespace altered.

查看备份状态,ID为4的user表显示为active:

1
2
3
4
5
6
7
8
SQL> select from v$backup;
     FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
 NOT ACTIVE       0
 NOT ACTIVE       0
 NOT ACTIVE       0
 4 ACTIVE 1529624 07-NOV-17
 NOT ACTIVE       0

然后直接使用系统的cp命令,拷贝对应目录下的数据文件,到备份目录即可。然后结束备份模式:

1
2
3
4
5
6
7
8
9
10
SQL> alter tablespace users end backup;
Tablespace altered.
SQL> select * from v$backup;
     FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
 1 NOT ACTIVE       0
 2 NOT ACTIVE       0
 3 NOT ACTIVE       0
 4 NOT ACTIVE 1529624 07-NOV-17
 5 NOT ACTIVE       0

将当前重做日志信息写入归档日志文件:

1
2
3
4
5
6
7
8
9
10
11
SQL> alter system archive log current;
System altered.
# 一段时间后,检查点恢复一致
SQL> select checkpoint_change#, file# from v$datafile;
CHECKPOINT_CHANGE#FILE#
------------------ ----------
   1530603    1
   1530603    2
   1530603    3
   1530603    4
   1530603    5