Oracle数据库的备份、迁库_oracle 备份和迁移-程序员宅基地

技术标签: oracle    数据库  备份  

Oracle数据库有三种常用的备份方法,分别是导出/导入(EXP/IMP)或者使用数据泵方法(impdp/expdp)、热备份和冷备份。导出/导入备份是一种逻辑备份,相对于导出/导入来说,热备份、冷备份是一种物理备份 。
一、exp
我们知道采用direct path可以提高导出速度。所以,在使用exp时,就可以采用直接路径模式。
这种模式有2个相关的参数:DIRECT和RECORDLENGTH参数。
DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。
和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。其用法如下:
如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
一些限制如下:
· 直接路径不能使用在tablespace-mode
· 直接路径不支持query参数。query只能在conventional path模式下使用。
· 如果exp版本小于8.1.5,不能使用exp导入有lob字段的表。 不过现在很少有有8版本的数据库了。这点可以忽略掉了。
· buffer选项只对conventional path exp(传统路径)有效。对于直接路径没有影响。对于直接路径,应该设置RECORDLENGTH参数。
· 对于直接路径下, RECORDLENGTH参数建议设成64k(65535)。这个值对性能提高比较大。

1.导出整个库:
Exp 用户名/密码@SID file=E:\xxx.dmp owner=用户名,回车就可以了
2.导出指定表
Exp userid=用户名/密码@SID tables=(tableName1,tableName2,…,tableNameN) file=存储路径\备份文件名.dmp
3.将数据库中的表table1中字段name以“张”打头的数据导出
Exp system/密码@数据库名 file=存放路径\文件名.dmp tables=(table1) query=\”where filed1 like ‘张%’\”

例子:

Microsoft Windows [版本 6.3.9600]
(c) 2013 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>exp userid=***/***@orcl tables=MSG_DETAI
\备份\MSG_DETAILS.dmp

Export: Release 11.2.0.3.0 - Production on 星期一 109 09:10:13 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights re


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64
tion
With the Partitioning, OLAP, Data Mining and Real Application Testing
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
服务器使用 AL32UTF8 字符集 (可能的字符集转换)

即将导出指定的表通过常规路径...
. . 正在导出表                     MSG_DETAILS
. . 正在导出分区                        M1707_01导出了           0 行
. . 正在导出分区                        M1707_02导出了           0 行
. . 正在导出分区                        M1707_03导出了           0 行
. . 正在导出分区                        M1707_04导出了           0 行
. . 正在导出分区                        M1707_05导出了           0 行
. . 正在导出分区                        M1707_06导出了           0 行
. . 正在导出分区                        M1707_07导出了           0 行
. . 正在导出分区                        M1707_08导出了           0 行
. . 正在导出分区                        M1707_09导出了           0 行
. . 正在导出分区                        M1707_10导出了           0 行
. . 正在导出分区                        M1707_11导出了           0 行
. . 正在导出分区                        M1707_12导出了           0 行
. . 正在导出分区                        M1707_13导出了          72 行
. . 正在导出分区                        M1707_14导出了     1140191 行
. . 正在导出分区                        M1707_15

2、IMP
Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。
· IMP作了大量的跟普通方式一样的insert
· IMP时候创建索引通常是logging的,产生了大量的undo和redo

使用命令行的方式进行导入dmp文件
例子:imp my/123@orcl file=d.dmp fromuser=my touser=my ignore=y statistics=none buffer=100000000
解释: imp 新建库的用户名/新建库的密码@SID file=dmp文件路径 fromuser=从哪个用户执行导入(dmp文件中的用户) touser = 导入到哪个用户

提高IMP速度:
(1、不建议使用commit参数,因为当imp失败的时候,会导致很多后续的麻烦事儿
(2、增大buffer参数值,以便于一次读进更大的array
Imp 参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:
imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000

(3、设置较大的初始化参数sort_area_size,以加快创建索引时候的排序速度,大内存启用ASMM/AMM之后感觉没有什么作用。
(4、使用INDEXES=N选项,导入数据之后再手工创建索引。
前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N只导入数据不创建索引,从而加快导入速度。
我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法
如下:

imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n

imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y

(5、增加 LARGE_POOL_SIZE
如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。
检查数据库是否在MTS模式下:
SQL>select distinct server from v$session; —-如果返回值出现none或shared,说明启用了MTS。
(6、增大重作日志的大小
以减少log switch的次数,也就是减少checkpoint次数,减少写磁盘的次数
(7、如果要往已经存在的表中追加数据
那么有些情况下,比如表中存在位图索引,那么最好先删除索引,再导入。否则更新索引时会产生大量等待
注意:相关的几个参数
1、db_writer_processes imp导入时,如果吧上面的几点都做好了,还有一个影响最大的参数需要确认,那就是db_writer_processes,进程的个数,可以根据服务器的CPU酌情增加。速度可以大大提高。
2、 fast_start_mttr_target平均恢复时间,需要设置一个合理的数字,比如300秒。加快系统做检查点
其他需要注意的:
1. 目标数据库设置为非归档模式,当然停掉资料库同使用Nologging更好。
2. 导入的时候可以将索引和约束全部去掉( index , constraint , trigger等, drop或者disable掉所有的index以及相关的pk)
3. 在回滚段够大的情况下,不用加commit=y参数,频繁提交会影响效率;
4. 可以考虑使用DBLINK迁移,同样使用非归档模式,insert /+ append/ into select /+ parallel(t,4)/ * from t@dblink; ;
5. 迁移的过程中时刻注意各种空间是否够用(包括redolog,archivelog,undo segment,temp tbs);
6. 其他的因素干扰(Job, Trigger, Profile等等)。
7.Imp的时候buffer给的大一些。
8.imp没有parallel,想要用parallel那么就把原表输出成多个csv然后用sqlldr
9. 可以试试物化视图(Material View),如果是单独表空间的话,也可以考虑transport tablespace 。
10.可以考虑使用EXPDP和IMPDP。
11 为 table/index设置Nologging。
12. 同平台的话,按表空间传输,更快 .
13. 用的query子查询导出导入 (exp imp) .
14.ignore=y buffer=40960000,一秒至少应该是10w记录。
15.先创建表,删除索引信息。表设置并行度。如果可以分区的话。建议并行导入。即写多个脚本。每个脚本导入不同的分区内容。加上commit=y,导入完毕后并行创建索引,创建完毕后取消并行度。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zl570932980/article/details/78251191

智能推荐

思科ASA防火墙之NAT-程序员宅基地

文章浏览阅读723次。实验拓扑软件版本GN3 0.8.6 ASA镜像8.0(2)实验环境R1和R2模拟公司内网,R3模拟互联网设备。ASA作为公司出口,实现NAT地址转换实验需求在ASA上做动态NAT实现对R1 loopback 0 网段的地址转换在ASA上做动态PAT实现对R1 loopback 1 网段的地址转换在ASA上做静态NAT实现对R2 loopback 0 地址经行转换在ASA上做..._asa环回nat

JSON.stringify 语法讲解-程序员宅基地

文章浏览阅读66次。作用:这个函数的作用主要是为了系列化对象的。可能有些人对系列化这个词过敏,我的理解很简单。就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的)。就这么简单。打个比方说,你有一个类,那么你可以通过这个方法转换成相应的json类型的。很简单吧。接着看。语法:[b]JSON.stringify(value [, replacer] [, space]...

《东周列国志》第五十二回 公子宋尝鼋构逆 陈灵公衵服戏朝_公子宋的记载-程序员宅基地

文章浏览阅读1k次。话说公子归生字子家,公子宋字子公,二人皆郑国贵戚之卿也。郑灵公夷元年,公子宋与归生相约早起,将入见灵公。公子宋之食指,忽然翕翕自动,何谓食指?第一指曰拇指,第三指曰中指,第四指曰无名指,第五指曰小指,惟第二指,大凡取食必用著他,故曰食指。公子宋将食指跳动之状,与归生观看,归生异之。公子宋曰:“无他。我每常若跳动,是日必尝异味。前使晋食石花鱼,后使楚一食天鹅,一食合欢橘,指皆预动,无次不验。不知今日尝何味耶?”将入朝门,内侍传命,唤宰夫甚急。公子宋问之曰:“汝唤宰夫何事?”内侍曰:“有郑客从汉江来,得一大鼋,_公子宋的记载

206265-94-3,t-Boc-N-Amido-PEG3-Tos化学式:C18H29NO7S-程序员宅基地

文章浏览阅读79次。英文名称:t-Boc-N-Amido-PEG3-Tos化学式:C18H29NO7S分子量:403.5CAS:206265-94-3纯度:95%储存条件:-20°C运输:环境温度结构式:其他产品列表:Azido-PEG4-t-Boc-hydrazide 1919045-01-4 Azido-PEG2-t-Boc-hydrazide 2100306-56-5 t-Boc-N-Amido-PEG5-propargyl 2062663-67-4 _206265-94-3

修改log4j配置文件来减小Linux系统tomcat/logs目录下的catalina.out文件的大小_catalina.out日志文件设置大小压缩-程序员宅基地

文章浏览阅读2.4k次。近两天linux下的tomcat/logs目录下catalina.out文件过大(基本上是每三个月就达到4G),除了网上找到的使用cronolog工具进行对此日志进行分割之外。也可以通过配置服务的log4j.properties文件进行屏蔽(估计这个是跟我的服务有关系,因为我的MSA服务里面打印了很多日志信息,具体log4j配置见下面)。因为我发现catalina.out文件里记录的日志都是在My_catalina.out日志文件设置大小压缩

随便推点

Redhat Linux 6 安装使用 gitlab_redfla6离线安装git-程序员宅基地

文章浏览阅读1.4k次。一、安装gitlab清华大学镜像网站下载对应的rpm包https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.0.3-ce.0.el6.x86_64.rpm[root@admin Downloads]# rpm -ivh gitlab-ce-12.0.3-ce.0.el6.x86_64.rpmwarni..._redfla6离线安装git

phpstudy_pro启动mysql后循环停止又重启_phpstudy的mysql 不停重启-程序员宅基地

文章浏览阅读3.6k次。phpstudy_pro启动mysql后循环停止又重启。最初判断是与之前安装的mysql冲突,于是把mysql卸载后删除所有相关文件和相关系统变量,重启还是没有解决问题。报错2003。然后卸载phpstudy_pro重新安装,选择一个干净的路径,没有安装过phpstudy_pro的,然后居然成功了。。..._phpstudy的mysql 不停重启

vue项目中引入video.js视频播放器_vue项目引用vr视频示例-程序员宅基地

文章浏览阅读4.5k次。vue项目中引入video.js视频播放器Video.js 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器。安装 : npm install video.js在main.js中引入video.jsimport Video from ‘video.js’import ..._vue项目引用vr视频示例

简单总结Linux上排查JVM问题,cpu飙升或者内存不足_内存降低cpu飙升原因排查-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏10次。前言首先建议先简单了解JVM的内存机制,以及GC垃圾回收机制初步了解jvm的内存分配,gc以及简单的jvm内存配置以下j开头的命令基本都是java命令,如果没有设置全局环境变量,需要加上${java_home}全路径。如/usr/local/jdk8/java/bin/jmap pid一、内存不足1. 查看pidps -ef|grep java或jps -lv24130..._内存降低cpu飙升原因排查

nodejs koa2 + koa-body开发文件上传服务(图片,视频,音频....)_koa 上传音频文件-程序员宅基地

文章浏览阅读5.5k次,点赞7次,收藏36次。代码所在的项目:https://github.com/langyuxiansheng/biu-server-admin已开源在用node开发后端服务的时候,可能会用到fs文件系统.我这里用的koa2+ koa-body做的文件上传服务.废话不多说.直接上源码, 主逻辑在FilesService.js中,代码部分提供思路仅供参考.config里的配置,主要是代码中有staticPath..._koa 上传音频文件

java中double类型如果小数点后为零则显示整数否则保留两位小数_java 小数位位0展示位整数-程序员宅基地

文章浏览阅读2.6k次。public static String formatDouble(double d) { BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP); double num = bg.doubleValue(); if (Math.round(num) - num == 0) { retur..._java 小数位位0展示位整数

推荐文章

热门文章

相关标签