记录一次Oracle数据库迁移工作

工作内容

  1. 将21地址下的oracle数据中的用户全部迁移到35数据库中。
  2. 保证jbpm和其余业务可以正常使用。

工作中使用到的技能

oracle

  • expdp impdp的使用
  • 用户管理
  • 表空间拓展设置
  • 数据库链接查询与关闭
  • 创建路径并赋予权限

linux

  • 用户切换
  • ftp命令
  • 空间查看命令

java程序配置

  • 数据库文件配置

思路

  1. 根据实际业务程序,整理出需要迁移的数据库用户,并使用expdp命令全部导出(不仅仅是表,包括其他所有object)
expdp test/123456@orcl schemas=test dumpfile=test20181110.dmp directory=dir_dp logfile=test20181110.log
  • 第一个参数为数据库用户名/密码@实例名,需要拥有管理员权限,因需多次使用,最好是利用一个管理员账号,把多个用户导出。
  • schemas 用户名
  • dumpfile 导出文件名
  • direcotry 导出路径,这个路径需要在数据库中进行配置并给导出操作的用户赋予权限
create directory dir_dp as 'D:\oracle\dir_dp'; 
Grant read,write on directory dir_dp to test;
查看目录和操作权限
SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d
 WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;
  • logfile 日志文件
  1. 在35机器上,通过ftp获取21上导出的数据文件
ftp 192.168.1.35
get /oradata/test20181110.dmp
  1. 在35的数据库上进行数据导入,需要注意必须存在相应的test用户才能导入
impdp test/123456@orcl schemas=test dumpfile=test20181110.dmp directory=dir_dp logfile=test20181110.log

导入命令的参数与导出相同,注意应先创建路径。
因为之前的同事做过一次迁移,所以35的数据库中存在数据,因为不确定impdp导入是否为全部覆盖,故先删除对应的用户在重新创建

create user lrt identified by test
grant connect, resource, dba to test
grant read, write on directory dir_dp to test
  1. 完成所有导入后,修改对应程序中的配置文件即可(java程序中多为xml或properties(中文译为属性))

遇到的问题

  1. 导出时报告没有权限错误
    在导出的时候,如果系统oracle用户对创建的dir没有写权限,则会导致dmp文件无法写入,需要手动赋予权限。
  2. ftp获取时提示没有权限
    错误原因是在获取是使用的oracle用户,没有home路径权限,切换为root,或转移到对应的目录即可。
  3. 删除用户时提示用户已连接
    原因很明显,只需要查询出对应的连接关闭掉即可
SELECT s.Sid, s.Serial#,p.spid, s.USERNAME,s.OSUser,s.Program  FROM  V$Process p,V$session s WHERE p.addr=s.paddr(+) and s.username = 'test' ORDER BY s.Sid 
alter system kill session 'spid,serial#'

如果实在无法关闭连接,可以强行重启数据库

sqlplu as / sysdba
SHUTDOWN IMMEDIATE
startup
  1. 11月1日登陆时发现某用户被锁定
    原因暂时没有找到,直接使用Toad工具,进入用户设置,取消锁定选项并重新设置密码即可

暂时先写到这里

你可能感兴趣的:(记录一次Oracle数据库迁移工作)