暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

EDB *Loader

新智锦绣 2024-09-05
56

点击蓝字关注我们


一、EDB*Loader简介


EDB*Loader是一种高性能的批量数据加载器,专为满足企业级数据库的大规模数据加载需求而设计。EDB*Loader 是一款专为EDB(EnterpriseDB)数据库系统设计的批量数据加载工具,它借鉴Oracle SQL*Loader的许多特性和功能旨在提供高效、灵活且兼容的数据加载解决方案。

EDB*Loader允许用户从外部数据源(如文本文件、CSV 文件等)批量加载数据到EDB数据库中的表中。它支持多种数据加载方式,包括常规路径加载、直接路径加载和并行直接路径加载,以满足不同规模和性能要求的数据加载任务。


二、EDB*Loader特点


  1. 兼容性:EDB*Loader 提供与Oracle SQL*Loader兼容的接口和语法,使得熟悉Oracle的用户能够轻松上手,并方便地将数据从Oracle数据库迁移到EDB数据库。

  2. 高效性能:通过直接路径加载和并行处理机制EDB*Loader能够显著提高数据加载的速度和效率,减少加载时间,特别适用于大规模数据集的批量处理。

  3. 灵活的控制文件:用户可以通过编写控制文件来定义数据加载的详细规则,包括数据文件的格式、字段的映射、错误处理策略等。控制文件提供了丰富的指令和选项,以满足不同场景下的数据加载需求。

  4. 错误处理和日志记录:EDB*Loader在加载过程中能够捕获和处理错误,并将相关信息记录在日志文件中,用户可以通过查看日志文件来解加载过程中遇到的问题,并进行相应的处理。

  5. 多目标表加载:支持在单个加载任务中加载多个目标表,提高数据加载的灵活性和效率。用户可以在控制文件中指定多个表的加载规则实现批量加载。

  6. 安全性:EDB*Loader 在加载数据时会遵循数据库的安全策略,确保数据的安全性和完整性。同时它也支持通过表权限等机制来控制数据加载的访问权限。


三、EDB*Loader应用场景


EDB*Loader广泛应用于需要大规模数据加载的企业级数据库系统中包括但不限于以下场景

  • 数据迁移:将Oracle数据库中的数据迁移到EDB数据库或其他兼容的数据库系统中。

  • 数据仓库:在数据仓库建设过程中,从多个数据源加载数据到目标表中,以支持后续的数据分析和挖掘。

  • 数据备份与恢复:在数据备份和恢复过程中,利用EDB*Loader进行数据的快速加载和恢复,确保数据的完整性和可用性。


四.EDB*Loader数据加载方式


EDB*Loader均支持三种数据加载方法

  1. 常规路径加载->常规路径加载是EDB*Loader使用的默认方法。使用基本插入处理向表中添加行。传统路径加载的优点:在传统路径加载期间强制执行表约束和表上定义的数据库对象。表约束和数据库对象包括主键、非空约束、检查约束、唯一索引、外键约束、触发器等。一个例外是:表上定义的EDB Postgres Advanced Server规则没有强制执行。EDB*Loader可以加载定义规则的表,然而些规则并没有得到执行。因此,您无法使用EDB*Loader加载使用规则实现的分区表。

  2. 直接路径加载->直接路径加载比传统路径加载更快,但需要从表中删除大多数类型的约束和触发器。

  3. 并行直接路径负载->通过允许多个EDB*Loader会话同时运行以加载单个表,并行直接路径加载提供了更大的性能改进。


五、EDB*Loader出错处理


  1. EDB*Loader可以加载单字节或多字节字符集中具有分隔符分隔或固定宽度字段的数据文件。分隔符可以是由一个或多个单字节或多字节字符组成的字符串。数据文件编码和数据库编码可能不同。支持将数据文件的字符集转换为数据库编码。

  2. 每个EDB*Loader会话都作为单个独立事务运行。如果EDB*Loader会话期间发生错误,导致事务中止,则会话期间所做的所有更改都将回滚。

  3. 通常,数据文件中的格式错误不会导致事务中止。相反格式错误的记录被写入一个名为坏文件的文本文件,错误的原因记录在日志文件中。

  4. 导致数据库完整性错误的记录会导致事务中止和回滚。与格式错误一样导致错误的记录会写入错误文件,原因会记录在日志文件中。

    注:

  5. EDB*Loader加载器与Oracle SQL*Loader加载器的不同之处在于数据库完整性错误会导致EDB*Loader中的回滚。在Oracle SQL*Loader中,只拒绝导致错误的记录,之前插入表中的记录将被保留,并在被拒绝的记录后继续加载。

  6. 以下是不会中止事务的格式错误类型的示例:

    (1).尝试将非数值加载到数值列中, 

    (2).数值对于数值列来说太大,

    (3).字符值太长,超过了字符列的最大长度, 

    (4).尝试将格式不正确的日期值加载到日期列中。 

  7. 以下是中止事务并导致EDB*Loader会话中所有更改回滚的数据库错误类型示例:

    (1).违反唯一约束,如主键或唯一索引; 

    (2).违反引用完整性约束;

    (3).违反检查约束;

    (4).插入行时触发的触发器引发的错误。


六、构建EDB*Loader加载器控制文件


  1. 调用EDB*Loader时提供的参数列表必须包括控制文件的名称,控制文件包括EDB*Loader用于从输入数据文件加载表的指令及控制文件的内容。 

  2. 控制文件包括以下信息:

    (1).包含要加载的数据的输入数据文件的名称,

    (2).要从数据文件加载的表的名称,

    (3).表中列的名称及其在数据文件中的相应字段位置, 

    (4).指定数据文件是使用分隔符字符串分隔字段,还是字段占据固定的列位置, 

    (5).可选的选择标准用于从数据文件中选择要加载到给定表中的记录,

    (6).收集非法格式化记录的文件的名称, 

    (7).收集不符合任何表的选择标准的记录的丢弃文件的名称。


七、EDB*Loader control file实战


分隔符分隔字段数据文件。

测试库testdb在schema public下创建emp表。

1.分隔符分隔字段数据文件导入emp表,准备控制文件emp1.ctl和数据文件emp.dat

将emp.dat文件中的4条记录成功导入到testdb库下emp表。

2.将edbldr读取参数放入到文件中

3.加密读取文件到数据库表

4.报错信息:

edbldr error: database connection failed: connection to server at "127.0.0.1", port 5444 failed: server does not support SSL, but SSL was required。

5.解决方法:EDB EPAS 需要做Server Certificates和Client Certificates,步骤如下

(1).sudo openssl genrsa -passout pass:changeit -out server.key 2048

(2).sudo openssl rsa -in server.key -passin pass:changeit -out server.key

(3).sudo openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj "/C=PK/ST=Federal/L=Islamabad/O=EDB/OU=DEV/CN=localhost"

(4).sudo cp server.crt root.crt

(5).sudo chmod 664 root.crt

(6).sudo chmod 600 server.key

(7).sudo chmod 600 server.crt

(8).sudo cat /var/lib/edb/as16/data/postgresql.conf | grep -E 'ssl' | egrep -v '^$|^#'

ssl = on

ssl_ca_file = 'root.crt'

ssl_cert_file = 'server.crt'

ssl_key_file = 'server.key'

(9).sudo cat pg_ident.conf | grep -E 'mymap'  | egrep -v '^$|^#'

mymap           enterprisedb            enterprisedb

(10).sudo cat pg_hba.conf | grep -E 'hostnossl|hostssl'  | egrep -v '^$|^#'

hostnossl all             all                       all              reject

hostssl  all         enterprisedb        0.0.0.0/0        cert  map=mymap

(11)./usr/edb/as16/bin/pg_ctl reload

6.验证edbldr是否可以正常登录

7.接下来做Client Certificates,具体步骤如下:

(1).sudo mkdir /home/enterprisedb/

    cd  /home/enterprisedb/

(2).sudo openssl genrsa -passout pass:changeit -out postgresql.key 2048

(3).sudo openssl rsa -in postgresql.key -passin pass:changeit -out postgresql.key

(4).sudo openssl req -new -key postgresql.key -out postgresql.csr -subj "/C=PK/ST=Federal/L=Islamabad/O=EDB/OU=DEV/CN=enterprisedb"

(5).sudo openssl x509 -req -in postgresql.csr -CA /var/lib/edb/as16/data/root.crt -CAkey /var/lib/edb/as16/data/server.key -out  postgresql.crt -CAcreateserial

8.验证插入数据

9.固定宽度字段数据文件

10.单个物理记录数据文件——按条款交付的记录

11.运行并行直接路径负载(DIRECT=TRUE and PARALLEL=TRUE)

sudo /usr/edb/as16/bin/edbldr -d testdb USERID=enterprisedb/q1w2e3r4 CONTROL=emp_parallel.ctl DIRECT=TRUE PARALLEL=TRUE





扫码进 EDB 微信群


发现“分享”“赞”了吗,戳我看看吧


文章转载自新智锦绣,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论