本文建议概览,选择对应章节进行观看,不需要重头看到尾,避免踩坑只有下面几个注意点:
一定要安装Oracle客户端,和服务端版本一致,最好先找个工具连到服务器查询版本,本文使用的是dbeaver
安装的PLSQL版本、位数最好和安装的Oracle客户端保持一致,否则还原数据和备份数据可能会出现各种问题
需要对数据重新导入的时候,一定要删除触发器和序列等信息,不能只删表(针对本文的11g版本来说,如果更新的版本可能已经支持自增了,不需要额外配置这些东西,按照自己数据库实际版本,结合本文和网络搜索结果一起解决问题)
一、准备工作
数据库管理工具:Dbeaver或者Navicat都可以;当然也可以只用PLSQL,看个人习惯,但是还原数据必须要用PLSQL
注意:确保PLSQL的版本和服务端的Oracle版本一致,不能高出太多,保险起见保持一致,否则后面会有很多坑!!!!
二、使用Dbeaver连接Oracle数据库(所有数据库都可以按照这个方式来弄离线驱动)
这里主要介绍无网环境,需要额外配置驱动,有网的电脑会自动下载所需的驱动,开箱即用
1、下载Dbeaver:DBeaver Community | Free Universal Database Tool;下载社区版的就可以了(建议再准备个能联网的电脑也装dbeaver来下驱动)
2、安装好了以后打开就会看到这个界面,选择要用的数据库,本文就是oracle数据库
3、这里我用mysql来替代,因为oracle的驱动我本机已经安装了;直接点测试连接,会给你下驱动;这地方可能要特殊方式上网,自己注意下就行
4、等下载完毕以后点击编辑驱动
5、点击库设置,然后会看到下图中的信息;右键列表中的每个库,右键信息可以查看到所在的文件位置
6、可以参考库名称来找文件夹的信息,然后将所有的驱动文件都复制在一个目录里面备用(注:不要图省事把目录一起复制,一定要把每个目录里面文件复制出去)
7、把复制的驱动文件放在一个目录拿到没网的机器上去以后,还是一样点击编辑驱动(没网机器也会自动下载,但是会卡住,就等着他报错两次以后点确定就行了);
接着也是选择库,然后把所有的东西删除掉;点击添加文件夹,选择你复制过来的驱动目录就以后应用就可以了
8、直接点击测试连接,没提示缺少驱动什么的报错就说明驱动加载成功了;设置好对应信息然后正常连接就可以了
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
2、接下来就直接在百度上搜 plsql 11下载就可以了(这一步自己对照着来,不要完全照抄我的环境来,我是因为数据库是11.2.0的版本我才找plsql 11的)
3、安装好了以后,正常打开是这样的(前提是你安装了Oracle的客户端,如果没有客户端的话,这里一般会报错,提示你OCI什么的,这个放在下一步讲);然后按照提示输入信息就可以了,注意一下,这里数据库填写格式为:IP地址:端口号/数据库;例:192.168.3.1:1521/userdb
4、如果没有安装Oracle客户端,可能会提示 “OCI.dll” “oci.dll”加载失败;然后就直接到Instant Client for Microsoft Windows (x64) 64-bit | Oracle 中国;来下载轻量客户端就可以了(如果需要导入导出数据,建议还是安装完全版本的客户端)
这里注意一下:版本要和服务器那边数据库版本一致;位数要和你安装的PLSQL位数一致,我这里给的64位版本,自己根据自己的PLSQL位数来选择对应的位数下载(网上也有网友说版本和服务器一致就可以了,位数可以和plsql不一样,保险起见还是统一用一样位数的软件、客户端免得烦)
5、下载好轻量客户端以后,打开PLSQL依次选择 工具-首选项(不同版本的菜单可能不一样,根据实际版本来,找到首选项就行);分别设置主目录和oci.dll的路径,如下图所示,确定应用以后,重启PLSQL加载即可
二、安装Oracle数据库
1、前往Oracle的软件存档官网,自己注册个账号以后登录就行,免费的:Search Software (oracle.com)
2、搜索需要下载的软件,本文需要的软件为oracle 11g,直接搜索即可
3、找到需要的软件包,点击进入即可
4、和购物车一样会在一个列表中,点击continue就可以了
5、这里我们只需要windows的client就可以了,选择好以后点击continue继续
6、同意协议以后,我们会来到这里,直接点击对应的zip文件包即可下载安装文件了
7、下载解压后,我们需要先修改client\stage\cvu\cvu_prereq.xml
这个文件,因为11g比较老了,里面是没有支持window10和更高版本的配置信息的,我们需要修改它让它支持;否则就提示你不能安装
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>
9、右键setup管理员身份运行,根据自己实际需求选择安装类型即可,保险起见可以和我一样,直接选择1.04g那个
10、这边安装目录自己就随意了,按照个人喜好来,但是要注意,软件位置最好是在oracle基目录里面,不要单独拿到目录外面去,装好了你自己拷贝走什么的没关系,安装的时候遵守这个规定就行了;这个目录自己也要记住下,后面plsql导入导出会用到的
后面的安装步骤就不展示了,正常安装即可,目的只是为了imp和dmp数据导入导出的软件
这边Oracle客户端的安装也就完毕了
四、使用PLSQL备份数据
1、如下图所示,首先我们使用导出用户对象
功能,将结构导出;权限、存储、所有者都不勾选,我看别的文章这里意思是不勾选就默认为当前用户导出,跟着做就行了,也可以自己根据实际情况来;设置好输出文件路径以后等待导出完毕即可;(这里用户记得选下当前用户,也就是你登陆的用户)(注:所有的操作都是不选择某条数据表示为全选,选择了就是导出某条数据,这个注意一下)
2、接着我们选择导出表,如下图所示,不要勾选直接、授权、兼容这三个选项(兼容勾选好像也没事,不过我是没勾,自己看情况进行选择就行);导出可执行文件
里面要选exp.exe
;这个文件就是之前安装客户端的时候那个目录里面的client可以找到,如果你是安装完整版客户端,这个地方一般会自动加载出来,如果没有的话自己手动选择下就可以了,导出的是二进制DMP文件(注:所有的操作都是不选择某条数据表示为全选,选择了就是导出某条数据,这个注意一下)
3、如果一切正常的话就可以导出了,等待导出完毕即可;如果Dos窗口一闪而过,一般就是PLSQL的版本比本地的Oracle客户端版本高很多,降级一下版本就可以了;(由于是CMD调用,数据比较多的时候可能会出现CMD“假死”情况,按照下图设置取消快速编辑模式就可以了)
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文件,执行导入操作即可;两遍表空间名称一样的话,是可以顺利导入的,如果表空间不一样,需要修改表空间名称以后重新导入;本文环境中由于没有超级管理员权限,是让数据库管理员帮忙修改的,就不在这里提供修改方法了,可以自行网络搜索;如果表空间不一致,可能会出现各种错误,都是连带着的,只要解决表空间问题就可以跑顺了。
2、等待DMP文件导入完毕以后,切换到SQL插入选项卡,准备进行用户对象(SQL文件导入);建议选择SQLPLUS,然后选择client中的sqlplus.exe即可;选择之前导出用户对象生成的sql文件,然后执行导入即可;这一步就是导入触发器、索引信息什么的,中间提示什么表对象存在的不管他就行,因为dmp文件把一些表已经创建了,所以这边会提示表存在。
六、使用PLSQL重新导入数据的正确操作流程
有的时候会因为各种原因,需要删除数据重新进行完整导入,由于Oracle中触发器的存在,只删除表数据是不行的,还需要删掉触发器等内容,否则会造成表内自增字段的异常,比如索引不会按照原数据插入,而是根据触发器中最后一次数据开始进行递增。
1、简单概括一下需要删除的内容和顺序
Tables:表
*Triggers:触发器
Sequences:序列
Views:视图
Functions:函数
Procedures:存储过程
Indexes:索引
注:删除表后,触发器也会自动删除,所以执行每个删除之前刷新一下,防止已经删除进行二次操作
2、在PLSQL主窗口中,找到对象窗口,如下图所示;按照上述顺序,选择对应分类下的内容,全选,右键选择“删除”或者drop(每个版本翻译不一致,根据实际情况选择即可);将上述内容删除完毕后,重新执行导入dmp文件操作即可,此时不会出现库中的索引序列自增异常的问题。
至此,本文结束,如果有本文中没有提到的问题,可留言补充,希望有人能看到这个文章避免踩重复的坑。