• [问题求助] 【小白求助】为什么在gaussdb里面,表文件没有fsm和vm文件
    select oid,relfilenode,relname from pg_class where relname ='teacher'; oid | relfilenode | relname -------+-------------+--------- 17530 | 17542 | teacher然而在操作系统里面,只找到17542这个文件,没有像_vm,_fsm这些文件[Ruby@gauss-dis-134 base]$ find ./ -name 17542* ./17325/17542像在postgresql,openGauss,都是有_fsm,_vm的文件的
  • [问题求助] 【小白求助】为什么base目录下数据库目录名称与pg_database视图中的oid不匹配
    在postgresql或者openGauss中,数据文件目录的base目录下,名称和oid都是一一对弈对应的,如:openGauss=# select oid,datname from pg_database; oid | datname -------+------------- 1 | template1 16398 | db_web_data 15649 | template0 16400 | db_test2 16399 | db_test1 15654 | postgres 16405 | db_test123对应着文件系统的目录[omm@txy base]$ ls -ls total 120 20 drwx------ 2 omm dbgrp 20480 Oct 12 10:15 1 16 drwx------ 2 omm dbgrp 16384 Oct 12 10:15 15649 16 drwx------ 2 omm dbgrp 16384 Nov 3 23:24 15654 16 drwx------ 2 omm dbgrp 16384 Oct 16 15:44 16398 16 drwx------ 2 omm dbgrp 16384 Oct 23 17:03 16399 16 drwx------ 2 omm dbgrp 16384 Oct 23 17:03 16400 16 drwx------ 2 omm dbgrp 16384 Oct 23 17:25 16405 4 drwx------ 2 omm dbgrp 4096 Oct 12 10:14 pgsql_tmp但是在gaussdb,我发现并不是一样的gaussdb=> select oid,datname from pg_database; oid | datname -------+------------ 1 | template1 14942 | template0 17325 | db_ora 17457 | db_conn10w 17458 | db_default 14948 | postgres 16809 | test在文件目录里面反而是这些?[Ruby@gauss-dis-133 base]$ ls -lsa total 160 4 drwx------ 10 Ruby Ruby 4096 Nov 9 14:29 . 4 drwx------ 22 Ruby Ruby 4096 Nov 9 14:51 .. 16 drwx------ 2 Ruby Ruby 16384 Nov 9 08:18 1 16 drwx------ 2 Ruby Ruby 16384 Nov 9 08:18 14942 24 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 14948 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 16763 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 25211 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 25294 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 25295新建一个数据库gaussdb=> create database db_newdb; gaussdb=> select oid,datname from pg_database; oid | datname -------+------------ 1 | template1 14942 | template0 17325 | db_ora 17457 | db_conn10w 17458 | db_default 14948 | postgres 16809 | test 17521 | db_newdb很明显会发现多了33483这个目录,可是我新建这个db_newdb的oid是17521啊,为什么对不上呢?[Ruby@gauss-dis-133 base]$ ls -lsa total 160 4 drwx------ 10 Ruby Ruby 4096 Nov 9 14:29 . 4 drwx------ 22 Ruby Ruby 4096 Nov 9 14:51 .. 16 drwx------ 2 Ruby Ruby 16384 Nov 9 08:18 1 16 drwx------ 2 Ruby Ruby 16384 Nov 9 08:18 14942 24 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 14948 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 16763 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 25211 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 25294 20 drwx------ 2 Ruby Ruby 20480 Nov 9 08:18 25295 16 drwx------ 2 Ruby Ruby 16384 Nov 9 14:29 33483```
  • [问题求助] 求大佬解惑
    export class BookData{ id?: number bookName?: string bookBrief?: string bookAuthor?: string}export interface BookTable { tableName: string; sqlCreate: string; columns: string[];}import relationalStore from '@ohos.data.relationalStore'; import { BookData } from './BookData'; import CommonConstants from './CommonConstants'; import Rdb from './Rdb'; export default class BookTableTools {   private diaryTable = new Rdb(CommonConstants.DAIRY_TABLE.tableName, CommonConstants.DAIRY_TABLE.sqlCreate,     CommonConstants.DAIRY_TABLE.columns);   constructor(callback: Function = () => {   }) {     this.diaryTable.getRdbStore(callback);   }   getRdbStore(callback: Function = () => {   }) {     this.diaryTable.getRdbStore(callback);   }   insertData(object: BookData, callback: Function) {     const valueBucket: relationalStore.ValuesBucket = generateBucket(object);     this.diaryTable.insertData(valueBucket, callback);   } } function generateBucket(object: BookData): relationalStore.ValuesBucket {   let obj: relationalStore.ValuesBucket = {};   obj.bookBrief = object.bookBrief;   obj.bookName = object.bookName;   obj.bookAuthor = object.bookAuthor;   return obj; }import relationalStore from '@ohos.data.relationalStore'; import { BookTable } from './BookTable'; export default class CommonConstants {   static readonly STORE_CONFIG: relationalStore.StoreConfig = {     name: 'database.db',     securityLevel: relationalStore.SecurityLevel.S1   };   static readonly DAIRY_TABLE: BookTable = {     tableName: 'bookTable',     sqlCreate: 'CREATE TABLE IF NOT EXISTS bookTable(id INTEGER PRIMARY KEY AUTOINCREMENT, bookName TEXT, bookAuthor TEXT, bookBrief TEXT)',     columns: ['id', 'bookName', 'bookAuthor', 'bookBrief']   };   static readonly RDB_TAG = '[Debug.Rdb]';   static readonly TABLE_TAG = '[Debug.DiaryTable]';   static readonly INDEX_TAG = '[Debug.Index]'; }import relationalStore from '@ohos.data.relationalStore'; import Logger from '../common/Logger'; import CommonConstants from './CommonConstants'; export default class Rdb {   private rdbStore: relationalStore.RdbStore | null = null;   private tableName: string;   private sqlCreateTable: string;   private columns: Array<string>;   constructor(tableName: string, sqlCreateTable: string, columns: Array<string>) {     this.tableName = tableName;     this.sqlCreateTable = sqlCreateTable;     this.columns = columns;   }   getRdbStore(callback: Function = () => {   }) {     if (!callback || typeof callback === 'undefined' || callback === undefined) {       Logger.info(CommonConstants.RDB_TAG, 'getRdbStore() has no callback!');       return;     }     if (this.rdbStore !== null) {       Logger.info(CommonConstants.RDB_TAG, 'The rdbStore exists.');       callback();       return     }     let context: Context = getContext(this) as Context;     relationalStore.getRdbStore(context, CommonConstants.STORE_CONFIG, (err, rdb) => {       if (err) {         Logger.error(CommonConstants.RDB_TAG, `gerRdbStore() failed, err: ${err}`);         return;       }       this.rdbStore = rdb;       this.rdbStore.executeSql(this.sqlCreateTable);       Logger.info(CommonConstants.RDB_TAG, 'getRdbStore() finished.');       callback();     });   }   insertData(data: relationalStore.ValuesBucket, callback: Function = () => {   }) {     if (!callback || typeof callback === 'undefined' || callback === undefined) {       Logger.info(CommonConstants.RDB_TAG, 'insertData() has no callback!');       return;     }     let resFlag: boolean = false;     const valueBucket: relationalStore.ValuesBucket = data;     if (this.rdbStore) {       this.rdbStore.insert(this.tableName, valueBucket, (err, ret) => {         if (err) {           Logger.error(CommonConstants.RDB_TAG, `insertData() failed, err: ${err}`);           callback(resFlag);           return;         }         Logger.info(CommonConstants.RDB_TAG, `insertData() finished: ${ret}`);         callback(ret);       });     }   }   deleteData(predicates: relationalStore.RdbPredicates, callback: Function = () => {   }) {     if (!callback || typeof callback === 'undefined' || callback === undefined) {       Logger.info(CommonConstants.RDB_TAG, 'deleteData() has no callback!');       return;     }     let resFlag: boolean = false;     if (this.rdbStore) {       this.rdbStore.delete(predicates, (err, ret) => {         if (err) {           Logger.error(CommonConstants.RDB_TAG, `deleteData() failed, err: ${err}`);           callback(resFlag);           return;         }         Logger.info(CommonConstants.RDB_TAG, `deleteData() finished: ${ret}`);         callback(!resFlag);       });     }   }   updateData(predicates: relationalStore.RdbPredicates, data: relationalStore.ValuesBucket, callback: Function = () => {   }) {     if (!callback || typeof callback === 'undefined' || callback === undefined) {       Logger.info(CommonConstants.RDB_TAG, 'updateDate() has no callback!');       return;     }     let resFlag: boolean = false;     const valueBucket: relationalStore.ValuesBucket = data;     if (this.rdbStore) {       this.rdbStore.update(valueBucket, predicates, (err, ret) => {         if (err) {           Logger.error(CommonConstants.RDB_TAG, `updateData() failed, err: ${err}`);           callback(resFlag);           return;         }         Logger.info(CommonConstants.RDB_TAG, `updateData() finished: ${ret}`);         callback(!resFlag);       });     }   }   query(predicates: relationalStore.RdbPredicates, callback: Function = () => {   }) {     if (!callback || typeof callback === 'undefined' || callback === undefined) {       Logger.info(CommonConstants.RDB_TAG, 'query() has no callback!');       return;     }     if (this.rdbStore) {       this.rdbStore.query(predicates, this.columns, (err, resultSet) => {         if (err) {           Logger.error(CommonConstants.RDB_TAG, `query() failed, err:  ${err}`);           return;         }         Logger.info(CommonConstants.RDB_TAG, 'query() finished.');         callback(resultSet);         resultSet.close();       });     }   } }
  • [案例分享] postgresql创建表空间和database
    postgres=# create tablespace jackcao location 'D:\PostgreSQLdata\pg_tbs';警告: 表空间位置不应该位于数据目录内CREATE TABLESPACEpostgres=# create database jackcaodb tablespace jackcao;CREATE DATABASEpostgres=#
  • [案例分享] windows环境下查询端口是否被占用
    windows环境下查询端口是否被占用netstat -aon|findstr "具体的端口号",例如:netstat -aon|findstr "5432"TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING 11108TCP 127.0.0.1:65432 0.0.0.0:0 LISTENING 1092TCP [::]:5432 [::]:0 LISTENING 11108UDP 127.0.0.1:65432 *:* 1092
  • [案例分享] psql: 错误: 连接到"localhost" (::1)上的服务器,端口5432失败:致命错误: 没有用于主机 "::1"
    问题:windows11环境下,安装好PostgreSQL后,postgres超级用户尝试登录实例,报错:C:\Program Files\PostgreSQL\15\bin>.\psql -U postgrespsql: 错误: 连接到"localhost" (::1)上的服务器,端口5432失败:致命错误: 没有用于主机 "::1", 用户 "postgres", 数据库 "postgres", no encryption 的 pg_hba.conf 记录解决办法:在pg_hba.conf文件中增加一条鉴权信息host all all ::1/128 trust然后重启数据库C:\Program Files\PostgreSQL\15\bin>pg_ctl.exe -D "D:\PostgreSQLdata" restart等待服务器进程关闭 .... 完成服务器进程已经关闭等待服务器进程启动 ....2022-11-14 11:56:25.199 CST [3264] 日志: 日志输出重定向到日志收集进程2022-11-14 11:56:25.199 CST [3264] 提示: 后续的日志输出将出现在目录 "log"中.完成服务器进程已经启动再次登录:C:\Program Files\PostgreSQL\15\bin>.\psql -U postgrespsql (15.1)输入 "help" 来获取帮助信息.postgres=#postgres=# \d没有找到任何关系.postgres=# \t开启只显示元组.postgres=#问题解决。附:windows测试环境完整的pg_hba.conf文件内容# PostgreSQL Client Authentication Configuration File# ===================================================## Refer to the "Client Authentication" section in the PostgreSQL# documentation for a complete description of this file. A short# synopsis follows.## This file controls: which hosts are allowed to connect, how clients# are authenticated, which PostgreSQL user names they can use, which# databases they can access. Records take one of these forms:## local DATABASE USER METHOD [OPTIONS]# host DATABASE USER ADDRESS METHOD [OPTIONS]# hostssl DATABASE USER ADDRESS METHOD [OPTIONS]# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]# hostgssenc DATABASE USER ADDRESS METHOD [OPTIONS]# hostnogssenc DATABASE USER ADDRESS METHOD [OPTIONS]## (The uppercase items must be replaced by actual values.)## The first field is the connection type:# - "local" is a Unix-domain socket# - "host" is a TCP/IP socket (encrypted or not)# - "hostssl" is a TCP/IP socket that is SSL-encrypted# - "hostnossl" is a TCP/IP socket that is not SSL-encrypted# - "hostgssenc" is a TCP/IP socket that is GSSAPI-encrypted# - "hostnogssenc" is a TCP/IP socket that is not GSSAPI-encrypted## DATABASE can be "all", "sameuser", "samerole", "replication", a# database name, or a comma-separated list thereof. The "all"# keyword does not match "replication". Access to replication# must be enabled in a separate record (see example below).## USER can be "all", a user name, a group name prefixed with "+", or a# comma-separated list thereof. In both the DATABASE and USER fields# you can also write a file name prefixed with "@" to include names# from a separate file.## ADDRESS specifies the set of hosts the record matches. It can be a# host name, or it is made up of an IP address and a CIDR mask that is# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that# specifies the number of significant bits in the mask. A host name# that starts with a dot (.) matches a suffix of the actual host name.# Alternatively, you can write an IP address and netmask in separate# columns to specify the set of hosts. Instead of a CIDR-address, you# can write "samehost" to match any of the server's own IP addresses,# or "samenet" to match any address in any subnet that the server is# directly connected to.## METHOD can be "trust", "reject", "md5", "password", "scram-sha-256",# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert".# Note that "password" sends passwords in clear text; "md5" or# "scram-sha-256" are preferred since they send encrypted passwords.## OPTIONS are a set of options for the authentication in the format# NAME=VALUE. The available options depend on the different# authentication methods -- refer to the "Client Authentication"# section in the documentation for a list of which options are# available for which authentication methods.## Database and user names containing spaces, commas, quotes and other# special characters must be quoted. Quoting one of the keywords# "all", "sameuser", "samerole" or "replication" makes the name lose# its special character, and just match a database or username with# that name.## This file is read on server startup and when the server receives a# SIGHUP signal. If you edit the file on a running system, you have to# SIGHUP the server for the changes to take effect, run "pg_ctl reload",# or execute "SELECT pg_reload_conf()".## Put your actual configuration here# ----------------------------------## If you want to allow non-local connections, you need to add more# "host" records. In that case you will also need to make PostgreSQL# listen on a non-local interface via the listen_addresses# configuration parameter, or via the -i or -h command line switches.# TYPE DATABASE USER ADDRESS METHOD#added by Jackcaohost all all 0.0.0.0/0 trusthost all all ::1/128 trust# "local" is for Unix domain socket connections onlylocal all all scram-sha-256# IPv4 local connections:#host all all 127.0.0.1/32 scram-sha-256# IPv6 local connections:#host all all ::1/128 scram-sha-256# Allow replication connections from localhost, by a user with the# replication privilege.#local replication all scram-sha-256#host replication all 127.0.0.1/32 scram-sha-256#host replication all ::1/128 scram-sha-256
  • [问题求助] 在mybatis中使用begin...end结构去批量更新或者批量插入时,sql没问题,拿出来能在gauss中执行,但是在Java层会报错RROR: there is no parameter $1
    在mybatis中使用begin...end结构去批量更新或者批量插入时,sql没问题,拿出来能在gauss中执行,但是在Java层会报错,在查看sql,download_count 入参是Integer类型的传入的值为0PL/pgSQL function inline_code_block line 2 at SQL statement ; bad SQL grammar []; nested exception is com.huawei.gauss200.jdbc.util.PSQLException: [127.0.0.1:62289/127.0.0.1:25108] ERROR: there is no parameter $1   在位置:referenced column: download_count PL/pgSQL function inline_code_block line 2 at SQL statement
  • [问题求助] opengauss新建的 表语句 create table "TT2" (id int,name varchar(100)),pg_table_size统计表大小异常
    表语句  create table "TT2" (id int,name varchar(100)), 用pg_table_size统计表大小,提示错误找不到关系。 如果是表   create table TT2(id int,name varchar(100))就可以正常统计大小, 疑问, 对于建表语句包含 “”的,怎么统计大小。
  • [运维管理] gaussdb(DWS)更新整表后表占用空间翻倍
    更新表全列数据后表占用空间翻倍;多次insert单条数据后用pg_table_size函数查看表占用空间大小没有变化,这是为什么?怎么避免数据膨胀?
  • [技术干货] PostgreSQL插件那么多,怎样管理最高效?
    云服务环境下,如何让客户更方便地在各个PostgreSQL的版本下安装插件和扩展功能,成为云服务厂商的一个挑战。华为云RDS for PostgreSQL通过插件管理功能,很好地解决了PostgreSQL版本与插件耦合的问题,帮助用户更直观、更快速地安装管理数据库插件。1.关于PostgreSQL插件众所周知,PostgreSQL支持很多插件,其中包括第三方插件。1. PostgreSQL发展至今,华为云已经从 PostgreSQL 9.5 版本演进到 PostgreSQL 14 版本,目前共支持7个大版本,每个大版本可以支持的插件并不完全相同,因此,判断每个版本支持哪些插件变得繁琐。2. 如我们所知,部分插件在安装时,必须要修改 shared_preload_libraries 这个参数,手动修改费时费力。3. 安装插件时只有超级用户才能进行安装,而超级用户权限太大,可以执行很多高危操作,容易造成云数据库异常不可用等非常严重的影响。以上种种可以看出PostgreSQL插件安装及管理相对复杂。为了让客户更方便地安装插件,华为云开发了插件管理功能,客户只需在交互界面上点击需要安装的插件,之后的安装就交由华为云后台完成即可,简单方便,省时省力。2. RDS for PostgreSQL插件管理功能PostgreSQL支持的插件很多,而且当前数据库支持安装哪些插件,用户并不能清楚直观地看出来,华为云插件管理功能将当前数据库支持安装的插件以列表形式全部显示出来,方便用户查看安装。前面提到,PostgreSQL的部分插件安装时,需要修改参数 shared_preload_libraries,华为云插件管理功能同时支持修改该参数。修改方法有两种,可以灵活取用:方法一:通过管理参数值功能批量修改 shared_preload_libraries 参数。方法二:在安装插件前,单独修改参数值实现对应插件库的加载。3. 注意事项shared_preload_libraries参数修改后需要重启实例才能生效。对于包含只读实例的PostgreSQL服务,修改主实例参数后,只读实例的参数将自动同步修改,在重启实例时,需要同时重启只读实例。部分插件在使用时,需要同时添加对应的GUC参数才能正常使用,比如 pg_cron 插件,需要先修改参数“cron.database_name”为需要使用的数据库。部分插件安装或卸载时,会同步安装或卸载其依赖插件,以及相关依赖表。例如:postgis_sfcgal插件依赖于postgis插件,创建插件postgis_sfcgal时,postgis插件会被优先自动同步创建;同时,卸载postgis插件时,会同步卸载postgis_sfcgal插件。4. 结束语华为云RDS for PostgreSQL插件管理功能,很好地帮助用户解决了到处网罗当前版本支持哪些插件的繁琐;以及不知道如何安装插件和知道方法后安装操作复杂的问题,提升了插件安装的用户体验。技术无止境,在云数据库使用领域,还有很多需要我们优化解决的地方,例如如何帮助用户识别当前数据库中可能存在的风险,查看当前数据库中的TOP SQL,如何帮助客户更好的管理数据库和账号等等。我们后续会针对这些点进行优化,给客户带来更多的惊喜。
  • [问题求助] appCube 开发,数据格式问题
    无效的字段值: '/9j/4AAQSkZJRgABAQAA...', 格式不符合'TextArea(524288)'类型  ,字符串类型数据,存不了TextArea
  • [问题求助] RDS和云上自建数据库怎么选择?
    RDS和云上自建数据库怎么选择?
  • [技术干货] 主流数据库迁移
    1、Mysql一、mysqldump步骤:1.使用mysqldump导出自建数据库的数据2.将导出的两个文件上传到ECS实例上3.将导出的文件导入到目标RDS中4.导入成功后登录RDS实例数据库中查看数据是否正常。二、数据复制DRS步骤:(以本地mysql迁移至RDS为例)1.在“实时迁移管理”页面,单击“创建迁移任务”,进入创建迁移任务页面。2.在“迁移实例”页面,填选区域、任务名称、描述、迁移实例信息。3.在“源库及目标库”页面,迁移实例创建成功后,填选源库信息和目标库信息,单击“源库和目标库”处的“测试连接”,分别测试并确定与源库和目标库连通后,勾选协议。4.在“迁移设置”页面,设置迁移用户和迁移对象.5.在“预检查”页面,进行迁移任务预校验,校验是否可进行迁移。6.进入“参数对比”页面,进行参数对比。7.在“任务确认”页面,设置迁移任务的启动时间、任务异常通知设置、SMN主题、时延阈值、任务异常自动结束时间,并确认迁移任务信息无误后,单击“启动任务”,提交迁移任务。2. SQL server 工具1 使用SQLserver导入导出功能将本地SQL Server数据库迁移到RDS for SQL Server二、步骤:(以本地sqlserver迁移至RDS为例)1.登录控制台,选择“数据库 > 云数据库 RDS”“实例管理”页面,选择目标实例,单击实例名称,进入实例的“基本信息”页签。2.在“基本信息”页签下单击“绑定”,在弹出框选择对应的弹性IP。3.在本地安装SQL Server客户端管理工具,通过弹性IP进行连接4.通过SQL Server自带的脚本生成工具,生成ECS上的数据库结构脚本5.在SSMS客户端中打开生成的脚本SQL文件,连接到RDS对应实例上。6.完成以上步骤后通过SQL Server自带的导入导出功能完成数据迁移。工具2 DRS备份迁移步骤 cid:link_01.在“备份迁移管理”页面,单击“创建迁移任务”。在“选定备份”页面输入任务名称和描述,填选备份文件信息,单击“下一步”。在“选定目标”页面,根据所选数据库类型,配置相应的数据库信息,单击“下一步”在“信息确认”页面核对配置详情后,勾选协议,单击“下一步”。在“备份迁移管理”页面任务列表中,观察对应的恢复任务的状态为“恢复中”,恢复成功后,任务状态显示“成功”。工具3 Golden Gate在源端和目标端的数据盘建立ggs目录将OGG软件包解压到ggs目录中打开源端和目标的SQL Server代理服务并将启动类型改为自动在源端建立数据库source,目标端建立数据库target在源端和目标端SQLServer中执行对应的语句创建测试表为源端和目标端创建用户,并授权源端:并授权用户名和密码在源端source库启用cdc在源端和目标端分别创建ODBC数据源ogg配置,源端和目标端的ogg安装目录中执行ggsci。配置完成,测试迁移是否正常使用3、Oracle利用华为云云数据库RDS和分布式数据库中间件DDM完成Oracle应用迁移上云,提高访问效率,轻松应对高并发的实时交易场景一、工具1.若采用工具流至云下或云上自建oracle:Oracle Golden Gate/Data guard/Always On/数据库自带迁移工具等2.若采用公有云服务至云数据库postgre:UGO+DRS二、Oracle数据库迁移上云的流程迁移上云流程(以GoldenGate为例)Oracle GoldenGate 数据复制过程如下:利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增、删、改操作将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息把信息缓存到GoldenGate 队列文件(trail file)当中,等待目标端的复制进程读取数据。• GoldenGate 复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成2、Oracle迁移至数据仓库(GaussDB)的工具和流程使用DRS的实时同步功能将本地Oracle数据库实时迁移至华为云GaussDB(for openGauss)。通过全量+增量同步,实现源数据库Oracle和目标数据库GaussDB(for openGauss)的数据长期同步。(1)迁移至数据仓库的工具:DRS(2)迁移至数据仓库的流程:创建VPC和安全组创建GaussDB(for openGauss)实例迁移前构造数据迁移数据库(创建DRS实例,将本地Oracle上的test_info数据库迁移到GaussDB(for openGauss)实例中test_database_info数据库中)迁移后进行数据校验PS:补充业务架构和迁移原理(防止考到)1、业务架构图2、迁移原理次实践使用全量+增量同步功能,原理如下:全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整的抽取到DRS实例。启动全量迁移任务。全量迁移完成后自动进入增量同步,从全量迁移开始抽取的位点开始回放。当增量回放全部完成后,启动比对任务进行一致性检查,支持实时比对。实时比对数据一致时,可以启动业务割接若需要将Oracle数据进一步挖掘和分析,需要将数据导入到数仓中,在华为云上应该怎么完成数据导入,并说明下主要步骤? Oracle迁移至数据仓库(GaussDB)的工具和流程 (CDM/DRS/备份迁移:数据库上传OBS,恢复) 1.CDM (1)准备数据(2)创建CDM集群(3)CDM集群绑定EIP (4)创建Oracle连接和DWS连接 (5)创建数据迁移作业(6)查看迁移的数据统计 2.使用DRS的实时同步功能将本地Oracle数据库实时同步至华为云GaussDB(for openGauss)。通过全量+增量同步,实现源数据库Oracle和目标数据库GaussDB(for openGauss)的数据长期同步。 (1)迁移至数据仓库的工具:DRS (2)迁移至数据仓库的流程: a) 创建VPC和安全组 b) 创建GaussDB(for openGauss)实例 c) 迁移前构造数据 d) 迁移数据库(创建DRS实例,将本地Oracle上的test_info数据库迁移到GaussDB(for openGauss)实例中test_database_info数据库中) e) 迁移后进行数据校验 3.备份迁移 存入OBS再转储至DWS步骤:(1)开始(2)上传数据至OBS(3)创建OBS外表(4)执行导入数据(5)处理错误表(6)优化查询效率(7)结束 OBS导入导出数据时,暂不支持跨Region进行OBS数据导入导出,必须确保OBS和DWS集群在同一个Region中目标数据库应该选择什么类型和部署方式? 华为云服务的哪些特性可以同时既满足高性能,又能满足高可靠性的需求? (多实例+DDM+缓存数据库+一主一备5只读(集群部署)) 一、数据库本身特性 服务高可用:可用区内部主备、跨可用区主备 数据高可靠:在线存储数据可靠性9个9、备份存储数据可靠性11个9 数据高安全:(1)连接安全:VPC、子网、安全组、VPN、SSL(2)安全管理:管控平台严格做到不碰用户业务数据(3)数据加密:储存数据加密,秘钥严格管理 二、用分布式数据库中间件DDM 1、分布式数据库中间件(DDM):分布式关系型数据库,兼容Mysql协议,采用存储计算分离架构的模式,使得存储、计算层可以无限扩展,从而拥有海量数据高并发访问能力。 三、采用缓存数据库 采用分布式缓存服务Redis、Memcached对象缓存服务等产品,基于双机热备的高可用架构,基于主备、读写分离、集群等丰富类型的缓存类型,满足用户高并发及数据快速访问的业务需求。
  • [问题求助] GaussDB集中式主备版和分布式在架构,日常运维,日常开发方面有差异整理吗?
    GaussDB集中式主备版和分布式在架构,日常运维,日常开发方面有差异整理吗?比如在系统架构,日常运维,灾备,恢复,健康巡检,日常开发SQL,建表,存储过程,函数触发器等方面的差异,官方有整理相关性的对比文档吗?
  • [问题求助] Data studio打开显示同一用户不能打开多个实例
    打开Data Studio就显示这个官方的手册也没有答案:求大佬解答
总条数:38 到第
上滑加载中