Oracle备份库(问题版)

本文介绍了从正式数据库到测试数据库的数据迁移过程。在正式数据库中执行导出操作后,通过定时任务将文件传输到测试服务器。在测试数据库中导入数据时遇到JT_AUDIT_TEST.DBF数据文件丢失的问题,导致关闭数据库报错。解决方法包括数据文件离线、重新创建表空间、逻辑目录、用户及权限,并导入新的测试数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、正式数据库(数据导出)

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`-------------系统参数表备份-----结束--------------------"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值