背景:首先部署Oracle数据库我是 没有部署 的,因为这台服务器 上已经有了,然后我的计划是把旧数据库上的数据迁移到新的上面来,具体操作如下:

导出

(1)以sysdba的角色进入到数据库中:sqlplus / as sysdba;

(2)创建虚拟目录:创建一个目录用来存放导出的文件,命令为create directory DataBackup as '/opt/oracle/DataBackup';

其中DataBackup 为创建的虚拟目录名称 ,'/opt/oracle/DataBackup' 为服务器中该虚拟目录对应的物理目录

(3)查询虚拟目录:创建完目录之后,我们可以在数据库中查询一下,命令为select directory_name from dba_directories;

(4)给用户授予该目录的读写权限:grant read,write on directory DataBackup to 用户;

(5)退出:exit;

(6)使用expdp命令导出用户下的数据:expdp 用户/密码 directory=DataBackup dumpfile=xxxx.dmp logfile=xxxx.log

其中dumpfile为我们需要的数据文件,logfile为日志文件

(7)导出完成之后,我们就可以到物理路径找到刚刚导出的dmp格式的文件,这个后面带入会用到

导入

(1)以sysdba的角色进入到数据库中:sqlplus / as sysdba;

(2)创建虚拟目录:创建一个虚拟目录,用来存放需要导入的文件,也就是上面的dmp文件,我们需要把导出的dmp文件放到我们创建的虚拟目录对应的物理路径下,命令如下:create directory DataImpdp as '/opt/oracle/DataImpdp';

(3)给用户授予该目录的读写权限:grant read,write on directory DataImpdp to 用户

(4)退出:exit

(5)使用impdp把dmp文件的数据导入到相应用户下面:impdp 用户/密码 directory=DataImpdp dumpfile=xxxx.dmp logfile=xxxx.log remap_schema=xxxx1:xxxx2 remap_tablespace=xxxx1:xxxx2;

其中remap_schema为用户变化,例如导出文件中的用户为A,但是导入的用户为B,这个是就需要用到这个remap_schema=B:A,remap_tablespace为表空间变化,具体跟remap_schema一样

说明:表空间和用户名称最好整一样,感觉不一样会有其他坑,没试过。宁外按照上面的操作时,我遇到了一个问题,我在删除旧数据库的用户及表空间时,出现了删除不了的情况,具体如下:

1.我在删除表空间时,前几个还挺正常,但遇到一个删除失败,提示说是有物化视图,需要先删除物化视图,在网上找了很多,找到一个最简单,就是删除该表空间对应的用户,只要删除用户,与该用户相关的所有表,视图等等都会被删除,当然也包含物化视图。

2.你以为这就结束了,我也以为结束了,但是我在删除用户的时,又提示删除失败,提示说无法删除当前连接用户,意思就是有与该用户相关的进程在运行,就很烦,百度找了一个解决办法,说是需要先干掉所有的连接,再删除用户即可,具体如下:

(1)使用该用户进行登录,这里我用的plsql,登录之后查询该用户所有的连接,命令如下:select username,sid,serial# from v$session

(2)干掉查到的连接:alter system kill session'sid,serial#'

连接关闭可能需要时间,我关闭的时候用了一会,等一会之后就可以删除用户,删除表空间了

后面我又看到一篇文章,说重启数据库也可以,没试过,小伙伴们有兴趣也可以试试

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐