返回列表 发帖

Oracle11gR2的备份与还原

笺注:这是在 Navicat连接Oracle11gR2 的基础上进行的。


登录Oracle:
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 12 06:49:09 2019

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

SQL> conn /as sysdba;
Connected.
SQL>


查看当前的用户表空间:
SQL> select TABLESPACE_NAME from Dba_Tablespaces;

TABLESPACE_NAME
------------------------------------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
ZHUOHUA_TS

6 rows selected.

SQL>


切换用户:
SQL> connect happy/mima;
Connected.
SQL>
SQL> show user;
USER is "HAPPY"
SQL>



使用当前用户创建表STU_01:
SQL> Create table STU_01(ID int,NAME varchar2(8),ADDRESS varchar2(9));

Table created.

SQL>


查看表STU_01的表结构:
图片1.png
2022-6-29 22:29




使用当前用户创建表STU_02:
SQL> Create table STU_02(ID int,NAME varchar2(80),ADDRESS clob);

Table created.

SQL>


查看表STU_02的表结构:
图片2.png
2022-6-29 22:29






#######

往表STU_01一次性插入多条记录:
INSERT into STU_01 values (1,'小明','广州市');
INSERT into STU_01 values (2,'小李','佛山市');
INSERT into STU_01 values (3,'Zhuohua','成都市');
图片3.png
2022-6-29 22:30



查看表STU_01的当前表数据:
SELECT * FROM STU_01;
图片4.png
2022-6-29 22:30




#######

往表STU_02一次性插入多条记录:
INSERT into STU_02 values (1,'小明','北京市');
INSERT into STU_02 values (2,'小李','上海市');
INSERT into STU_02 values (3,'Zhuohua','深圳市');
图片5.png
2022-6-29 22:30



查看表STU_02的当前表数据:
SELECT * FROM STU_02;
图片6.png
2022-6-29 22:31













#######
#######

备份数据库表结构的脚本:
[root@oracle ~]# vi backup_tables.sh
#!/bin/bash
rq=`date '+%Y%m%d%H%M'`
su - oracle -c "exp system/oracle file=/backup/all_$rq.dmp log=/backup/tables.log full=y rows=n"

注释:
会备份所有表空间;
也包含了所有用户,以及用户的权限、所拥有的表;
但用户的表是没有数据的;
数据库用户system的密码为oracle



备份数据库用户happy的表、表数据:
[root@oracle ~]# vi backup_happy_data.sh
#!/bin/bash
rq=`date '+%Y%m%d%H%M'`
su - oracle -c "exp happy/mima file=/backup/happy_$rq.dmp log=/backup/happy_data.log grants=y"

注释:
包含了指定用户所拥有的表、及其表中的数据;
用户happy的密码为mima



创建备份文件的存放目录:
[root@oracle ~]# mkdir -p /backup/
[root@oracle ~]# chmod -R 777 /backup/
[root@oracle ~]#


运行脚本备份数据库表结构:
[root@oracle ~]# bash backup_tables.sh


运行脚本备份数据库用户happy的表、表数据:
[root@oracle ~]# bash backup_happy_data.sh



备份完成:
[root@oracle ~]# find /backup/ -type f
/backup/happy_202010161917.dmp
/backup/tables.log
/backup/all_202010161913.dmp
/backup/happy_data.log
[root@oracle ~]#

[root@oracle ~]# du -ah /backup/
16K     /backup/happy_202010161917.dmp
80K     /backup/tables.log
33M     /backup/all_202010161913.dmp
4.0K    /backup/happy_data.log
33M     /backup/
[root@oracle ~]#



查看数据库表结构的备份日志:
[root@oracle ~]# tail /backup/tables.log
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting user history table
. exporting default and system auditing options
. exporting statistics
Export terminated successfully with warnings.
[root@oracle ~]#


查看数据库用户happy的表、表数据的备份日志:
[root@oracle ~]# tail /backup/happy_data.log
. exporting bitmap, functional and extensible indexes
. exporting posttables actions
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting statistics
Export terminated successfully without warnings.
[root@oracle ~]#














##############
##############

笺注:以下是在另外一台新的Oracle服务器上进行还原。

此时,有默认实例(ORCL)、有默认的表空间,没有自定义数据库用户。

SQL> select instance_name from v$instance;

INSTANCE_NAME
--------------------------------
ORCL

SQL>



SQL> select TABLESPACE_NAME from Dba_Tablespaces;

TABLESPACE_NAME
------------------------------------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

SQL>



SQL> connect happy/mima;
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.

SQL>





上传备份文件到新服务器:
[root@oracle ~]# find /backup/ -type f
/backup/happy_202010161917.dmp
/backup/tables.log
/backup/all_202010161913.dmp
/backup/happy_data.log
[root@oracle ~]#


设置目录权限:
[root@oracle ~]# chmod -R 777 /backup/
[root@oracle ~]#


先还原数据库的表结构:
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ imp system/oracle full=Y file=/backup/all_202010161913.dmp

注释:数据库用户system的密码为oracle





数据库的表结构还原后:
SQL> select TABLESPACE_NAME from Dba_Tablespaces;

TABLESPACE_NAME
------------------------------------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
ZHUOHUA_TS

6 rows selected.

SQL>



SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/db/app/oracle/oradata/orcl/system01.dbf
/db/app/oracle/oradata/orcl/sysaux01.dbf
/db/app/oracle/oradata/orcl/undotbs01.dbf
/db/app/oracle/oradata/orcl/users01.dbf
/db/app/oracle/oradata/orcl/zhuohua.dbf

SQL>



切换到数据库用户happy:
SQL> connect happy/mima;
Connected.
SQL>
SQL> show user;
USER is "HAPPY"
SQL>



查看当前用户所拥有的表:
SQL> Select t.table_name from user_tables t;

TABLE_NAME
------------------------------------------------------------
STU_02
STU_01


SQL>



此时,数据库用户happy的表是没有数据的:
图片7.png
2022-6-29 22:36


图片8.png
2022-6-29 22:36




还原数据库用户happy的表、表数据:
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ imp happy/mima full=Y ignore=Y file=/backup/happy_202010161917.dmp


至此,数据库用户happy的表、表数据还原成功:
图片9.png
2022-6-29 22:37


图片10.png
2022-6-29 22:37






##############

假如数据库用户happy的表在还原前已经有数据,还原回来的数据会在后面追加,如下图:
图片11.png
2022-6-29 22:38



可以先把表都删除掉:
drop table STU_01;
drop table STU_02;
图片12.png
2022-6-29 22:38



再还原数据库用户happy的表、表数据:
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ imp happy/mima full=Y ignore=Y file=/backup/happy_202010161917.dmp



这样,数据库用户happy的表数据就不会重复:
图片13.png
2022-6-29 22:38


图片14.png
2022-6-29 22:38






############
############

使用crontab周期性计划任务备份Oracle:

[root@oracle ~]# service crond status
crond (pid  1602) is running...
[root@oracle ~]#

[root@oracle ~]# chkconfig --list crond
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@oracle ~]#


给系统用户root创建两个crontab计划任务:
( 每天的8时20分运行一次脚本/root/backup_tables.sh;每天的8时23分运行一次脚本/root/backup_happy_data.sh;用户登不登录,任务都会执行)
[root@oracle ~]# crontab -e -u root
追加:
20 8 * * * bash /root/backup_tables.sh
23 8 * * * bash /root/backup_happy_data.sh


查看系统用户root的crontab计划任务:
[root@oracle ~]# crontab -l -u root
20 8 * * * bash /root/backup_tables.sh
23 8 * * * bash /root/backup_happy_data.sh
[root@oracle ~]#


自动备份出来的文件:
[root@oracle ~]# du -ah /backup/
80K     /backup/tables.log
4.0K    /backup/happy_data.log
16K     /backup/happy_202010170823.dmp
33M     /backup/all_202010170820.dmp
33M     /backup/
[root@oracle ~]#





相关文章:
本地备份站点目录和数据库+crontab计划任务

CentOS8_在Docker中安装Oracle11gR2
CentOS8_在Docker中安装Oracle19c

返回列表