LAB001 -Oracle数据库手工冷备份(非归档模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/stevensxiao/article/details/89104365

确认数据库处于非归档模式

[oracle@oracle-12201-vagrant ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Mon Apr 8 19:38:23 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /opt/oracle/product/12.2.0.1/dbhome_1/dbs/arch
Oldest online log sequence     1
Current log sequence           3

确定需要备份的文件

执行以下的脚本:

set pagesize 0
select name from v$datafile
union
select name from v$controlfile
union
select name from v$tempfile
union
select member from v$logfile;

输出为:

/opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/temp01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
/opt/oracle/oradata/ORCLCDB/control01.ctl
/opt/oracle/oradata/ORCLCDB/control02.ctl
/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/temp012019-04-07_16-00-25-755-PM.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf
/opt/oracle/oradata/ORCLCDB/redo01.log
/opt/oracle/oradata/ORCLCDB/redo02.log
/opt/oracle/oradata/ORCLCDB/redo03.log
/opt/oracle/oradata/ORCLCDB/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/system01.dbf
/opt/oracle/oradata/ORCLCDB/temp01.dbf
/opt/oracle/oradata/ORCLCDB/undotbs01.dbf
/opt/oracle/oradata/ORCLCDB/users01.dbf

19 rows selected.

创建表以验证恢复

SQL> show user
USER is "SYS"
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> create table cdb_table(a int);

Table created.

SQL> alter session set container=orclpdb1;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
ORCLPDB1

SQL> create table pdb_table(a int);

Table created.

关闭数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

创建备份目录

[root@oracle-12201-vagrant ~]# mkdir -p /u01/backup
[root@oracle-12201-vagrant ~]# chown oracle:oinstall /u01/backup

备份数据库

注意需要备份的数据库包括ORCLCDB,ORCLPDB和pdbseed。如果利用cp实现拷贝,切记不要输出到同一目录,以免相互覆盖,这也是我们为何采用tar来备份的原因。

[oracle@oracle-12201-vagrant ~]$ cd /u01/backup
[oracle@oracle-12201-vagrant backup]$ cat backupdb.sh
cd /u01/backup
tar -C /opt/oracle/oradata -zcvf ORCLCDB.tar.gz ORCLCDB
[oracle@oracle-12201-vagrant backup]$ time ./backupdb.sh
ORCLCDB/
ORCLCDB/ORCLPDB1/
ORCLCDB/ORCLPDB1/undotbs01.dbf
ORCLCDB/ORCLPDB1/system01.dbf
ORCLCDB/ORCLPDB1/sysaux01.dbf
ORCLCDB/ORCLPDB1/temp01.dbf
ORCLCDB/ORCLPDB1/users01.dbf
ORCLCDB/pdbseed/
ORCLCDB/pdbseed/sysaux01.dbf
ORCLCDB/pdbseed/system01.dbf
ORCLCDB/pdbseed/undotbs01.dbf
ORCLCDB/pdbseed/temp012019-04-07_16-00-25-755-PM.dbf
ORCLCDB/system01.dbf
ORCLCDB/sysaux01.dbf
ORCLCDB/undotbs01.dbf
ORCLCDB/users01.dbf
ORCLCDB/control01.ctl
ORCLCDB/control02.ctl
ORCLCDB/redo01.log
ORCLCDB/redo02.log
ORCLCDB/redo03.log
ORCLCDB/temp01.dbf

real    3m26.867s
user    2m56.764s
sys     0m26.795s
[oracle@oracle-12201-vagrant backup]$ ll
total 666056
-rwxr-xr-x. 1 oracle oinstall        71 Apr  8 20:07 backupdb.sh
-rw-r--r--. 1 oracle oinstall 682033828 Apr  8 20:37 ORCLCDB.tar.gz

启动数据库,并插入数据

SQL> startup
ORACLE instance started.

Total System Global Area 1207959552 bytes
Fixed Size                  8792152 bytes
Variable Size             436209576 bytes
Database Buffers          754974720 bytes
Redo Buffers                7983104 bytes
Database mounted.
Database opened.
SQL> insert into cdb_table values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=orclpdb1;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
ORCLPDB1
SQL> insert into pdb_table values(1);

1 row created.

SQL> commit;

Commit complete.

关闭数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

恢复数据库

删除所有数据

[oracle@oracle-12201-vagrant ~]$ cd $ORACLE_BASE/oradata
[oracle@oracle-12201-vagrant oradata]$ ls
ORCLCDB
[oracle@oracle-12201-vagrant oradata]$ du -sh .
3.3G    .
[oracle@oracle-12201-vagrant oradata]$ rm -fr ORCLCDB
[oracle@oracle-12201-vagrant oradata]$ du -sh .
0       .

恢复数据:

[oracle@oracle-12201-vagrant ~]$ cd /u01/backup
[oracle@oracle-12201-vagrant backup]$ ll
total 666056
-rwxr-xr-x. 1 oracle oinstall        71 Apr  8 20:07 backupdb.sh
-rw-r--r--. 1 oracle oinstall 682033828 Apr  8 20:37 ORCLCDB.tar.gz
[oracle@oracle-12201-vagrant backup]$ time tar -C $ORACLE_BASE/oradata -zxvf ORCLCDB.tar.gz
ORCLCDB/
ORCLCDB/ORCLPDB1/
ORCLCDB/ORCLPDB1/undotbs01.dbf
ORCLCDB/ORCLPDB1/system01.dbf
ORCLCDB/ORCLPDB1/sysaux01.dbf
ORCLCDB/ORCLPDB1/temp01.dbf
ORCLCDB/ORCLPDB1/users01.dbf
ORCLCDB/pdbseed/
ORCLCDB/pdbseed/sysaux01.dbf
ORCLCDB/pdbseed/system01.dbf
ORCLCDB/pdbseed/undotbs01.dbf
ORCLCDB/pdbseed/temp012019-04-07_16-00-25-755-PM.dbf
ORCLCDB/system01.dbf
ORCLCDB/sysaux01.dbf
ORCLCDB/undotbs01.dbf
ORCLCDB/users01.dbf
ORCLCDB/control01.ctl
ORCLCDB/control02.ctl
ORCLCDB/redo01.log
ORCLCDB/redo02.log
ORCLCDB/redo03.log
ORCLCDB/temp01.dbf

real    1m50.982s
user    0m43.111s
sys     0m15.127s

[oracle@oracle-12201-vagrant backup]$ ls -l /$ORACLE_BASE/oradata
total 4
drwxr-x---. 4 oracle oinstall 4096 Apr  7 15:59 ORCLCDB
[oracle@oracle-12201-vagrant backup]$ du -sh $ORACLE_BASE/oradata
3.5G    /opt/oracle/oradata

启动数据库

SQL> startup
ORACLE instance started.

Total System Global Area 1207959552 bytes
Fixed Size                  8792152 bytes
Variable Size             436209576 bytes
Database Buffers          754974720 bytes
Redo Buffers                7983104 bytes
Database mounted.
Database opened.

验证数据库恢复

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> select * from cdb_table;

no rows selected

SQL> alter session set container=orclpdb1;

Session altered.

SQL> select * from pdb_table;

no rows selected

恢复成功了,因为表存在,并且在备份后插入的数据不存在。

补充

事实上,在任何情况下,Redo Log都是无需备份的。我们这个实验备份了Redo Log,这是为了恢复更顺畅。
如果没有备份Redo Log,在恢复时,在数据库处于mount状态下,需要执行以下命令:

SQL> alter database open resetlogs;

如果报错,则执行以下命令:

SQL> recover database until cancel;
SQL> alter database open resetlogs;

猜你喜欢

转载自blog.csdn.net/stevensxiao/article/details/89104365