百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

UrBackup数据库备份和恢复之Oracle(示例实战)

lipiwang 2024-11-25 14:52 5 浏览 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组件。

点击关闭之后的效果界面

相关推荐

软件测试|MySQL CROSS JOIN:交叉连接的详细解析

简介在MySQL数据库中,CROSSJOIN是一种用于生成两个或多个表的笛卡尔积的连接方法。CROSSJOIN不需要任何连接条件,它将左表的每一行与右表的每一行进行组合,从而生成一个包含所...

「MySQL笔记」left join-on-and 与 left join-on-where 的区别

1.摘要关于这两种写法的重要知识点摘要如下:left-join时,即使有相同的查询条件,二者的查询结果集也不同,原因是优先级导致的,on的优先级比where高on-and是进行韦恩运算连接...

MySQL中的JOIN——联合查询的基本语法

MySQL中的JOIN指令用来将两个或多个表中的数据进行联合查询,根据连接条件来匹配记录,从而得到需要的结果集。在MySQL中,常见的JOIN类型包括INNERJOIN、LEFTJOIN和RIGH...

MySQL 中的 CROSS JOIN:强大的连接工具

CROSSJOIN在MySQL里是一种挺特别的连接操作,它能弄出连接表的笛卡尔积。这就是说,要是表A有m行,表B有n行,那ACROSSJOINB的结果就会有m*n...

大厂必问:MySQL 三表 JOIN 操作的解析与性能优化,效率又如何?

大厂必问:MySQL三表JOIN操作的解析与性能优化策略,效率又如何?点击关注,开启技术之旅!大家好,这里是互联网技术学堂,无论你是一名程序员、设计师、还是对技术充满好奇心的普通人,都欢迎你加入...

面试题:MySQL 的 JOIN 查询优化(mysql查询优化方法)

MySQL的JOIN查询优化是提升数据库性能的关键环节。以下是综合多个技术文档的核心优化策略,按优先级和实现难度分类:一、索引优化:性能提升的基础为连接字段建立索引确保参与JOIN的列(通常...

Flink中处理维表关联技术实现路径

在Flink中处理维表关联大体氛围TableSQLLookupJoin和DataStream算子函数,主要技术实现路径:I.FlinkSQL/TableAPI中的Lookup...

深入剖析Zookeeper原理(一)整体设计

1.ZK集群架构设计与特性1.ZK集群架构设计:ZK主要分为三种角色:Leader(领导者):一个Zookeeper集群同一时间只会有一个实际工作的Leader,它会发起并维护与各Follwer及...

多种负载均衡算法及其Java代码实现

首先给大家介绍下什么是负载均衡负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英...

一分钟了解SpringCloud中的ribbon到底是什么,原理是啥?

1.概念ribbon是一款客户端负载均衡器,用于微服务之间的负载均衡。首先,什么是客户端负载均衡?如图,ribbon可以通过注册中心获取服务列表,然后自己执行自己的负载均衡策略来决定要访问哪个微服务,...

Step by Step之腾讯云短信-验证码实践

在商城小程序和前端上线用了一阵子之后,用户提出了体验提升的需求,如忘记密码、绑定用户、快捷注册等,作为业界最佳实践的短信验证码登录、重置密码和注册等功能开发也就提上日程了,本文就以重置密码为例,将验证...

10分钟入门响应式:Springboot整合kafka实现reactive

Springboot引入Reactor已经有一段时间了,笔者潜伏在各种技术群里暗中观察发现,好像scala圈子的同仁们,似乎对响应式更热衷一点。也许是因为他们对fp理解的更深吧,所以领悟起来障碍性更少...

使用java随机生成有个性的用户名,LOL地名+水浒传,合计2808个

*随机生成用户名*取水浒传108好汉名字*取LOL地名26个,组合而成*一共可以生成2808个不同特色的用户名如果你在上网的时候,用户名难取的话,这里有很多可选择的用户名,现提供100个...

深入理解Math.random()的概率分布特性

直接上源码/***Returnsa{@codedouble}valuewithapositivesign,*返回一个带符号的double类型的数字,说人话就是返回一个非负...

编程英文 - 创建/生成/构建 (create/generate/build)

在软件开发中,create、generate和build这三个词经常被用到,它们都与"创造"或"产生"某些东西有关,但在具体使用场景和含义上有所不同。基本含义creat...

取消回复欢迎 发表评论: