【Oracle数据库】详解使用PLSQL备份还原数据(各种踩坑记录)

本文建议概览,选择对应章节进行观看,不需要重头看到尾,避免踩坑只有下面几个注意点:

  • 一定要安装Oracle客户端,和服务端版本一致,最好先找个工具连到服务器查询版本,本文使用的是dbeaver

  • 安装的PLSQL版本、位数最好和安装的Oracle客户端保持一致,否则还原数据和备份数据可能会出现各种问题

  • 需要对数据重新导入的时候,一定要删除触发器和序列等信息,不能只删表(针对本文的11g版本来说,如果更新的版本可能已经支持自增了,不需要额外配置这些东西,按照自己数据库实际版本,结合本文和网络搜索结果一起解决问题)

一、准备工作

  • 数据库管理工具:Dbeaver或者Navicat都可以;当然也可以只用PLSQL,看个人习惯,但是还原数据必须要用PLSQL

  • 注意:确保PLSQL的版本和服务端的Oracle版本一致,不能高出太多,保险起见保持一致,否则后面会有很多坑!!!!

二、使用Dbeaver连接Oracle数据库(所有数据库都可以按照这个方式来弄离线驱动)

这里主要介绍无网环境,需要额外配置驱动,有网的电脑会自动下载所需的驱动,开箱即用

1、下载Dbeaver:DBeaver Community | Free Universal Database Tool;下载社区版的就可以了(建议再准备个能联网的电脑也装dbeaver来下驱动)

2、安装好了以后打开就会看到这个界面,选择要用的数据库,本文就是oracle数据库

image.png

3、这里我用mysql来替代,因为oracle的驱动我本机已经安装了;直接点测试连接,会给你下驱动;这地方可能要特殊方式上网,自己注意下就行

image.png

4、等下载完毕以后点击编辑驱动

image.png

5、点击库设置,然后会看到下图中的信息;右键列表中的每个库,右键信息可以查看到所在的文件位置

image.png

6、可以参考库名称来找文件夹的信息,然后将所有的驱动文件都复制在一个目录里面备用(注:不要图省事把目录一起复制,一定要把每个目录里面文件复制出去)

image.png

7、把复制的驱动文件放在一个目录拿到没网的机器上去以后,还是一样点击编辑驱动(没网机器也会自动下载,但是会卡住,就等着他报错两次以后点确定就行了);
接着也是选择库,然后把所有的东西删除掉;点击添加文件夹,选择你复制过来的驱动目录就以后应用就可以了

image.png

8、直接点击测试连接,没提示缺少驱动什么的报错就说明驱动加载成功了;设置好对应信息然后正常连接就可以了

image.png

Navicat就不讲了,可以自行搜索,Navicat应该是不需要额外弄驱动什么的

三、安装PLSQL和Oracle数据库

注:这一步很重要,请认真观看!!!
注:这一步很重要,请认真观看!!!
注:这一步很重要,请认真观看!!!

通过前面的Dbeaver连接到数据库以后,需要查询一样服务端的版本信息,安装PLSQL和Oracle数据库都需要用到这个;本文中环境是无权接触到数据库服务器环境的,只知道连接方式,所以需要在本地有个Oracle客户端来使用EXP和IMP工具进行导入导出数据的操作

一、安装PLSQL软件

1、使用select * from v$version查询服务器的数据库版本;根据下图查询到我们是11g也就是11.2.0.4.0的版本,包括也写了plsql的版本是11.2.0.4.0

image.png

2、接下来就直接在百度上搜 plsql 11下载就可以了(这一步自己对照着来,不要完全照抄我的环境来,我是因为数据库是11.2.0的版本我才找plsql 11的)

image.png

3、安装好了以后,正常打开是这样的(前提是你安装了Oracle的客户端,如果没有客户端的话,这里一般会报错,提示你OCI什么的,这个放在下一步讲);然后按照提示输入信息就可以了,注意一下,这里数据库填写格式为:IP地址:端口号/数据库;例:192.168.3.1:1521/userdb

image.png

4、如果没有安装Oracle客户端,可能会提示 “OCI.dll” “oci.dll”加载失败;然后就直接到Instant Client for Microsoft Windows (x64) 64-bit | Oracle 中国;来下载轻量客户端就可以了(如果需要导入导出数据,建议还是安装完全版本的客户端)

这里注意一下:版本要和服务器那边数据库版本一致;位数要和你安装的PLSQL位数一致,我这里给的64位版本,自己根据自己的PLSQL位数来选择对应的位数下载(网上也有网友说版本和服务器一致就可以了,位数可以和plsql不一样,保险起见还是统一用一样位数的软件、客户端免得烦)

image.png

5、下载好轻量客户端以后,打开PLSQL依次选择 工具-首选项(不同版本的菜单可能不一样,根据实际版本来,找到首选项就行);分别设置主目录和oci.dll的路径,如下图所示,确定应用以后,重启PLSQL加载即可

image.png

二、安装Oracle数据库

1、前往Oracle的软件存档官网,自己注册个账号以后登录就行,免费的:Search Software (oracle.com)

2、搜索需要下载的软件,本文需要的软件为oracle 11g,直接搜索即可


image.png

3、找到需要的软件包,点击进入即可


image.png

4、和购物车一样会在一个列表中,点击continue就可以了

image.png

5、这里我们只需要windows的client就可以了,选择好以后点击continue继续


image.png

6、同意协议以后,我们会来到这里,直接点击对应的zip文件包即可下载安装文件了

image.png

7、下载解压后,我们需要先修改client\stage\cvu\cvu_prereq.xml这个文件,因为11g比较老了,里面是没有支持window10和更高版本的配置信息的,我们需要修改它让它支持;否则就提示你不能安装

image.png

8、打开以后,我们在下图所示的范围中添加代码,这个里面的Windows名称和位数版本自己根据实际情况进行修改,我这是Windows 11,大家如果是新的WindowsServer,参考文件里面老的winserver命名方式修改即可

         <OPERATING_SYSTEM RELEASE="6.2">
            <VERSION VALUE="3"/>
            <ARCHITECTURE VALUE="64-bit"/>
            <NAME VALUE="Windows 11"/>
            <ENV_VAR_LIST>
                <ENV_VAR NAME="PATH" MAX_LENGTH="1023" />
            </ENV_VAR_LIST>
       </OPERATING_SYSTEM>
image.png

9、右键setup管理员身份运行,根据自己实际需求选择安装类型即可,保险起见可以和我一样,直接选择1.04g那个

image.png

10、这边安装目录自己就随意了,按照个人喜好来,但是要注意,软件位置最好是在oracle基目录里面,不要单独拿到目录外面去,装好了你自己拷贝走什么的没关系,安装的时候遵守这个规定就行了;这个目录自己也要记住下,后面plsql导入导出会用到的

后面的安装步骤就不展示了,正常安装即可,目的只是为了imp和dmp数据导入导出的软件

image.png

这边Oracle客户端的安装也就完毕了

四、使用PLSQL备份数据

1、如下图所示,首先我们使用导出用户对象功能,将结构导出;权限、存储、所有者都不勾选,我看别的文章这里意思是不勾选就默认为当前用户导出,跟着做就行了,也可以自己根据实际情况来;设置好输出文件路径以后等待导出完毕即可;(这里用户记得选下当前用户,也就是你登陆的用户)(注:所有的操作都是不选择某条数据表示为全选,选择了就是导出某条数据,这个注意一下)

image.png

2、接着我们选择导出表,如下图所示,不要勾选直接、授权、兼容这三个选项(兼容勾选好像也没事,不过我是没勾,自己看情况进行选择就行);导出可执行文件里面要选exp.exe;这个文件就是之前安装客户端的时候那个目录里面的client可以找到,如果你是安装完整版客户端,这个地方一般会自动加载出来,如果没有的话自己手动选择下就可以了,导出的是二进制DMP文件(注:所有的操作都是不选择某条数据表示为全选,选择了就是导出某条数据,这个注意一下)

image.png

3、如果一切正常的话就可以导出了,等待导出完毕即可;如果Dos窗口一闪而过,一般就是PLSQL的版本比本地的Oracle客户端版本高很多,降级一下版本就可以了;(由于是CMD调用,数据比较多的时候可能会出现CMD“假死”情况,按照下图设置取消快速编辑模式就可以了

image.png
image.png

4、可能会有人说,dbeaver和navicat这种不可以进行备份导入导出吗;如果是库里面能保证全是文本字段,没有二进制数据,也就是BLOB字段的话,是没问题的,本文环境中由于存在二进制数据,所以使用DMP格式导出,不管有没有二进制数据,都是推荐用exp导出DMP文件,是最保险的办法了,避免踩坑折腾很久。

五、使用PLSQL还原数据

备份好数据以后,接下来就是要进行还原数据的操作了,本文的环境是由老的Oracle数据库向新的Oracle数据库中导入,只不过两者版本还是一样的,这里有几点需要提前说明一下:

  • 确保双方数据库原来的表空间名称是一致的,如果不一致,需要修改表空间名称,或者服务端导入进行表空间模式映射,建议还是表空间名称两边一致最好

  • 导入的顺序为:先导入DMP文件,再导入用户对象的结构SQL文件;如果先导入SQL文件,后导入DMP文件,DMP文件会将SQL导入的触发器等信息覆盖

  • 如果由于特殊原因需要删除库中数据,不仅仅需要删除表数据,还需要删除触发器、索引等信息(注:由于11g没有自增功能,是通过触发器实现的,所以如果是比较新的oracle数据库,可以找找别的教程)

1、打开 工具-导入表,切换到oracle导入,如下图所示;不勾选提交、授权、显示;可执行文件需要选择imp.exe就和备份那块一样路径,换成imp.exe就可以了;最后就是设置导入的DMP文件,执行导入操作即可;两遍表空间名称一样的话,是可以顺利导入的,如果表空间不一样,需要修改表空间名称以后重新导入;本文环境中由于没有超级管理员权限,是让数据库管理员帮忙修改的,就不在这里提供修改方法了,可以自行网络搜索;如果表空间不一致,可能会出现各种错误,都是连带着的,只要解决表空间问题就可以跑顺了。

image.png

2、等待DMP文件导入完毕以后,切换到SQL插入选项卡,准备进行用户对象(SQL文件导入);建议选择SQLPLUS,然后选择client中的sqlplus.exe即可;选择之前导出用户对象生成的sql文件,然后执行导入即可;这一步就是导入触发器、索引信息什么的,中间提示什么表对象存在的不管他就行,因为dmp文件把一些表已经创建了,所以这边会提示表存在。

image.png

六、使用PLSQL重新导入数据的正确操作流程

有的时候会因为各种原因,需要删除数据重新进行完整导入,由于Oracle中触发器的存在,只删除表数据是不行的,还需要删掉触发器等内容,否则会造成表内自增字段的异常,比如索引不会按照原数据插入,而是根据触发器中最后一次数据开始进行递增。

1、简单概括一下需要删除的内容和顺序

  • Tables:表

  • *Triggers:触发器

  • Sequences:序列

  • Views:视图

  • Functions:函数

  • Procedures:存储过程

  • Indexes:索引

  • 注:删除表后,触发器也会自动删除,所以执行每个删除之前刷新一下,防止已经删除进行二次操作

2、在PLSQL主窗口中,找到对象窗口,如下图所示;按照上述顺序,选择对应分类下的内容,全选,右键选择“删除”或者drop(每个版本翻译不一致,根据实际情况选择即可);将上述内容删除完毕后,重新执行导入dmp文件操作即可,此时不会出现库中的索引序列自增异常的问题。


image.png

至此,本文结束,如果有本文中没有提到的问题,可留言补充,希望有人能看到这个文章避免踩重复的坑。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容