---
title: "创建和更新心跳表 | OceanBase 文档中心"
description: 创建和更新心跳表 本文为您介绍 MySQL 数据库、DB2 LUW 数据库和 PostgreSQL 数据库作为源端进行数据迁移时，如何创建和更新心跳表。 背景信息 您在新建 MySQL、DB2 LUW 或 PostgreSQL 数据源时，如果勾选了 增量同步时，允许 OMS 自动向该实例写入心跳数据，以解决源端在无业…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.0.2 企业版

# 创建和更新心跳表

更新时间：2026-04-14 15:35:47

本文为您介绍 MySQL 数据库、DB2 LUW 数据库和 PostgreSQL 数据库作为源端进行数据迁移时，如何创建和更新心跳表。

## 背景信息

您在新建 MySQL、DB2 LUW 或 PostgreSQL 数据源时，如果勾选了 **增量同步时，允许 OMS 自动向该实例写入心跳数据，以解决源端在无业务写入场景下的高延时问题**，并且填写的数据库用户具备创建表、写表的权限，OceanBase 迁移服务（OceanBase Migration Service，OMS）会向对应的数据库中创建心跳表，并以 5 秒/次的频率更新心跳表。

如果您不需要 OMS 自动创建并更新的心跳表，可以自行创建库表，并配置 crontab 任务，定时对源端数据库执行 UPDATE 操作。

## 前提条件

已赋予源端数据库账号创建数据库或者 Schema，以及读写心跳表的权限。

> **说明：**
>
>  
>
> DB2 LUW 数据库默认具备所需权限。

### MySQL 数据库

- 赋予数据库用户创建表的权限

  ```sql
  GRANT CREATE ON drc.heartbeat TO '<user_name>';

  ```
 - 赋予数据库用户写表的权限

  ```sql
  GRANT INSERT, UPDATE, DELETE ON drc.heartbeat TO '<user_name>';

  ```

### PostgreSQL 数据库

- 赋予数据库用户创建表的权限

  ```sql
  GRANT CREATE ON SCHEMA public TO '<user_name>';

  ```sql
  GRANT INSERT, UPDATE, DELETE ON oms_postgres_heartbeat TO '<user_name>';

  ```

## MySQL 数据库创建和更新心跳表

- 创建心跳表

  ```sql
  CREATE DATABASE IF NOT EXISTS drc;
  CREATE TABLE IF NOT EXISTS drc.heartbeat (`id` smallint(6) NOT NULL DEFAULT 1,`ts` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

  ```
 - 插入数据

  ```sql
  INSERT INTO drc.heartbeat VALUES (1,0) ON DUPLICATE KEY UPDATE ts=0;

  ```
 - 更新数据

  ```sql
  UPDATE drc.heartbeat SET ts=%d WHERE id=1;

  ```

## DB2 LUW 数据库创建和更新心跳表

- 创建心跳表

  ```sql
  CREATE TABLE IF NOT EXISTS drc.heartbeat (id SMALLINT NOT NULL DEFAULT 1, ts INTEGER DEFAULT NULL, PRIMARY KEY (id)) DATA CAPTURE CHANGES;

  ```sql
  MERGE INTO drc.heartbeat AS ht USING(
    SELECT * FROM TABLE (
      VALUES(1,0)
    )
  ) AS vt(id,ts) ON (ht.id=vt.id)
  WHEN MATCHED THEN
    UPDATE SET ts=vt.ts
  WHEN NOT MATCHED THEN
  INSERT (id, ts) VALUES(vt.id,vt.ts);

  ```sql
  UPDATE drc.heartbeat SET ts=%d WHERE id=1

  ```

## PostgreSQL 数据库创建和更新心跳表

- 创建心跳表

  ```sql
  CREATE TABLE IF NOT EXISTS public.oms_postgres_heartbeat (id int NOT NULL DEFAULT 1, ts int DEFAULT NULL, PRIMARY KEY (id));

  ```sql
  INSERT INTO public.oms_postgres_heartbeat VALUES (1,0) ON CONFLICT (id) DO UPDATE SET ts=0;

  ```sql
  UPDATE public.oms_postgres_heartbeat SET ts=%d WHERE id=1;

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
