1

【译】sqlcl 将数据从 oracle 传输到 postgresql 或 yugabytedb -m6米乐安卓版下载

原创 smiling 2022-05-26
649

原文链接:https://dev.to/yugabyte/sqlcl-to-transfer-data-from-oracle-to-postgresql-or-yugabytedb-lha
原文作者:franck pachot

以前的dba有过这样的故事:oracle提供了一个“sqlloader”而没有任何“sqlunloader”,因为larry ellison 不希望他的客户搬走。 现在已经改变了:有一种简单的方法可以使用简单set sqlformat csv的 sqlcl 导出到 csv。 关注以了解更多信息。

举个例子。 我想将一些示例数据从oracle移动到yugabytedb以比较大小。 我有一个始终免费的自治数据库,其中包括 ssb 示例模式。有一个lineorder表,大小为几百gb。 我将使用dbms_metadata获取ddl。 我必须做的唯一更改是sub(" number,"," numeric,")禁用约束和排序规则。

当然,有一些专业工具可以将oracle模式转换为postgresql。好的旧的或 aws 也非常适合评估迁移所需的更改级别。但是对于一些快速的操作,我很擅长使用awk😉

然后,通过设置set sqlformat csv和一些只输出数据的设置,如feedback off pagesize 0 long 999999999 verify off,导出就很容易了。我将所有awk构建\copy命令的所有内容都通过管道传递给这些 csv 行。 我喜欢先执行一些小步骤,然后在 copy 命令的开头设置 10000 行 copy(nr-data)000命令data。并行发送它们很容易,但我可能不需要它,因为yugabytedb是多线程的。

这是我使用的脚本 - 我在 tns_admin 中有我的自治数据库钱包,我家中安装了 sqlcl(一个 oracle 免费层 arm,我也在其上运行我的 yugabytedb 实验)。

{
tns_admin=/home/opc/wallet_oci_fra ~/sqlcl/bin/sql -s demo/",,p455w0rd,,"@o21c_tp @ /dev/stdin ssb lineorder <0 && (nr-data)00000==0{
 print "\\."
 print "\\copy "table" from stdin with csv"
}
end{
 print "\\."
}
'

输出可以直接通过管道传输到psql😎

这是我开始加载时的屏幕: 

这是一个实验,测量运行时间没有意义,但我查看了rows_inserted统计信息,以验证所有数据都分布在分布式sql数据库的3个节点上。 即使使用单个客户端会话,负载也会分布在所有集群上。

这对于postgresql也是一样的,因为它们是相同的api: yugabytedb在分布式存储上使用了postgresql。

此测试中的所有组件都是免费且易于使用的:

  • 虚拟机位于 oracle 云免费层 (arm) 上,oracle 数据库是免费的自治数据库 👉 
  • postgresql 是开源免费的👉 
  • yugabytedb 是开源免费的👉 
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

网站地图