一、正式数据库(数据导出)
1、登录正式数据库所在主机,导出脚本
#!/bin/bash
#描述:导出数据库系统配置类的表
source ~/.bash_profile
bak_data=`date +%Y%m%d`
cd /data/db_bak/xxxxxx
echo "`date +%Y-%m-%d\ %H:%M:%S`-------------系统参数表备份-----开始--------------------"
exp user/password tables=\(audit_data%\) file=audit_data_${bak_data}.dmp log=audit_data_${bak_data}.log
exp user/password tables=app_log file=app_log_${bak_data}.dmp log=app_log_${bak_data}.log
exp user/password tables=\(cfg_%\) file=cfg_${bak_data}.dmp log=cfg_${bak_data}.log
exp user/password tables=def_permission file=def_permission_${bak_data}.dmp log=def_permission_${bak_data}.log
exp user/password tables=diff_reason_desc file=diff_reason_desc_${bak_data}.dmp log=diff_reason_desc_${bak_data}.log
exp user/password tables=\(msg_%\) file=msg_${bak_data}.dmp log=msg_${bak_data}.log
exp user/password tables=\(news_%\) file=news_${bak_data}.dmp log=news_${bak_data}.log
exp user/password tables=\(order_%\) file=order_${bak_data}.dmp log=order_${bak_data}.log
exp user/password tables=\(report_%\) file=report_${bak_data}.dmp log=report_${bak_data}.log
exp user/password tables=res_resource file=res_resource_${bak_data}.dmp log=res_resource_${bak_data}.log
exp user/password tables=\(sms_%\) file=sms_${bak_data}.dmp log=sms_${bak_data}.log
exp user/password tables=\(ums_%\) file=ums_${bak_data}.dmp log=ums_${bak_data}.log
exp user/password tables=\(matrix_%\) file=matrix_${bak_data}.dmp log=matrix_${bak_data}.log
exp user/password tables=\(import_%\) file=import_${bak_data}.dmp log=import_${bak_data}.log
exp user/password tables=\(question_%\) file=question_${bak_data}.dmp log=question_${bak_data}.log
echo "`date +%Y-%m-%d\ %H:%M:%S`-------------系统参数表备份-----结束--------------------"
2、导出文件传到测试库所在服务器
#!/bin/bash
#把正式库oracle备份文件 远程拷贝到测试库所在主机
day=`date -d "-2 day" +%Y%m%d`
/usr/bin/expect <<-EOF
set timeout 3000
spawn scp -r /data/db_bak testuser@xx.xx.xx.xx:/mnt/sd05/user_test
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "password"}
}
expect eof
EOF
echo "脚本执行完毕"
注:文件较大,做定时任务晚上传输,第二天来了直接导入数据
二、测试数据库
1、测试库导入数据
数据传输完毕后,登录测试库所在主机,导入之前需要关闭数据库
[oracle@xxxxxx ~]$ sqlplus test_user/pass as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu Oct 22 10:04:08 2020
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
ORA-01116: error in opening database file 8
ORA-01110: data file 8: '/data/app/oracle/oradata/dwca/JT_AUDIT_TEST.DBF'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
关闭报错,到数据文件相应路径查询发现JT_AUDIT_TEST.DBF 没有了,gg…
[oracle@xxxxxx ~]$ cd /data/app/oracle/oradata/dwca/
[oracle@xxxxxx dwca]$ ll
total 2881115056
-rw-r----- 1 oracle oinstall 524296192 Oct 22 08:31 AUDIT_TABLESPACE.DFB
-rw-r----- 1 oracle oinstall 85508096 Oct 22 10:06 control01.ctl
-rw-r----- 1 oracle oinstall 10737426432 Oct 22 08:31 dwca_TABLESPACE.DFB
-rw-r----- 1 oracle oinstall 1240441036800 Oct 22 10:04 JT_AUDIT_TABLESPACE.DBF
-rw-r----- 1 oracle oinstall 52429312 Oct 22 08:26 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Oct 21 22:00 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Oct 22 10:05 redo03.log
-rw-r----- 1 oracle oinstall 1184899072 Oct 22 10:04 sysaux01.dbf
-rw-r----- 1 oracle oinstall 1080041472 Oct 22 10:04 system01.dbf
-rw-r----- 1 oracle oinstall 1038098432 Oct 16 2019 system01.dbf.bak
-rw-r----- 1 oracle oinstall 6322921472 Oct 21 22:00 temp01.dbf
-rw-r----- 1 oracle oinstall 1649267449856 Oct 22 08:31 TEST_SPACE.DBF
-rw-r----- 1 oracle oinstall 21474844672 Jul 29 22:00 test_temp.dbf
-rw-r----- 1 oracle oinstall 3156221952 Oct 22 10:04 undotbs01.dbf
-rw-r----- 1 oracle oinstall 15724716032 Oct 22 08:31 users01.dbf
2、异常处理
表空间对应数据文件没有了,就只能数据文件offline,才能将数据库正常打开或者关闭
首先以dbs用户登录,然后将对应数据文件offline
SQL> startup mount; --打开控制文件
--启动数据库时,nomount状态读取参数文件,mount状态读取控制文件,在mount状态下可以删除数据文件。
SQL> alter database datafile '/data/app/oracle/oradata/dwca/JT_AUDIT_TEST.DBF' offline drop;
Database altered. ----注销被误删的表空间文件(验证时提示丢失的文件)
SQL> select FILE_NAME||','||TABLESPACE_NAME from dba_data_files;
FILE_NAME||','||TABLESPACE_NAME
--------------------------------------------------------------------------------
/data/app/oracle/oradata/dwca/users01.dbf,USERS
/data/app/oracle/oradata/dwca/undotbs01.dbf,UNDOTBS1
/data/app/oracle/oradata/dwca/sysaux01.dbf,SYSAUX
/data/app/oracle/oradata/dwca/system01.dbf,SYSTEM
/data/app/oracle/oradata/dwca/AUDIT_TABLESPACE.DFB,AUDIT_TABLESPACE
/data/app/oracle/oradata/dwca/dwca_TABLESPACE.DFB,DWCA_TABLESPACE
/data/app/oracle/oradata/dwca/JT_AUDIT_TABLESPACE.DBF,JT_AUDIT_TABLESPACE
/data/app/oracle/oradata/dwca/JT_AUDIT_TEST.DBF,JT_AUDIT_TEST
/data/app/oracle/oradata/dwca/TEST_SPACE.DBF,TEST_SPACE
/data/app/oracle/oradata/jt_fengk_tablespace.dbf,JT_FENGK_TABLESPACE
10 rows selected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
--此时数据库可以正常关闭
3、数据导入
因为是测试库,数据没有备份,所以只能重新导入测试数据
3.1 创建存放数据路径
mkdir -p /mnt/sd05/zhanglong/…
赋权
[sudo_user@xxxxxx sd05]$ sudo chown -R oracle:oinstall oracle/
[sudo_user@xxxxxx sd05]$ ll
total 0
drwxrwxrwx 2 sudo_user root 49 Jul 16 22:22 imp_data
drwxr-x--- 3 oracle oinstall 20 Oct 22 11:11 oracle
drwxr-x--- 3 sudo_user root 30 Oct 22 04:59 zhanglong
3.2 新建逻辑目录
create directory mydata1022 as '/mnt/sd05/zhanglong/imp_data';
--查看逻辑目录是否创建成功
select * from dba_directories;
3.3 创建表空间
格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小
drop tablespace JT_AUDIT_TEST including datafiles; --含泪把原表空间删掉
create tablespace JT_AUDIT_TEST datafile '/mnt/sd05/oracle/oradata/dwca/JT_AUDIT_TEST.DBF' size 500M;
alter tablespace JT_AUDIT_TEST add datafile '/mnt/sd05/oracle/oradata/dwca/JT_AUDIT_TEST01.DBF' size 30000M autoextend on;
3.4 创建用户并赋权
格式: create user 用户名 identified by 密码 default tablespace 表空间表;
eg:
create user JT_AUDIT_TEST identified by pass default tablespace jt_fengk_tablespace;
#给用户逻辑目录读写权限
grant read,write on directory mydata1022 to JT_AUDIT_TEST;
#给用户表空间权限
grant dba, resource, unlimited tablespace to JT_AUDIT_TEST;
注:因测试库用户之前已存在,只需修改用户密码即可
--dbs身份登录,修改用户名密码
alter user jt_audit_test identified by pass02;
3.5 数据导入
[oracle@xxxxxx zhanglong]$ cat imp_databasee.sh
#!/bin/bash
#测试库导入
--此处密码脱敏
source ~/.bash_profile
bak_data=`date +%Y%m%d`
echo "`date +%Y-%m-%d\ %H:%M:%S`-------------系统参数表备份-----开始--------------------"
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/app_log_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/cfg_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/def_permission_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/diff_reason_desc_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/import_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/matrix_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/msg_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/news_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/order_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/question_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/report_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/res_resource_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/sms_20201021.dmp full=y ignore=n
imp jt_audit_test/pass02 file=/mnt/sd05/zhanglong/imp_data/ums_20201021.dmp full=y ignore=n
echo "`date +%Y-%m-%d\ %H:%M:%S`-------------系统参数表备份-----结束--------------------"