openGauss数据库将磁盘表转换为MOT
openGauss 数据库将磁盘表转换为 MOT
一、将磁盘表转换为 MOT 方法
磁盘表直接转换为 MOT 尚不能实现,这意味着尚不存在将基于磁盘的表转换为 MOT 的 ALTER TABLE 语句。目前 MOT 表也不支持 rename,create as select 以及 insert select(普通表)的操作。将基于磁盘的表转换为 MOT 方法,可以使用 gs_dump 工具导出数据,再使用 gs_restore 工具导入数据的方法。
步骤如下: 1.暂停应用程序活动。 2.使用 gs_dump 工具将表数据转储到磁盘的物理文件中。请确保使用 data only。 3.重命名原始基于磁盘的表。 4.创建同名同模式的 MOT。 5.使用 gs_restore 将磁盘文件的数据加载/恢复到数据库表中。 6.浏览或手动验证所有原始数据是否正确导入到新的 MOT 中。 7.恢复应用程序活动。
二、操作示例:将表 enmo.customer_t1 转换为 MOT 表
1.确认 MOT 表支持表 customer_t1 所有列的数据类型
enmo=> \d
List of relations
Schema | Name | Type | Owner | Storage
--------+--------------+-------+-------+----------------------------------
enmo | all_data | table | enmo | {orientation=row,compression=no}
enmo | customer_t1 | table | enmo | {orientation=row,compression=no}
enmo | cux_setting | table | enmo | {orientation=row,compression=no}
enmo | data_studio1 | table | enmo | {orientation=row,compression=no}
enmo | table2 | table | enmo | {orientation=row,compression=no}
public | table1 | table | enmo | {orientation=row,compression=no}
(6 rows)
enmo=> \d+ customer_t1
Table "enmo.customer_t1"
Column | Type | Modifiers | Storage | Stats target | Description
-----------------+-----------------------+-----------+----------+--------------+-------------
c_customer_sk | integer | | plain | |
c_customer_name | character varying(32) | | extended | |
Has OIDs: no
Options: orientation=row, compression=no
enmo=>
2.暂停表 customer_t1 相关的应用程序操作后,使用 gs_dump 命令导出表数据(仅数据):
$ gs_dump -U enmo -h ... -p 15400 enmo -a --table customer_t1 -F c -f /home/omm/dump/customer_t1_data_only.bak
Password:
gs_dump[port='15400'][enmo][2021-03-28 10:11:42]: dump database enmo successfully
gs_dump[port='15400'][enmo][2021-03-28 10:11:42]: total time: 8732 ms
3.重命名原表 customer_t1 为 customer
enmo=> alter table customer_t1 rename to customer;
ALTER TABLE
4.创建与原表相同数据格式的 MOT 表 customer_t1
--首先给enmo用于赋予创建和访问MOT(DDL、DML、SELECT)权限:
enmo=> GRANT USAGE ON FOREIGN SERVER mot_server TO enmo;
GRANT
--创建外部表
enmo=> CREATE foreign TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));
CREATE FOREIGN TABLE
Time: 9.408 ms
enmo=> \d+
List of relations
Schema | Name | Type | Owner | Size | Storage | Description
--------+--------------+---------------+-------+------------+----------------------------------+-------------
enmo | all_data | table | enmo | 8192 bytes | {orientation=row,compression=no} |
enmo | customer | table | enmo | 8192 bytes | {orientation=row,compression=no} |
enmo | customer_t1 | foreign table | enmo | 16 kB | |
enmo | cux_setting | table | enmo | 160 kB | {orientation=row,compression=no} |
enmo | data_studio1 | table | enmo | 8192 bytes | {orientation=row,compression=no} |
enmo | table2 | table | enmo | 8192 bytes | {orientation=row,compression=no} |
public | table1 | table | enmo | 8192 bytes | {orientation=row,compression=no} |
(7 rows)
enmo=> \d+ customer_t1
Foreign table "enmo.customer_t1"
Column | Type | Modifiers | FDW Options | Storage | Stats target | Description
-----------------+-----------------------+-----------+-------------+----------+--------------+-------------
c_customer_sk | integer | | | plain | |
c_customer_name | character varying(32) | | | extended | |
Server: mot_server
FDW permition: read/write
Has OIDs: no
enmo=> select * from customer_t1;
c_customer_sk | c_customer_name
---------------+-----------------
(0 rows)
Time: 0.782 ms
enmo=>
5.使用 gs_restore 将磁盘文件的数据加载/恢复到数据库表中
$ gs_restore -U enmo -h ... -p 15400 -d enmo /home/omm/dump/customer_t1_data_only.bak
Password:
start restore operation ...
table customer_t1 complete data imported !
Finish reading 3 SQL statements!
end restore operation ...
restore operation successful
total time: 3697 ms
6.浏览或手动验证所有原始数据是否正确导入到新的 MOT 中
enmo=> select * from customer_t1;
c_customer_sk | c_customer_name
---------------+-----------------
0 | data 0
2 | data 2
1 | new Data
(3 rows)
Time: 0.587 ms
enmo=>
openGauss数据库将磁盘表转换为MOT的更多相关文章
- MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句
查询所有数据库占用磁盘空间大小的SQL语句: ,),' MB') as data_size, concat(,),'MB') as index_size from information_schema ...
- 用java语言将数据库中的数据表转换为xml文件的通用程序(细化)
转自:https://www.cnblogs.com/wudage/p/7650685.html 总是在网络上copy别人的源代码,今天我也贴出自己今天写的源码,相信这个程序会对大家在平时的工作中需要 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- wordpress数据库优化wp_posts表 OPTIMIZE
wordpress数据库优化wp_posts表 对 MySQL 数据记录进行插入.更新或删除时,会占有不同大小的空间,记录就会变成碎片,且留下空闲的空间.就像具有碎片的磁盘,会降低性能,需要整理,因此 ...
- (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- MySQL之终端(Terminal)管理数据库、数据表、数据的基本操作(转)
MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”. 现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的 ...
- c#创建access数据库和数据表
由于在程序中使用了ADOX,所以先要在解决方案中引用之,方法如下: 解决方案资源管理器(项目名称)-->(右键)添加引用-->COM--> Microsoft ADO Ext. ...
- oracle下的数据库实例、表空间、用户及其表的区分
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...
- Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...
- Oracle数据表转换为Shapefile(二)
在上一篇博文<Oracle数据表转换为Shapefile(一)>中详细描述了一种基于Oracle数据表生产Shapefile的技术方法,本文同样以详细图解的方式描述一种更便捷的方法来完成同 ...
随机推荐
- 【Azure 事件中心】向Event Hub发送数据异常 : partitionId[null]: Sending messages timed out
问题描述 在使用Java 代码向 Azure Event Hub发送数据时,先后遇见了如下两种异常消息: 1)ERROR c.t.d.h.s.source.EventHubLogConsumer - ...
- 【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
问题描述 如图上,是App Services在Windows环境中,系统自带了MySQL In App功能.而在,Linux环境中,没有发现Mysql in App功能,是不是无法在Linux中使用呢 ...
- go程序在mac下的交叉编译
主页 微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ 背景 go语言的一大优势就是跨平台,go语言是编译型语言,与Java.C#等语 ...
- redisson分布式锁lua脚本翻译
1.获取锁 lock入参:keys[1]:自定义锁的key RLock lock = redissonClient.getLock(lockKey);argv[1]=锁的租期,默认30s argv ...
- Spring整合mybatis使用xml配置事务
自己准备开始教授Java相关的技术,Spring框架是必须让学生学习的框架之一.里面有一个事务相关的 配置,以前刚学习Spring框架的时候有接触过,只是过了很多年,很多东西都已经淡忘.再来回忆一下 ...
- 流数据库-RisingWave
参考: https://docs.risingwave.com/docs/current/architecture/ https://www.risingwavetutorial.com/docs/i ...
- HTML <nav> 标签
定义和用法 标签定义导航链接的部分. 提示和注释 提示:如果文档中有"前后"按钮,则应该把它放到 元素中. 实例 <!DOCTYPE html> <html> ...
- CSharp的lambda表达式匿名类扩展方法
c#的lamba表达式 之前已经写过一些关于委托还有事件的文章,今天就来介绍一下lambda表达式. 首先定义需要的函数以及委托 { public delegate void DoNothingDel ...
- 常用命令rsyncscp-1
常用命令:rsync/scp scp scp命令文件传输 scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能 ...
- Android 开发Day3
每次重新创建一个项目时,需要下载所对应的.gradle文件,但是你的磁盘里有相应的.gradle文件,随着你创建的Project越多,下载的gradle文件就会越多,占用内存就会越大 . 解决方案: ...