文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.前言

在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP。所以在11G的倒库和入库方式中,我们也有两种方式可以选择:传统模式和数据泵模式。

传统模式又分为:常规导入导出和直接导入导出。

下面以导出数据为例,分别介绍各自导出原理。

1.1简述各导入导出方式的原理

1.1.1常规导出原理

传统路径模式使用SQL SELECT语句抽取表数据。数据从磁盘读入到buffer cache缓冲区中,行被转移到评估缓冲区。在此之后根据SQL表达式,将记录返回给导出客户端,然后写入到dump文件。

常规导出的例子:exp zhejiang/zhejiang file=/data1/zj_regular.dmp buffer=20480000

1.1.2直接导出

直接导出模式,数据直接从磁盘中读取到导出session的PGA中,行被直接转移到导出session的私有缓冲区,从而跳过SQL命令处理层。 避免了不必要的数据转换。最后记录返回给导出客户端,写到dump文件。

直接导出的例子:exp zhejiang/zhejiang file=/data1/zj_direct.dmp buffer=20480000 recordlength=65535 direct=y。

1.1.3数据泵导出

数据泵方式是EXP方式的加强版,其原理类似,但是它的导出要借鉴服务器端的数据库目录。

1.2传统模式和数据泵模式的对比

1.2.1传统模式的优点

EXP和IMP是客户段工具程序,它们既可以在客户端使用,也可以在服务器段使用。

而EXPDP和IMPDP是服务端的工具程序,它们只能在ORACLE服务端使用,不能在客户端使用。

1.2.2数据泵模式的优点

数据泵导出数据的时间更短,而且导出的数据文件大小更小。

以下表格为我将网友的一个测试进行的统计:

类型

例子(导出40G左右的数据)

传统模式(直接导出)

18分钟

数据泵模式

14分钟,且导出的文件比传统模式小1.5G

1.3 注意

IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。

1.4 小结

由上面对比可见,在实际操作中,我们在服务器端选择数据泵方式导入数据会更快一些。下面我主要介绍数据泵方式的导入和导出。

2.数据泵导出数据的流程

2.1创建逻辑目录并授权

创建逻辑目录“EXPDP_DIR”并将其映射到物理路径“D:\DBbak”下,在PL/SQL下面执行语句:Create or replace directory expdp_dir as 'D:\DBbak';

执行完后,要在对应的硬盘目录下创建该文件夹。

可以通过SQL查询是否成功创建逻辑目录,Select * from dba_directories,可以看到如下结果:

最后,再给创建的目录赋予权限:

Grant read,write on directory EXPDP_DIR to Public;

2.2执行导出操作

建立expdp.bat文件,文件内容为:Expdp sccot/tiger@testDB directory=expdp_dir dumpfile =STDCG _201501.dmp logfile= STDCG _201501.log;执行该bat;

因为是导出所有数据,所以没有设置tables| schemas| tablespaces。

导出成功后,导出的数据会自动放在之前设置的Expdp_Dir文件夹下。

3.数据泵导入数据的流程

3.1 创建数据库实例等基本操作

a.创建数据库stdcg,包含SYS和SYSTEM两个用户

b.用SYS登陆PL/SQL->File->Open->SQL script执行创建表空间sql脚本。需要注意的就是修改脚本中的路径:

DATAFILE 'F:\app\DELL\oradata\stdcg\DLGIS.DBF'(红色部分是本地数据库的路径)

c.执行创建用户脚本:包含dlsys、dlmis、dlinit、dlgis、sde、mms、umstat、ulog用户。

3.2创建逻辑目录并授权

如2.2中所描述的,这里直接给出语句:

Create or replace directory expdp_dir as 'd:\DBbak';

Grant read,write on directory expdp_dir to public;

不过多出了这样一个步骤:在D盘建立文件夹DBbak 后,需要将数据库的导出文件:STDCG _201501.DMP和STDCG _201501.log 一起拷贝到D:\DBbak目录下。

3.3执行导入操作

建立impdp.bat文件,文件中的内容为: impdp dlsys/dlsys@stdcg dumpfile= STDCG _201501.dmp  logfile= STDCG _201501_EXP.log。运行该bat文件。

同样,因为是全库导入,所以没有使用tables| schemas| tablespaces来进行导入内容设置。

4.11g数据导入10g的库中

4.1 降版本导出然后导入

首先要做与一般数据泵导出时相同的操作,即创建逻辑目录: Create or replace directory expdp_dir as 'D:\DBbak';

然后再导出数据时,sql命令上要加上一个version控制即可:

expdp sccot/tiger@testDB  dumpfile=stdcg10g.dmp  directory= expdp_dir  version=10.0.2。

导出后,再将导出的dmp文件导入到10g的库中即可。

4.2容易出现的问题

目前在江北项目和烟台项目中均做了如下操作:shp数据首先通过SDE导入到了11g的数据库中,由于现场数据库突然需要降级,然后将11g的数据又重新导入导出到10g中。但是,两个现场都不分别出现了不同的问题。

江北现场的问题是,在catalog里能够直连到10g上Oracle,也能看到各空间数据。但是,在arcmap中添加该数据库中的空间数据,图层渲染时会出现SDE内部错误,导致图层无法显示。

而烟台现场,则直接出现了直连数据库不定时失效问题:

测试可以连接:

点OK后又不能连接:

4.3解决方法及分析

4.3.1解决方法

将空间数据所在的DLGIS和SDE用户删除,重新通过SQL生成这两个用户以及先关表结构后。手动通过catalog直连到数据库上,然后手动导入图层,解决上述问题。

4.3.2 问题分析

猜想为11g数据转成10g数据时可能某些空间信息表被改变或者破坏,不再符合arcgis10.0的连接规范等。造成了sde不稳定或者sde内部错误。

Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题的更多相关文章

  1. 高版本api在低版本中的兼容

    直接上例子,看如何避免crash. eg:根据给出路径,获取此路径所在分区的总空间大小. 文档说明:获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下 ...

  2. android中导入低版本project可能会遇到的编译问题(转自: Victor@Beijing)

    使用高版本的SDK后再导入以前用低版本的project时,会遇到一些兼容性的问题. (1)Unable to resolve target 'android-5' 因为本机中现在使用的是2.2的SDK ...

  3. Python 数据分析中金融数据的来源库和简单操作

    目录 金融数据 pandas-datareader TuShare 金融学图表 案例 金融数据 数据分析离不开数据的获取,这里介绍几种常用的获取金融方面数据的方法. pandas-datareader ...

  4. 关于SQLServer2008数据如何导入SQL2005的解决办法,高版本数据导入低版本中。

    最近需要把SqlServer2008 的数据库导入sqlserver2005 中.直接备份还原肯定不行.后来想到可以生成脚本执行sql语句,并选择数据可以一同进行执行. 点击右键--->任务-- ...

  5. SQLserver 数据库高版本无法还原到低版本的数据解决方法

    sql server 数据库的版本只支持从上往下兼容.即高版本可以兼容低版本 .低版本不能兼容低版本.通常我们在开发时会用比较高的版本.但是部署到客户那边可能他们的数据库版本会比较低. 我们可以通过导 ...

  6. Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)

    最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/Vi ...

  7. 教你如何6秒钟往MySQL插入100万条数据!然后删库跑路!

    教你如何6秒钟往MySQL插入100万条数据!然后删库跑路! 由于我用的mysql 8版本,所以增加了Timezone,然后就可以了 前提是要自己建好库和表. 数据库test, 表user, 三个字段 ...

  8. (四)DIH导入结构化数据

    (四)DIH导入结构化数据 目前大多数的应用程序将数据存储在关系数据库(如oracle.sql server .mysql等).xml文件中.对这样的数据进行搜索是很常见的应用.所谓的DataImpo ...

  9. Hive 导入 parquet 格式数据(未完,待续)

    Hive 导入 parquet 格式数据 Parquet 格式文件,查看Schema Parquet 之mapreduce Hive 导入 parquet 格式数据

随机推荐

  1. linux配置ftp高级权限

    建一个用于管理的ftp高级账号,ftproot,定义它的目录,也就是我们存放项目的地址,所属组www, useradd -d /home/www -g www ftproot www里存放很多项目,我 ...

  2. 关于pl/sql数据库下拉中选项为空的问题

    1.可能是在配置环境变量TNS_ADMIN的时候后面多了一个分号,去掉分号就可以了

  3. 一、javascript中的类

    1.找出对象的构造器----constructor/instanceof constructor是用模版实例化对象的时候附带的一个额外属性,这个属性指向创建该对象时所使用的javascript构造函数 ...

  4. 实践Html5的上传文件

    技术点: 1.通过input的change事件获取文件信息: onchange = function() { this.files } 这个files属性是htmlInputElement接口的属性, ...

  5. window.location.href 中文乱码问题。。。。

    window.location.href 中文乱码问题.... 要解决此问题需要两次解码, 第一次解码: 是在页面中的js脚本中解码:window.location.href = "save ...

  6. 成为OpenStack工程师

    OpenStack Hacker 态度:开放.主动.沟通 影响力:能说.能写.能分享 四化:自动化.流程化.系统化.文档化 0级 掌握一些基本技能:python.c.linux.git.unittes ...

  7. PHP好任性 —— 大小写敏感有两种规则,然而并没有什么特别原因

    大小写敏感 变量.常量大小写敏感 大小写不敏感 类名.方法名.函数名.魔法变量大小写不敏感 原因 有人原引了Rasmus 在一次会议上的发言大意: "I'm definitely not a ...

  8. ASP.NET Core 源码阅读笔记(1) ---Microsoft.Extensions.DependencyInjection

    这篇随笔主要记录一下ASP.NET Core团队实现默认的依赖注入容器的过程,我的理解可能并不是正确的. DependencyInjection这个项目不大,但却是整个ASP.NET Core的基础, ...

  9. 利用gulp搭建本地服务器,并能模拟ajax

    工作中可能会用到的小工具,在此记录一下.可以实现的功能有: 本地http服务器 页面实时刷新 可以模拟ajax请求 第一步,新建package.json文件.用到了gulp.gulp-webserve ...

  10. lua中清空目录和递归创建目录

    lua中的 lfs.mkdir lfs.rmdir只能针对单个目录,且lfs.rmdir不能清空文件夹 于是我想到了使用os.execute 递归创建目录如下os.execute("mkdi ...