# oracle数据库备份还原

  1. 在源服务器和新服务器分别查看目录和表空间

    #登录到oracle账户
    su - oracle
    #不登录方式进入sqlplus环境
    sqlplus /nolog
    #以sysdba身份登录
    conn / as sysdba
    #查看xdump目录所有位置(备份文件目录)
    select * from dba_directories t where t.directory_name='XDUMP';
    #查看用户的表空间
    select distinct tablespace_name from dba_segments t where t.owner='大写用户名';
    
  2. 备份数据

    #登录到oracle账户
    su - oracle
    #导出数据(\'/ as sysdba\')
    expdp <username>/<password>@<sid> directory=xdump dumpfile=<backup_file_data>.dump logfile=<backup_file_data>.log schemas=<username>
    #或者
    expdp \'/ as sysdba\' directory=xdump dumpfile=<backup_file_data>.dump logfile=<backup_file_data>.log schemas=<username>
    
  3. 传输备份文件到目的服务器

    #scp传输
    scp <xdump目录>/<backup_file_data>.dump root@ip:<xdump目录>/
    #输入密码
    #CTRL+Z 挂起传输进程
    #查看后台作业
    jobs
    #把对应的作业放到后台运行
    bg %任务号
    #把作业与当前账号断开关联,以免当前用户退出导致传输中断
    disown %作业号
    
  4. 在新服务器还原

    #更改文件用户或权限都可
    chown oracle:oinstall <xdump目录>/<backup_file_data>.dump
    #登录到oracle账户
    su - oracle
    #不登录方式进入sqlplus环境
    sqlplus /nolog
    #以sysdba身份登录
    conn / as sysdba
    #创建表空间
    create tablespace <ts_name_new> datafile '<dbf数据文件目录>/<ts_name_data>.dbf' size 1024M autoextend on next 100M maxsize unlimited;
    #创建账号
    create user <username_new> identified by <password> default tablespace <ts_name>;
    #授权
    grant dba to <username_new>;
    #退出sqlplus环境
    exit;
    #导入数据
    impdp <username>/<password> directory=xdump dumpfile=<backup_file_data>.dump logfile=<backup_file_data>.log remap_tablespace=<ts_name>:<ts_name_new> remap_schema=<username>:<username_new> table_exists_action=replace
    #完成
    

#查看data文件存放路径

select name from v$datafile;