笔记来源

今天的任务是:将线上老的数据库里的数据同步到本地现有的二期数据库中来,即二期项目需要线上数据进行最后测试,于是就有了今天这篇,线上生产数据库更新到本地数据库的笔记。

由于数据量较大,我尝试过将线上的表导出成一个个Excel或者insert语句来完成更新,但是老数据里存着clob结构的html标签,着实难办,于是在老前辈的提醒下建议我使用exp或expdp的方式进行导出。



前言、

步骤总览
本文的操作环境是在Windows下进行,Linux下也有相同之处,把路径换成对应的即可。

如图:
在这里插入图片描述

一、线上导出(Windows)

1.新建对应空白文件夹(Linux换一个路径格式)

在这里插入图片描述

2.CMD窗口运行导出命令

伪代码:exp 用户名/密码@数据库名 file=导出的文件存储路径

用户名和密码就是你想要导出的那个数据库的,数据库名我这里是ORCL

示例代码:exp user/pwd@ORCL file=E:\db\0713dump\test.dmp

执行完会在文件夹中显示test.dmp,

再将dmp文件拷到本地有oracle的那台机器上。


二、线下导入(Windows)

1.使用oracle自带的SQL plus进入管理员账号

这一步是在本地新建用户和表空间,所以需要管理员账号
在这里插入图片描述

2.创建新用户和表空间

新建用户

伪代码:create user 用户名 identified by 密码;

示例代码:create user TEMPJOB identified by xxx;

新建表空间–>Oracle数据库表空间多少合适?

这取决于数据库的大小和使用情况。一般来说,建议将表空间大小设置为数据库大小的1/4到1/2。

伪代码:create tablespace 表空间名 datafile ‘C:\表空间名.dbf’ size 1024M autoextend on;

示例代码:create tablespace HK_TEMPJOB datafile ‘C:\HK_TEMPJOB.dbf’ size 1024M autoextend on;

执行时可能会卡一下,是在分配空间,请耐心等待

为新建的用户授权

伪代码:grant connect, resource,IMP_FULL_DATABASE to 用户名;

示例代码:grant connect, resource,IMP_FULL_DATABASE to TEMPJOB;

指定用户该表空间不受限

伪代码:alter user 用户名 quota unlimited on 表空间;

示例代码:alter user TEMPJOB quota unlimited on HK_TEMPJOB;

如图:
在这里插入图片描述

3.cmd输入导入命令

打开cmd

导出命令:
imp TEMPJOB/xxx@ORCL full=y file= C:\0714import\test.dmp ignore=y

这里你可能会遇到有一些用户或角色xxx不存在,无视即可,如果你还需要这些用户或角色,就记录下来再去创建-赋权
在这里插入图片描述

静待完成,导入成功会显示成功终止导入,我这里报错是因为有一些定时任务和之前冲突了
这是导入成功的意思
在这里插入图片描述

你可以利用SQL工具去连接这个用户名进行查看导入的数据库了。
在这里插入图片描述

如果导入期间有报错,你根据报错代码进行关键字搜索即能完成90%的问题解决。


三、线下导入(Linux)

1.使用root账号对后续操作赋权

su root //进入root账户

这里需要进行两步操作:
a、先对需要导入的test.dmp文件进行赋权,我的test.dmp文件放在了这里边

chmod 777 /opt/0818imp/test.dmp

b、对创建表空间所需的文件夹进行赋权,表空间我放在了 /opt/orcl 目录下

chown -R oracle:oinstall /opt/orcl

2.使用oracle账户连接SQLplus

su oracle

连接SQLplus

sqlplus / as sysdba

这里先使用一条查询语句看看有没有连接到oracle:

select 1 from dual;

如果能查询出来,就可以继续下一步
如果提示:在这里插入图片描述
需要输入

conn /as sysdba

3.使用SQLplus新建表用户和表空间

新建表用户

伪代码:create user 用户名 identified by 密码;

示例代码:create user TEMPJOB identified by xxx;

新建表空间–>Oracle数据库表空间多少合适?

这取决于数据库的大小和使用情况。一般来说,建议将表空间大小设置为数据库大小的1/4到1/2。

伪代码:create tablespace 表空间名 datafile ‘C:\表空间名.dbf’ size 1024M autoextend on;

示例代码:create tablespace HK_TEMPJOB datafile ‘/opt/orcl/xxx.dbf’ size 1024M autoextend on;

在这里插入图片描述

执行时可能会卡一下,是在分配空间,请耐心等待

为新建的用户授权

伪代码:grant connect, resource,IMP_FULL_DATABASE to 用户名;

示例代码:grant connect, resource,IMP_FULL_DATABASE to xxx;

在这里插入图片描述

指定用户该表空间不受限

伪代码:alter user 用户名 quota unlimited on 表空间;

示例代码:alter user xxx quota unlimited on xxx;

在这里插入图片描述

4.在控制台输入导入命令

退出oracle

exit

输入导入命令

导入命令:先前创建的表用户和密码
imp 账号/密码@ORCL full=y file= /opt/0818imp/test.dmp ignore=y

在这里插入图片描述

静待完成,导入成功会显示成功终止导入,我这里报错是因为有一些定时任务和之前冲突了
这是导入成功的意思
在这里插入图片描述

你可以利用SQL工具去连接这个用户名进行查看导入的数据库了。
在这里插入图片描述

如果导入期间有报错,你根据报错代码进行关键字搜索即能完成90%的问题解决。


四、线下同步

到这里,其实已经实现了从线上到线下的数据导入导出,如果还想进一步,将本地的这个刚导入的数据库里其中一些表数据同步到另外一个库中,

可以参考这篇博文,使用DBlink的方式进行同步(后边的定时任务步骤可以省略):

链接: 【笔记】Oracle不同数据库之间的表级别同步


五、参考链接

Oracle导出dmp文件(数据库备份、数据库导出、数据库转移)

oracle创建用户并授权

还有另外一种expdp的方式导入导出,这里没有试过

expdp/impdp 数据泵导入导出

Linux导入相关(0818新增)

Linux 导入Oracle数据库(.dmp文件)

Linux系统下关于Oracle数据库dmp文件的导入和导出(备份)

oracle: linux下 oracle怎么导入dmp文件

Oracle SP2-0640

ORA-01119、ORA-27040的两种可能存在的错误


Logo

更多推荐