ORACLE 体系 - 14(oracle 11g的体系结构有几种)
wptr33 2025-07-09 18:00 11 浏览
【十四】数据移动
14.1 概念
1)数据移动源于数据仓库,它是逻辑对象层面的数据复制,数据移动有两种引擎:
①ORACLE_LOADER(Sqlload引擎)
②ORACLE_DATAPUMP(数据泵引擎)
两个引擎的区别是:ORACLE_DATAPUMP只能读取由它导出的文件,而ORACLE_LOADER可以读取任何它能解析的第三方文件格式。
2)数据移动主要包含两个方面内容
⑴创建外部表的方法,两种引擎都可以生成外部表数据,但用途和方法是不同的。
①Sqlload引擎生成的外部表是文本格式的,支持跨平台的不同数据库间的数据移动。
②Data pump引擎生成的外部表是二进制格式的,适用于Oracle 平台的数据库之间快速数据移动。
⑵数据泵技术(expdp/impdp)
作为替代传统逻辑备份的导入导出,实现数据在逻辑层面的快速复制与恢复。
14.2 Directory(目录)
①创建外部表必须使用Directory指定外部表的目的地,目录是数据库对象,相当于把物理目录映射成一个逻辑目录名;
②引入directory的好处是简化了在不同OS中对于物理目录路径的格式描述;
③通过Sqlload和Data pump两种方法创建外部表时都必须使用指定的directory。
14.3 sql*loader
14.3.1 sql*loader 原理:
1)将外部数据(比如文本型)导入oracle database。(可用于不同类型数据库数据迁移)
本质是在段(segment 表)重新insert 记录
①conventional:将记录插入到segment的HWM(高水位线)以下的块,要首先访问bitmap,来确定那些block 有free space;
②direct path:将记录插入到segment的HWM(高水位线)以上的从未使用过的块,绕过db_buffer,不检查约束,还可以关闭redo,也支持并行操作,加快插入速度。
传统插入数据和直接插入数据:
SQL> create table emp1 as select * from emp where 1=2;
SQL> insert into emp1 select * from emp; 传统方式数据
SQL> insert /*+ APPEND */ into emp1 select * from emp; 直接方式数据,必须commit后才能查看数据
14.3.3 sql*loader 用法:
SQLLDR keyword=value [,keyword=value,...]
可以看帮助信息$/u01/oracle/bin/sqlldr(回车)
14.4 外部表示例
14.4.1 使用ORACLE_LOADER引擎建立外部表
步骤1:模拟生成数据源
SQL>select empno||','||ename||','||sal||','||deptno from scott.emp;
步骤2:建立目录,生成平面表(数据源)
$mkdir -p /home/oracle/dir1
$vi /home/oracle/dir1/emp1.dat 粘贴步骤1的查询结果
步骤3:建立directory
名称为dir1指向物理目录/home/oracle/dir1:
SQL>create directory dir1 as '/home/oracle/dir1';
将dir1的对象权限授予scott和tim用户:
SQL>grant read,write on directory dir1 to scott,tim;
步骤4:使用ORACLE_LOADER引擎创建外部表emp1_ext
scott:
CREATE TABLE emp1_ext
(EMPNO NUMBER(4),
ENAME VARCHAR2(10),
SAL NUMBER(7,2),
DEPTNO NUMBER(2))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY dir1
ACCESS PARAMETERS (FIELDS TERMINATED BY ",")
LOCATION ('emp1.dat')
) REJECT LIMIT UNLIMITED;
步骤5:验证外部表
SQL> select * from emp1_ext;
REJECT LIMIT UNLIMITED 的意思是 select 时剔除不合格的行,而不会报错“ORA-30653: 已达到拒绝限制值”。
14.4.2 使用ORACLE_DATAPUMP引擎导出导入外部表
步骤1:为scott用户建立外部表emp2_ext
数据源是emp2.dmp文件,逻辑目录是dir1。
SQL> CREATE TABLE emp2_ext
ORGANIZATION EXTERNAL
( TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY dir1
LOCATION ('emp2.dmp'))
AS SELECT empno,ename,sal,deptno FROM scott.emp ;
步骤2:验证scott的外部表emp2_ext
SQL> select * from scott.emp2_ext
步骤3:为tim用户建立外部表emp3_ext, 同样读取数据源emp2.dmp
tim:
SQL> CREATE TABLE emp3_ext
(EMPNO NUMBER(4),
ENAME VARCHAR2(10),
SAL NUMBER(7,2),
DEPTNO NUMBER(2))
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY dir1
LOCATION ('emp2.dmp')
) ;
步骤4:验证tim的外部表emp3_ext
SQL>select * from tim.emp3_ext
14.4.3 使用sqlldr将emp1.dat导入到scott下的emp1
步骤1:建立控制文件
$ vi /home/oracle/dir1/emp1.ctl
load data
infile '/home/oracle/dir1/emp1.dat'
insert --insert 插入表必须是空表,非空表用append
into table emp1
fields terminated by ','
optionally enclosed by '"'
(empno,ename,sal,deptno)
步骤2:在scott下建立emp1表(内部表结构),只要结构不要数据
SQL> create table scott.emp1 as select empno,ename,sal,deptno from scott.emp where 1=2;
步骤3:ORACLE_LOADER引擎导入(normal方式)
$ cd /home/oracle/dir1
$ sqlldr scott/scott control=emp1.ctl log=emp1.log
步骤4:验证结果
SQL> select * from scott.emp1;
上例的另一种形式是将数据源和控制文件合并在.ctl里描述
[oracle@work sqlldr]$ vi emp.ctl
load data
infile *
append
into table emp1
fields terminated by ','
optionally enclosed by '"'
(empno,ename,sal,deptno)
begindata
7369,SMITH,800,20
7499,ALLEN,1600,30
7521,WARD,1250,30
[oracle@prod sqlload]$ sqlldr scott/scott control=emp.ctl log=emp.log
the end !!!
@jackman 共筑美好!
相关推荐
- 台积电提出SRAM存内计算新方法,能效比可达89TOPS/W
-
芯东西(公众号:aichip001)编译|高歌编辑|云鹏芯东西3月16日消息,近期,台积电的研究人员在ISSCC2021会议上公布了一种改良的SRAM存储器阵列,该SRAM阵列采用22nm工...
- Golang中如何判断两个slice是否相等?
-
在Golang中,要判断两个slice是否相等是不能直接使用==运算符的(==只能说明两个slice是否指向同一个底层数组)。如果两个slice的底层数组相同,但长度或容量不同...
- JS入门基础知识(js基础知识总结笔记)
-
JS对象操作对象增删改查创建对象letobj={}新增属性obj.a=1修改属性obj.a='a'...
- 趣谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64
-
大家好,我是Echa。好久没跟粉丝们细聊JavaScript那点事了。做一名全栈工程师,JS基础还是要打牢,这样的话不管底层业务逻辑以及第三方框架怎么变化,都离不开基础。本文文章属于基础篇,阅读有点...
- 告别 substr() 和 substring()?更可靠的 JavaScript 字符串截取方法
-
JavaScript提供了三个主要的字符串截取方法:...
- golang第九天,切片(slice)介绍(golang 切片作为参数)
-
什么是切片golang切片是对数组的抽象。go的数组长度不可改变,在特定场景中这样的集合就不太适用,go中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追...
- Go语言零到一:数组(go struct数组)
-
引言...
- 你说你熟悉Slice,这道slice题你能答对吗?
-
每当你花费大量时间使用某种特定工具时,深入了解它并了解如何高效地使用它是很值得的。...
- Python 3.14七大新特性总结:从t-string模板到GIL并发优化
-
Python3.14已进入测试阶段,根据PEP745发布计划,该版本已停止引入新功能,也就是说新特征就应该已经固定下来了。所以本文基于当前最新的beta2版本,深入分析了Python3.14中...
- Python 幕后:Python导入import的工作原理
-
更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)Python最容易被误解的方面其中之一是import。...
- Python元类实现自动化编程的正确姿势
-
元类是Python中用于创建类的类。通过元类机制,开发者可在运行时动态创建和修改类,为框架开发、设计模式实现和高级架构设计提供核心支持。在Python语言的高级特性中,元类占据着独特而重要的地位。作...
- Python字符串详解与示例(python字符串类型及操作)
-
艾瑞巴蒂字符串的干货来了,字符串是程序中最常见的数据类型之一,用来表示数据文本,下面就来介绍下字符串的特性,操作和方法,和一些示例来吧道友:1.字符串的创建在python中字符串可以永单引号(...
- 恕我直言!你对Python里的import一无所知
-
文章来源:https://mp.weixin.qq.com/s/4WAOU_Lzy651IE-2zZSFfQ原文作者:写代码的明哥...
- Python基础:字符串操作(python字符串的用法)
-
字符串是Python中最常用的数据类型之一,用于表示文本数据。我们将学习如何对字符串进行常见的操作,包括创建、访问、修改和处理字符串。通过掌握这些技巧,您将能够更好地处理和操作文本数据。让我们开始吧!...
- Python 中 字符串处理的高效方法,不允许你还不知道
-
以下是Python中字符串处理的高效方法...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
面试官:git pull是哪两个指令的组合?
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- 台积电提出SRAM存内计算新方法,能效比可达89TOPS/W
- Golang中如何判断两个slice是否相等?
- JS入门基础知识(js基础知识总结笔记)
- 趣谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64
- 告别 substr() 和 substring()?更可靠的 JavaScript 字符串截取方法
- golang第九天,切片(slice)介绍(golang 切片作为参数)
- Go语言零到一:数组(go struct数组)
- 你说你熟悉Slice,这道slice题你能答对吗?
- Python 3.14七大新特性总结:从t-string模板到GIL并发优化
- Python 幕后:Python导入import的工作原理
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)