首页 > 其他分享 >OB逻辑导数

OB逻辑导数

时间:2024-08-21 10:04:35浏览次数:2  
标签:逻辑 导数 -- 数据库 导出 OB 导入 数据 dbcat

OB逻辑导数方式

  • outfile方式导出数据到文件、CSV
  • dbcat工具导出、导入数据
  • dataX工具导出数据(不介绍)
  • OB4.x新特性旁路导入数据<load data、insert (append) into select>
  • OMS工具数据导出、导入、增量数据准实时同步(单独篇章介绍)

存储过程造数据(oracle租户)

创建表
create table zhzbusi.t1(id int,name varchar2(299),enrollment_date date);
创建存储过程
CREATE OR REPLACE PROCEDURE add_data_to_t1(n IN INT) IS
i INT := 1;
BEGIN
WHILE i <= n LOOP
INSERT INTO zhzbusi.t1 (id, name, enrollment_date) VALUES (i, 'Name' || i, TO_DATE('2022-01-01', 'YYYY-MM-DD') + i);
i := i + 1;
END LOOP;
END;
/
DELIMITER ;
执行存储过程造10条数据
call add_data_to_t1(10);
commit;

使用OUTFILE语句导出数据到CSV

OB4.2官方文档资料

  • 管理员用户登录,确认租户的unite资源落位
select * from gv$ob_units;  ##sys用户登录oracle租户
select * from oceanbase.gv$ob_units;##root用户登录mysql租户

image

  • 修改secure_file_priv参数,允许导出文件到指定目录
ssh  [email protected]  ###根据上一步查询出主机ip地址,登录任意一台主机。
obclient -S /home/admin/oceanbase/run/sql.sock -usys@zhz_oracle -p  ##sys用户使用socket方式本地登录zhz_oracle租户
show variables like 'secure_file_priv';  #默认是null;V4.2.0开始,null和空字符串,表示禁止导出文件。
SET GLOBAL secure_file_priv = "/";    ##修改导数文件路径 / 表示可以导出到任意路径
  • 重新登录,导出数据
obclient -h10.1.1.1 -P端口 -usys@zhz_oracle#***** -p

select id,name,enrollment_date into outfile '/data/1/zhzbusi_t2.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    FROM zhzbusi.t2;
  • 登录10.1.1.1查看导出的数据
    再哪一个ip上修改的secure_file_priv参数,outfile就会导出到哪个ip上。

dbcat数据导出导入

  • dbcat源端目标端支持多种数据库之间逻辑导出导入,具体兼容数据库类型和版本,参考官方提供的对照清单。
  • 这里不赘述安装步骤,简单记录使用方法。
    dbcat官方文档使用手册
./dbcat convert    查看帮助命令
参数说明:
-H:数据库所在机器的IP地址
-P:数据库对外提供服务的监听端口
-u:dbcat连接数据库使用的用户
-p:dbcat用户连接数据库的密码
-service-name:oracle数据库的服务名
-D:被迁移的schema名称
--from:源数据库类型,默认oracle11g 即可
--to:目标数据库类型,oboracle2250 或 oboracle2270 指定其一即可
--all:所有数据库对象,如表、视图、函数、触发器、序列、同义词等
--table '\*':导出所有的表
--view '\*':导出所有的视图
--sequence '\*':导出所有的序列,sequence需要在上线当晚导出,避免current_value不一致
--synonym '\*':导出所有的同义词
--procedure '\*':导出所有的存储过程
--function '\*':导出所有的函数
--valid-only '\*':导出数据库中STATUS='VALID'的对象
--exclude-type 'TABLE':此参数和--all同步使用,表示导出除了TABLE类型以外的所有对象,值必须是大写

以oracle导出数据到OB(oracle租户)为例:
导出:导出aaaaa用户除表、索引以外所有的对象。

cd /docker/dbcat-1.8.0-SNAPSHOT/bin
./dbcat convert -H 10.1.1.1 -P 1521 -u aaaaa -p 密码 --service-name 服务名 -D 被迁移的schema名称 --from oracle11g --to oboracle2270 --all --exclude-type 'TABLE','INDEX'
##导出的文件默认存储在安装目录下的output目录下,按照时间创建目录,可以增加-f 指定文件输出目录。导出的对象按照对象类型生产相应的SQL文件。

image
导入:将序列导入OB

dbcat导出的是sql文件,直接将sql文件是OB中运行即可,如导入序列:
obclient -c -A -vv -hXXX.XXX.XX.XXX -P2883 -uSYS@AAAA#BBBBBBBBB -p"XXXXXX"  -e "source VIEW-schema.sql" > VIEW-XXXXX.log 2>&1

旁路导入

旁路导入是OB4.X版本新功能,在导入数据到数据库的时候,可以绕过SQL层,直接将数据写入到底层文件系统的data文件中,极大的提高数据导入效率。旁路导入会把所有的已有的数据都写一遍。如果原表的数据比较大,导入的数据比较少,可能不适合使用旁路导入。
目前 OceanBase 数据库支持以下语句进行旁路导入:

  • LOAD DATA /*+ direct */
  • INSERT /*+ append */ INTO SELECT

使用 LOAD DATA 语句旁路导入数据

使用限制

  • 不能两个语句同时写一个表,因为导入的过程中会先加表锁
  • 不支持在触发器(Trigger)使用。
  • 支持 lob 类型,但是性能比较差,lob 会走原来事务写入数据的路径。
  • 不能在多行事务中运行。

注意事项
为了提高数据导入速率,OceanBase 数据库在 LOAD DATA 操作中采用了并行设计。在该过程中,需要导入的数据被划分为多个子任务以并行方式执行,每个子任务都作为一个独立的事务进行处理,并且执行顺序是随机的。因此,需要注意以下事项:

  • 无法保证整体数据导入的原子性。
  • 对于无主键表来说,数据写入的顺序可能与文件中的数据顺序不一致。

语法

LOAD DATA /*+ direct(need_sort,max_error) parallel(N) */ INFILE 'file_name' ...
image

实验用例

设置secure_file_priv参数,这里不再赘述

obclient [ZHZBUSI]> LOAD DATA /*+ direct(true,0) parallel(8) */INFILE '/data/1/zhzbusi_t1.csv' INTO TABLE zhzbusi.t2 FIELDS TERMINATED BY ','  OPTIONALLY ENCLOSED BY '"'      LINES TERMINATED BY '\n'  ;
Query OK, 100010 rows affected (13.007 sec)
Records: 100010  Deleted: 0  Skipped: 0  Warnings: 0
obclient [ZHZBUSI]>

使用INSERT /*+ append */ INTO SELECT语句旁路导入数据

正常情况下需要enable_parallel_dml+parallel(N) 配合才能使用并行DML。若表开启了并行查询,可以忽略。

obclient [ZHZBUSI]> set autocommit =on;     ###使用旁路导入要开启自动提交,会话级生效。
Query OK, 0 rows affected (0.006 sec)

obclient [ZHZBUSI]> INSERT /*+ append enable_parallel_dml parallel(4) */ INTO  zhzbusi.t1  select * from zhzbusi.t2;
Query OK, 100020 rows affected (11.241 sec)
Records: 100020  Duplicates: 0  Warnings: 0

标签:逻辑,导数,--,数据库,导出,OB,导入,数据,dbcat
From: https://www.cnblogs.com/z-uncle/p/18367751

相关文章

  • 网站自动化锚文本的实现逻辑
    锚文本,‌即超链接的文本部分,‌它在网页中扮演着至关重要的角色。‌通过点击锚文本,‌用户可以方便地在网页间进行跳转,‌从而极大地提升了用户体验。‌同时,‌在搜索引擎优化(‌SEO)‌领域,‌锚文本也发挥着不可忽视的作用。‌搜索引擎会通过分析锚文本的内容,‌来判断链接页面的主......
  • Ros2 Moveit2 - Robot Model and Robot State
    RobotModelandRobotState 在本节中,我们将向您介绍用于在MoveIt中使用运动学的C++API。RobotModel和RobotState类RobotModel 和 RobotState 类是提供对机器人运动学访问权限的核心类。RobotModel 类包含所有链接和关节之间的关系,包括从URDF加载的关节限制属......
  • 机器学习:逻辑回归--下采样
    目录前言一、为什么使用下采样1.例如:2.导致:3.办法:4.结果:二、代码实现1.完整代码2.导入库3.可视化混淆矩阵4.导入数据5数据预处理6.下采样7.取出训练集和测试集8.建立模型9.进行测试总结前言        下采样(Downsampling)是一种在数据处理中减少样本......
  • StringGrid单元格绑定ComboBox、DateTimePicker或窗口传值
    一、初始化控件状态procedureTForm7.FormCreate(Sender:TObject);beginwithStringGrid1dobeginColWidths[0]:=15;Cells[1,0]:='Combobox';ColWidths[1]:=100;Cells[2,0]:='DateTimePicker';ColWidths[2]:=100;......
  • B2B进销存ERP后台管理系统的逻辑架构与设计,AxureRP原型产品经理实战案例
    模块分析:进销存系统是一种用于企业管理库存、销售和采购活动的信息系统。它的主要作用包括但不限于以下几个方面:1.库存管理实时库存跟踪:准确记录每种商品的库存数量,确保数据的实时性和准确性。库存预警:当库存量低于预设的安全水平时自动发出警报,防止缺货或积压。先进先出(......
  • obsidian使用
    前言本文主要整理在obsidian使用过程中遇到的一些不合逻辑和给使用造成困扰的地方的解决方法。将持续更新.......一个非常棒的知识管理社区:PKMer_PKMer链接的格式问题尽量不要包含空格,因为会去保存对应的图片或者附件到同名的文件夹中,在链接调用的时候,这个链接也要把空格表示......
  • 【openwrt-21.02】T750 MT7531通过KOBJECT增加网口插拔事件代码实现
    Openwrt版本NAME="OpenWrt"VERSION="21.02-SNAPSHOT"ID="openwrt"ID_LIKE="ledeopenwrt"PRETTY_NAME="OpenWrt21.02-SNAPSHOT"VERSION_ID="21.02-snapshot"HOME_URL="https://openwrt.org/"BU......
  • Acrobat DC安装报错1603,Microsoft Visual C++2013(x64)失败
    之前顺利安装过AcrobatDC,但可能因为自动更新了,导致让我重新登录才能使用,无法再次破解。于是我卸载后重新安装,发现提示MicrosoftVisualC++2013(x64)运行安装失败。我也在网上找了教程,在Adobe官网上下载了MicrosoftVisualC++2013(x64)进行自安装,安装后也可以在设置——应......
  • 【机器学习-监督学习】逻辑斯谛回归
    【作者主页】FrancekChen【专栏介绍】⌈⌈⌈Python机器学习⌋......
  • 香城档案利用 NocoBase 快速实现智能档案管理
    关于档案管理行业档案管理历史悠久,最早可追溯至周朝。周文王姬昌非常重视档案管理,他命令手下的管理者将这些文献和档案进行整理和分类,然后存放在专门的档案馆中。这些档案馆也被称为“金匮”,是古代国家的重要保管机构之一。如今,档案不仅保存历史,还在行政、法律、财务和文化等领......