CLOUD oracle数据库备份恢复测试
强烈建议使用expdp/impdp,因为:
在expdp的时候Oracle不会再依赖和参考NLS_LANG的设置,而是完全按照数据库本身的字符集导出数据,impdp的时候,Oracle会自动判断如果dmp文件中的字符集和目标数据库的字符集不符时会自动对导入数据的字符集做转换。这样可以消除以前由于字符集的问题在导入过程中出现乱码的问题。
1、创建备份目录并授权:
mkdir /u01/app/testbackup chmod 777 /u01/app/testbackup
在SQL中指定备份目录
create or replace directory backup as '/u01/app/testbackup'
查看是否生效:
SELECT * FROM ALL_DIRECTORIES; SELECT * FROM dba_DIRECTORIES;
结果如下:
查看用户及对应的表空间:
select username,default_tablespace,temporary_tablespace from dba_users;
2、备份数据库
以管理中心为例:
expdp directory=backup dumpfile=dcbackup02033.dmp logfile=dclogbackup02033.log schemas=clouddcadmin
Export: Release 11.2.0.3.0 - Production on Wed Feb 3 17:20:38 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Username: sys as sysdba
Password:
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:
/u01/app/testbackup/dcbackup02033.dmp
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at 17:23:36
备份成功后,会在/u01/app/testbackup目录产生对应的备份文件dcbackup02033.dmp dclogbackup02033.log
3、还原测试
方案一:建立同样的用户名和表空间进行恢复
先删除对应的管理中心用户和表空间和数据文件
注意先停止应用服务器的IIS服务和k3cloud相关系统服务
drop user clouddcadmin cascade drop tablespace clouddc_data including contents and datafiles cascade constraints; drop tablespace clouddc_temp including contents and datafiles cascade constraints;
再建立用户和对应的表空间并授权
create temporary tablespace test1_temp tempfile 'test_temp.dbf' size 32m autoextend on next 32m maxsize UNLIMITED extent management local; create tablespace test1_data logging datafile 'test1_data.dbf' size 32m autoextend on next 32m maxsize UNLIMITED extent management local; create user test1 identified by cloud6 default tablespace test1_data temporary tablespace test1_temp; grant connect,resource,dba to test1; grant create session to test1; grant create table to test1;
最后使用impdp导入数据即可:
impdp directory=backup dumpfile=dcbackup02032.dmp logfile=dcbackup02032.log schemas=clouddcadmin
[oracle@redhat64 app]$ impdp directory=backup dumpfile=dcbackup02032.dmp logfile=dcbackup02032.log schemas=clouddcadmin
Import: Release 11.2.0.3.0 - Production on Wed Feb 3 17:31:04 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Username: sys as sysdba
Password:
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYS"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_SCHEMA_01": sys/******** AS SYSDBA directory=backup dumpfile=dcbackup02032.dmp logfile=dcbackup02032.log schemas=clouddcadmin
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"CLOUDDCADMIN" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC
ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_OBJ_IDS" already exists
ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_INTTABLE" already exists
ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_VARCHARTABLE" already exists
ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_NVARCHARTABLE" already exists
ORA-31684: Object type TYPE:"CLOUDDCADMIN"."UDT_SPLIT_TBL" already exists
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
ORA-31684: Object type SEQUENCE:"CLOUDDCADMIN"."Z_BAS_ITEM" already exists
ORA-31684: Object type SEQUENCE:"CLOUDDCADMIN"."Z_BAS_DATACENTER_L" already exists
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYS"."SYS_IMPORT_SCHEMA_01" completed with 1 error(s) at 17:32:53
完成后,再启用IIS和相关服务:
iisreset /start net start K3CloudJobProcess net start K3CloudManager
启动完成后,再打开管理中心登录即可。
方案二:不同用户名,表空间时
1、创建用户test(用IMPDP数据泵导入时系统自动创建用户,密码默认为导入用户密码)
create user test identifiedby passwd default tablespace USERS temporary tablespace TEMP;
注:test 为用户名,passwd 为用户密码,可根据实际情况进行调整;
2、 用户赋权
SQL>grant connect,resource,dba to test;
注:此处为用户赋予连接权限和最大的DBA权限,可根据实际情况进行调整;
3、 恢复数据库(采用impdp数据泵导入)
键入exit命令退出sqlplus,在oracle用户下利用impdp命令恢复数据库:
SQL>exit
impdp 'test/"passwd"' EXCLUDE=STATISTICS DIRECTORY=backup DUMPFILE=K3cloudData20160729.dmp remap_schema=K3CLOUD:test parallel=2 transform=OID:n table_exists_action=replace logfile=impdplog.log
impdp remap_schema=yxcloud:test1 remap_tablespace=CLOUD_D_STANDARD:test1_data directory=BACKUP dumpfile=YXCLOUD20161109_EXPDP.DMP logfile=yxcloud20161109_impdp.log EXCLUDE=STATISTICS
如果不知道原schema用户名,可能引出ORA-01917错误。可以不加remap_schema选项尝试还原,如果失败,在提示中可以看到原schema用户名信息,如下图:
K3CLOUD即是原ORACLE用户名:
------------------------------------------------------
还可能引出ORA-39083错误:
加上remap_tablespace选项即可:
remap_tablespace=K3_D_CLOUD_STANDARD:USERS
因为之前的操作开正常完成,因此可能引出ORA-31684错误:(这个一般没有关系,是表名已经存在了)
要解决可以这么做:
加入一个table_exists_action=replace还原参数,或通过先删除用户,在从新创建一次还原就可以
drop user hr cascade;
--------------------------------------------------------
ora39083,ORA 01435错误,这个错误属于非表数据错误,一般不影响数据:
Processing object type SCHEMA_EXPORT/TABLE/POST_TABLE_ACTION
ORA-39083: Object type POST_TABLE_ACTION failed to create with error:
ORA-01435: user does not exist
Failing sql is:
BEGIN
SYS.DBMS_SNAPSHOT_UTL.SYNC_UP_LOG('YXCLOUD','T_BD_DEPARTMENT');
END;
ORA-39083: Object type POST_TABLE_ACTION failed to create with error:
ORA-01435: user does not exist
Failing sql is:
BEGIN
SYS.DBMS_SNAPSHOT_UTL.SYNC_UP_LOG('YXCLOUD','T_BD_BANK');
END;
注:impdp恢复命令中加入了transform=oid:n参数,如果多次恢复数据库需要使用此参数,则需要重置OID。transform取值oid:n的含义就是对oid信息不进行加载,重新进行生成 。
parallel=30,参数大家跟踪自己服务器的CPU\内存情况设置,我这里128内存,所以改成30个并发。建议调整成10一下即可!即parallel=10
注意有多个表空间需要转换时,则使用多个remap_tablespace=源:目标字段。
statistics=none是为了不导入统计信息
恢复数据库时报错处理方案:
1、报错如下(问题为lttc用户已经存在,可以忽略此报错信息)
ORA-31684: Object type USER:"lttc" already exists
2、报错如下(问题为OID为数据实例唯一id,恢复时请使用参数transform=oid:n重置OID,命令参照A用户导入B用户命令)
ORA-39083: Object type TYPE failed to create with error:
ORA-02304: invalid object identifier literal
Failing sql is:
CREATE TYPE "LTTC"."UDT_OBJ_IDS" OID 'E25DDA5E8A4B49949184EE01BD4F564C' is object( FID varchar2(32767))
3、报错如下(问题为总部已经删除此视图中的表,所以恢复时报错。处理方法请备份前删除此视图或恢复时忽略此报错信息)
ORA-39082: Object type VIEW:"LTTC"."V_BAS_VCHENTRYSELECT" created with compilation warnings
ORA-39082: Object type VIEW:"LTTC"."V_BAS_VCHENTRYSELECT_L" created with compilation warnings
3、报错如下临时视图报错,可以忽略不计。
ORA-39082: Object type VIEW:"LTTC"."V741DB8F62753E3EB1CC025B59C6F9" created
with compilation warnings
ORA-39082: Object type VIEW:"LTTC"."VC87B4CFC1E329C091F685162688CF" created
以上转:
http://club.kisdee.com/forum.php?mod=viewthread&tid=566903
4、ORA-39126错误:
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
ORA-39126: Worker unexpected fatal error in KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS]
ORA-06502: PL/SQL: numeric or value error
LPX-00225: end-element tag "HIST_GRAM_LIST_ITEM" does not match start-element tag "EPVALUE"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPW$WORKER", line 9715
----- PL/SQL Call Stack -----
object line object
handle number name
0x983331fc 21979 package body SYS.KUPW$WORKER
0x983331fc 9742 package body SYS.KUPW$WORKER
0x983331fc 17950 package body SYS.KUPW$WORKER
0x983331fc 4058 package body SYS.KUPW$WORKER
0x983331fc 10450 package body SYS.KUPW$WORKER
0x983331fc 1824 package body SYS.KUPW$WORKER
0x4eae2874 2 anonymous block
ORA-39097: Data Pump job encountered unexpected error -1427
ORA-39065: unexpected master process exception in DISPATCH
ORA-01427: single-row subquery returns more than one row
Job "TEST1"."SYS_IMPORT_FULL_02" stopped due to fatal error at Wed Oct 26 20:28:25 2016 elapsed 0 00:39:12
带上EXCLUDE=STATISTICS后,成功导入
5、ORA-00959: 表空间 'CLOUD_D_STANDARD' 不存在
REMAP_TABLESPACE可以定义切换对象的不同表空间,其格式为:
remap_tablespace=old_tablespace_name:new_tablespace_name
用户空间切换要使用下面方案:
remap_schema=old_schema_name:new_schema_name
下面为相关命令说明:
通过数据泵导出/导入Expdp/impdp
Oracle 10g引入了DATA PUMP提供的是一种基于服务器的数据提取和恢复的实用程序,DATA PUMP在体系结构和功能上与传统的EXPORT和IMPORT实用程序相比有了显著的提升。DATA PUMP允许您停止和重启作业,查看运行的作业的状态,及对导入和导出的数据做限制。
注意:数据泵文件与传统的EXP/IMP数据转储文件是不兼容的。
一、以下是DATA PUMP的几个优点介绍:
1.数据泵(DataPump)的所有工作都有数据库实例来完成,数据库可以并行来处理这些工作,不仅可以通过建立多个数据泵工作进程来读/写正在被导出/导入的数据,也可以建立并行I/O服务器以更快地读取或插入数据,从而,单进程瓶颈被彻底解决。
2.通过数据泵,以前通过EXP/IMP主要基于Client/Server的逻辑备份方式转换为服务器端的快速备份,数据泵主要工作在服务器端,可以通过并行方式快速装入或卸载数据,而且可以在运行过程中调整并行的程度,以加快或减少资源消耗。
二、步骤如下
1. 创建DIRECTORY
DATA PUMP要求为将要创建和读取的数据文件及日志文件创建目录,这个参数是用来定义一个目录,前面已经提到数据泵主要在Server端工作,导出文件需要写出到Server端本地目录,这个DIRECTORY就是对应的Server端的目录。将要访问数据泵文件的用户必须要拥有该目录的读/写权限。
注意:在开始操作之前要验证外部目录是否存在,并且下达create directory命令的用户需要拥有create anydirectory的系统权限。
下面给出一个创建名为TEST的目录并授予system用户访问此目录读/写权限。
创建目录并赋予权限:
SQL> Create directory TEST as 'd:\test';
SQL> Grant read,write on directory TEST to system;
查看数据库中已创建的directory的两个视图:
SELECT * FROM ALL_DIRECTORIES;
SELECT * FROM dba_DIRECTORIES;
然后在目标磁盘下手工创建文件夹d:\test
2. 数据泵导出
数据泵导出的方法有多种,这里我们只介绍两种:
单个用户方案导出
Expdp [用户名]/[密码]@[主机字符窜] schemas=[用户名] directory=TEST dumpfile=X.dmp logfile=X.log
数据库全库导出
Expdp [用户名]/[密码]@[主机字符窜] full=y directory=TEST dumpfile=X.dmp logfile=X.log
3. 数据泵导入
按以上导出方式:
单个用户方案导入
impdp [用户名]/[密码]@[主机字符窜] schemas=[用户名] directory=TEST dumpfile=X.dmp logfile=X.log ignore=y
数据库全库导入
impdp [用户名]/[密码]@[主机字符窜] full=y directory=TEST dumpfile=X.dmp logfile=X.log ignore=y
注意:directory的位置
drop directory test 删除目录