UrBackup数据库备份和恢复之Oracle(示例实战)
ztj100 2024-10-28 21:10 38 浏览 0 评论
创建Oracle测试表空间及用户并授权
创建表空间
临时表空间
CREATE TEMPORARY TABLESPACE test_temp
TEMPFILE 'E:\app\Administrator\oradata\orcl\test_temp01.dbf'
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
用户表空
CREATE TABLESPACE test_data
LOGGING
DATAFILE 'E:\app\Administrator\oradata\orcl\TEST_DATA01.DBF'
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
创建用户并制定表空间
CREATE USER test IDENTIFIED BY password
DEFAULT TABLESPACE TEST_DATA
TEMPORARY TABLESPACE TEST_TEMP;
给用户授予权限
GRANT
CREATE SESSION, CREATE ANY TABLE, CREATE ANY VIEW ,CREATE ANY INDEX, CREATE ANY PROCEDURE,
ALTER ANY TABLE, ALTER ANY PROCEDURE,
DROP ANY TABLE, DROP ANY VIEW, DROP ANY INDEX, DROP ANY PROCEDURE,
SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE
TO test;
GRANT dba TO test;
授予用户的角色,根据实际场景进行设置,这里为了便于测试,给予了dba的权限,在生产环境,最好不要给予dba的角色。
用登录的用户创建测试备份的测试表sys_users
-- Create table
create table SYS_USERS
(
username varchar2(20) not null,
password varchar2(20)
);
-- Add comments to the columns
comment on column SYS_USERS.username
is '用户名';
comment on column SYS_USERS.password
is '密码';
-- Create/Recreate primary, unique and foreign key constraints
alter table SYS_USERS
add constraint PK_USERNAME primary key (USERNAME);
添加测试数据
insert into sys_users (username,password) values ('admin','admin');
insert into sys_users (username,password) values ('guest','guest');
insert into sys_users (username,password) values ('zhangsan','zhangsan');
insert into sys_users (username,password) values ('lisi','lisi');
insert into sys_users (username,password) values ('wangwu','wangwu');
commit;
使用export备份
摘要:导出数据库到.dmp文件,然后配置UrBackup备份Oracle的.dmp文件。
这种方法的缺点是UrBackup不能进行有效的增量操作,每次备份都会读取所有数据,而且在备份期间需要创建数据的第二个副本。
由于Oracle在Oracle XE版本中不包含VSS服务,因此必须使用此方法备份Oracle XE。
如何设置
配置UrBackup备份DATA_PUMP_DIR文件夹。请在这里查看如何找到那个文件夹(https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm#i1009520)。
默认为C:\oracle \app\oracle\admin\XE\dpdump。将Oracle export命令放到C:\Program files\UrBackup\prefilebackup.bat:
@echo off
del /Q C:\oraclexe\app\oracle\admin\XE\dpdump\*
C:\oraclexe\app\oracle\product\11.2.0\server\bin\expdp.exe FULL=Y DUMPFILE=exp.dmp USERID=SYSTEM/p@ssw0rd
您可能需要调整expdp.exe和dpdump路径,并将系统用户密码调整为您所配置的密码。
如何恢复
将exp.dmp下载到你的服务器,并将其放入DATA_PUMP_DIR(默认为C:\oracle \app\oracle\admin\XE\dpdump),然后运行:
C:\oraclexe\app\oracle\product\11.2.0\server\bin\impdp.exe FULL=Y DUMPFILE=exp.dmp USERID=SYSTEM/p@ssw0rd REUSE_DATAFILES=Y TABLE_EXISTS_ACTION=REPLACE
示例
测试安装的Oracle版本:oracle11G
安装路径:E:\app
UrBackup安装路径:C:\Program files\
配置默认备份文件夹为:E:\backup
通过Oracle创建directory
一般创建directory都是为了用数据泵导入/导出数据用
通过windows的cmd窗口执行创建directory,并给对应的备份用户授权读写的权限。
sqlplus / as sysdba
create or replace directory dump_backup as 'E:\backup';
create or replace directory dump_restore as 'E:\restore';
grant read,write on directory dump_backup to test;
grant read,write on directory dump_restore to test;
其中dump_backup as 'E:\backup' 用于存放导出的备份文件。
其中dump_restore as 'E:\restore'用于存放导入的还原备份文件。
已创建的directory查看
select * from dba_directories
编写UrBackup对应的备份之前的脚本:C:\Program files\UrBackup\prefilebackup.bat
@echo off
del /Q E:\backup\*
E:\app\Administrator\product\11.2.0\dbhome_1\BIN\expdp.exe FULL=Y DIRECTORY=dump_backup DUMPFILE=exp.dmp USERID=test/password
注意:上面脚本中的DIRECTORY的名称,为您上面创建的directory。
脚本编写完成之后,可以在windows的窗口下执行prefilebackup.bat,看备份是否成功。
然后通过客户端执行备份。
备份完成之后,删除用户test表sys_users中不是admin的用户。
删除不是admin的用户,然后通过恢复功能恢复用户表的数据。
delete from SYS_USERS where username!='admin'
从服务器下载刚才备份的文件exp.dmp,并放到上面用于还原的文件夹E:\restore,在目录下创建还原的脚本restore.bat,放入下面的内容:
@echo off
E:\app\Administrator\product\11.2.0\dbhome_1\BIN\impdp.exe FULL=Y DIRECTORY=dump_restore DUMPFILE=exp.dmp USERID=test/password REUSE_DATAFILES=Y TABLE_EXISTS_ACTION=REPLACE
然后双击执行还原即可。
注意:根据实际业务场景调整对应的脚本中的USERID,备份跟还原两者要一一对应。
导入过程中遇见的错误解决办法:
ORA-39126: 在 KUPW$WORKER.PROCESS_TABLE_EXISTS_ACTION [TABLE:"IX"."AQ$_STREAMS_QUEUE_TABLE_T"] 中 Worker 发生意外致命错误
ORA-24019: QUEUE_TABLE 的标识符过长, 不可大于 24 个字符
ORA-00955: 名称已由现有对象使用
ORA-06512: 在 "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: 在 "SYS.KUPW$WORKER", line 8165
----- PL/SQL Call Stack -----
object line object
handle number name
000007FFB9D75938 18990 package body SYS.KUPW$WORKER
000007FFB9D75938 8192 package body SYS.KUPW$WORKER
000007FFB9D75938 14941 package body SYS.KUPW$WORKER
000007FFB9D75938 15739 package body SYS.KUPW$WORKER
000007FFB9D75938 15377 package body SYS.KUPW$WORKER
000007FFB9D75938 3945 package body SYS.KUPW$WORKER
000007FFB9D75938 8875 package body SYS.KUPW$WORKER
000007FFB9D75938 1649 package body SYS.KUPW$WORKER
000007FFC9473D80 2 anonymous block
作业 "SYSTEM"."SYS_IMPORT_FULL_01" 因致命错误于 10:58:04 停止
解决办法,cmd运行下面的命令:
sqlplus / as sysdba
Begin
dbms_aqadm.drop_queue_table ('IX.STREAMS_QUEUE_TABLE',TRUE);
End;
/
其中IX.STREAMS_QUEUE_TABLE根据报错内容,进行组合设置。
返回成功之后登录,查询test用户下sys_users表内的数据:
使用Windows备份API (VSS)进行备份
这种方法使用事务日志正确地备份原始数据文件,并且在恢复期间正确地应用事务日志。如果您有变更块跟踪驱动程序,则在备份时只读取数据文件的变更部分,否则将全量读取数据文件。在两种情况下,只有差异部分被传输。此方法不能与Oracle XE一起工作,因为在这个版本(OraVSSW)中缺少必需的Oracle服务。
如何设置
将你的Oracle实例设置为ARCHIVELOG模式,如果它还没有设置:
sqlplus / as sysdba
shutdown immediate
startup mount
alter database archivelog;
alter database open;
查看Oracle 实例对应的Vss Writer 服务是否启动,没有启动,则需要手动启动,并设置为了,开机自启动。
在Windows服务器上安装带有托盘图标的客户端。右键点击托盘图标,选择“配置组件备份”:
在组件选择屏幕上选择“Oracle VSS Writer - Oracle安装的实例名”备份实例中的所有Oracle数据库,或备份单个数据库。如果选择“Oracle VSS Writer - Oracl安装的e实例名”,新的数据库将自动备份:
单击ok后,您的Oracle数据库将备份到UrBackup服务器。
执行一次备份之后,查看用户表sys_users 的数据
删除不是admin的用户,然后通过恢复功能恢复用户表的数据。
delete from SYS_USERS where username!='admin'
如何恢复
右键点击托盘图标,选择“恢复组件”:
Oracle数据库没有完全实现Windows backup API。为了恢复工作,您必须在恢复之前手动关闭Oracle数据库(并保持Oracle VSS writer服务运行),但它将在恢复后自动启动。如果不这样做,Oracle组件将不会报告任何恢复错误,除非通过Windows事件日志。
恢复过程
恢复之后,登录如果出现以下错误
ORA-01033: ORACLE initialization or shutdown in progress
进程 ID: 0
会话 ID: 0 序列号: 0
按下面的顺序进行进行修复即可。
修复数据库
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
如果提示然指定日志,如果没有忽略此步骤,通过下面命令,获取当前修复数据库的redo日志
SELECT MEMBER FROM V$LOG G, V$LOGFILE F WHERE G.GROUP# = F.GROUP# AND G.STATUS = 'CURRENT';
打开数据库
alter database open resetlogs;
所有命令执行如下:
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00283: recovery session canceled due to errors
ORA-19909: datafile 2 belongs to an orphan incarnation
ORA-01110: data file 2: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF'
SQL> alter database open resetlogs;
数据库已更改。
带指定修复日志的命令:
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效
SQL> SELECT MEMBER FROM V$LOG G, V$LOGFILE F WHERE G.GROUP# = F.GROUP# AND G.STA
TUS = 'CURRENT';
MEMBER
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1825716 (在 03/03/2021 15:10:46 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2021_03_03\O1_MF_1_2_J3
YFMRPS_.ARC
ORA-00280: 更改 1825716 (用于线程 1) 在序列 #2 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
ORA-00310: archived log contains sequence 3; sequence 2 required
ORA-00334: archived log: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG'
ORA-10879: error signaled in parallel recovery slave
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01195: online backup of file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
SQL> alter database open resetlogs;
数据库已更改。
然后登录查看用户表Sys_users 恢复的信息,是否是预期的内容。
针对360 杀毒软件的安全设置
如果您的操作系统安装了360 杀毒软件,则需要关闭,自我保护。否则,组件列表界面将不会出现SqlServerWriter组件。
点击关闭之后的效果界面
相关推荐
- sharding-jdbc实现`分库分表`与`读写分离`
-
一、前言本文将基于以下环境整合...
- 三分钟了解mysql中主键、外键、非空、唯一、默认约束是什么
-
在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。...
- MySQL8行级锁_mysql如何加行级锁
-
MySQL8行级锁版本:8.0.34基本概念...
- mysql使用小技巧_mysql使用入门
-
1、MySQL中有许多很实用的函数,好好利用它们可以省去很多时间:group_concat()将取到的值用逗号连接,可以这么用:selectgroup_concat(distinctid)fr...
- MySQL/MariaDB中如何支持全部的Unicode?
-
永远不要在MySQL中使用utf8,并且始终使用utf8mb4。utf8mb4介绍MySQL/MariaDB中,utf8字符集并不是对Unicode的真正实现,即不是真正的UTF-8编码,因...
- 聊聊 MySQL Server 可执行注释,你懂了吗?
-
前言MySQLServer当前支持如下3种注释风格:...
- MySQL系列-源码编译安装(v5.7.34)
-
一、系统环境要求...
- MySQL的锁就锁住我啦!与腾讯大佬的技术交谈,是我小看它了
-
对酒当歌,人生几何!朝朝暮暮,唯有己脱。苦苦寻觅找工作之间,殊不知今日之事乃我心之痛,难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日,可惜在下京东上的小金库都要见低啦。每每想到不由心中一...
- MySQL字符问题_mysql中字符串的位置
-
中文写入乱码问题:我输入的中文编码是urf8的,建的库是urf8的,但是插入mysql总是乱码,一堆"???????????????????????"我用的是ibatis,终于找到原因了,我是这么解决...
- 深圳尚学堂:mysql基本sql语句大全(三)
-
数据开发-经典1.按姓氏笔画排序:Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as//从少...
- MySQL进行行级锁的?一会next-key锁,一会间隙锁,一会记录锁?
-
大家好,是不是很多人都对MySQL加行级锁的规则搞的迷迷糊糊,一会是next-key锁,一会是间隙锁,一会又是记录锁。坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如何用命令分析加...
- 一文讲清怎么利用Python Django实现Excel数据表的导入导出功能
-
摘要:Python作为一门简单易学且功能强大的编程语言,广受程序员、数据分析师和AI工程师的青睐。本文系统讲解了如何使用Python的Django框架结合openpyxl库实现Excel...
- 用DataX实现两个MySQL实例间的数据同步
-
DataXDataX使用Java实现。如果可以实现数据库实例之间准实时的...
- MySQL数据库知识_mysql数据库基础知识
-
MySQL是一种关系型数据库管理系统;那废话不多说,直接上自己以前学习整理文档:查看数据库命令:(1).查看存储过程状态:showprocedurestatus;(2).显示系统变量:show...
- 如何为MySQL中的JSON字段设置索引
-
背景MySQL在2015年中发布的5.7.8版本中首次引入了JSON数据类型。自此,它成了一种逃离严格列定义的方式,可以存储各种形状和大小的JSON文档,例如审计日志、配置信息、第三方数据包、用户自定...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
【VueTorrent】一款吊炸天的qBittorrent主题,人人都可用
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)