笺注:这是在 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的表结构:
使用当前用户创建表STU_02:
SQL> Create table STU_02(ID int,NAME varchar2(80),ADDRESS clob);
Table created.
SQL>
查看表STU_02的表结构:
#######
往表STU_01一次性插入多条记录:
INSERT into STU_01 values (1,'小明','广州市');
INSERT into STU_01 values (2,'小李','佛山市');
INSERT into STU_01 values (3,'Zhuohua','成都市');
查看表STU_01的当前表数据:
SELECT * FROM STU_01;
#######
往表STU_02一次性插入多条记录:
INSERT into STU_02 values (1,'小明','北京市');
INSERT into STU_02 values (2,'小李','上海市');
INSERT into STU_02 values (3,'Zhuohua','深圳市');
查看表STU_02的当前表数据:
SELECT * FROM STU_02;
#######
#######
备份数据库表结构的脚本:
[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的表是没有数据的:
还原数据库用户happy的表、表数据:
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ imp happy/mima full=Y ignore=Y file=/backup/happy_202010161917.dmp
至此,数据库用户happy的表、表数据还原成功:
##############
假如数据库用户happy的表在还原前已经有数据,还原回来的数据会在后面追加,如下图:
可以先把表都删除掉:
drop table STU_01;
drop table STU_02;
再还原数据库用户happy的表、表数据:
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ imp happy/mima full=Y ignore=Y file=/backup/happy_202010161917.dmp
这样,数据库用户happy的表数据就不会重复:
############
############
使用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 |