达梦数据库系列—29. DTS迁移ORACLE到DM

目录

1.ORACLE源端信息

2.DM目的端信息

3.DTS 迁移评估

4.数据库迁移

4.1 Oracle 源端数据库准备

4.2 目的端达梦数据库准备

初始化参数设置

兼容性参数设置

表空间规划

用户规划

创建迁移用户和表空间

4.3迁移步骤

创建迁移

配置数据源

配置迁移对象及策略

开始迁移

对象补迁

5.数据校验

统计源端对象及数据

统计目的端对象及数据

6.数据库移植完毕后收尾工作

索引补录

更新统计信息

备份

7.应用迁移


1.ORACLE源端信息

调研项

调研结果

数据库后台操作系统

Red Hat Linux

数据库架构

单机

数据库版本

Oracle 12c

待迁移数据库名

ywdb

带迁移的模式名

OT

IP/端口信息

192.168.64.129/1521

用户名/密码

xxxxx

字符集编码

AL32UTF8

需要移植的对象

表(数据量)、物化视图、触发器、存储过程、函数

迁移对象统计:

--迁移对象统计

select a.username "SCHEMA",

        (select count(1) from dba_tables b where b.owner = a.username) "TABLE_NUMS",

        ( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = 'UNIQUE' AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE 'SYS_%' AND OWNER =A.USERNAME) "INDEX_NUMS",

        (select count(distinct c.table_name)

           from dba_tab_partitions c

          where c.table_owner = a.username) "PATI_TABLE_NUMS",

        (select count(1)

           from dba_tab_cols d

          where d.OWNER = a.username

            and d.DATA_TYPE like '%LOB%') "LOB_TABLE_NUMS",

        (select round(sum(e.bytes) / 1024 / 1024 / 1024,3)

           from dba_extents e

          where exists (select 1

                   from dba_lobs f

                  where f.owner = a.username

                    and f.segment_name = e.segment_name)) "LOB_BYTES_GB",

        (select count(1) from dba_views g where g.OWNER = a.username) "VIEW_NUMS",

        (select count(1) from dba_triggers h where h.owner = a.username) "TRIGGER_NUMS",

        (select count(DISTINCT I.NAME)

           from DBA_SOURCE I

          WHERE I.OWNER = A.username

            AND I.TYPE = 'FUNCTION') "FUNC_NUMS",

        (select COUNT(1)

           FROM DBA_SEQUENCES j

          WHERE j.sequence_owner = A.username) "SEQUENCE_NUMS",

        (select count(1) from dba_synonyms where owner= A.username) "SYNONYM_NUMS",

        (select COUNT(1) FROM DBA_MVIEWS K WHERE K.owner = A.username) "MVIEW_NUMS",

        (select count(DISTINCT l.NAME)

           from DBA_SOURCE L

          WHERE L.OWNER = A.username

            AND L.TYPE = 'PROCEDURE') "PROCEDURE_NUMS",

        (select COUNT(1) FROM DBA_DB_LINKS M WHERE M.owner = A.username) "DBLINK_NUMS",

        (select max(n.DATA_LENGTH)

           from dba_tab_cols n

          where n.OWNER = a.username) "MAX_DATA_LENGTH",

        (select SUM(O.DATA_LENGTH)

           from dba_tab_cols o

          where o.OWNER = a.username

            and o.DATA_TYPE not like '%LOB%') "SUM_DATA_LENGTH"

   from dba_users a where username in ('MOCHA_DB');

--数据量

select distinct segment_type, sum(BYTES) / 1024 / 1024 / 1024, COUNT(*)

  FROM DBA_SEGMENTS

 where owner = 'MOCHA_DB'

 group by segment_type

 order by 2 desc;

--字符集编码

SELECT value FROM NLS_Database_Parameters WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

select userenv('language') from dual;

--是否以字节为单位

show parameter NLS_LENGTH_SEMANTICS

--归档保留策略

select * from v$archived_log;

--定时作业

select * from user_jobs;

--权限查询语句

--查看用户系统权限

select PRIVILEGE from dba_sys_privs WHERE GRANTEE='MOCHA_DB';

--查看用户对象权限

select * from dba_tab_privs WHERE GRANTEE='MOCHA_DB';

--查看用户角色权限

select GRANTED_ROLE from dba_role_privs where grantee='MOCHA_DB';

--表空间相关信息查询语句

--查询每个表空间的数据文件路径、实际使用大小,上限等及所属用户

select ee.username,dd.* from (select aa.*, bb.file_name, cc.NEXT_EXTENT

  from (select tbs_used_info.tablespace_name,

               tbs_used_info.alloc_mb,

               tbs_used_info.used_mb,

               tbs_used_info.max_mb,

               tbs_used_info.free_of_max_mb,

               tbs_used_info.used_of_max || '%' used_of_max_pct

          from (select a.tablespace_name,

                       round(a.bytes_alloc / 1024 / 1024) alloc_mb,

                       round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) used_mb,

                       round((a.bytes_alloc - nvl(b.bytes_free, 0)) * 100 /

                             a.maxbytes) used_of_max,

                       round((a.maxbytes - a.bytes_alloc +

                             nvl(b.bytes_free, 0)) / 1048576) free_of_max_mb,

                       round(a.maxbytes / 1048576) max_mb

                  from (select f.tablespace_name,

                               sum(f.bytes) bytes_alloc,

                               sum(decode(f.autoextensible,

                                          'YES',

                                          f.maxbytes,

                                          'NO',

                                          f.bytes)) maxbytes

                          from dba_data_files f

                         group by tablespace_name) a,

                       (select f.tablespace_name, sum(f.bytes) bytes_free

                          from dba_free_space f

                         group by tablespace_name) b

                 where a.tablespace_name = b.tablespace_name(+)) tbs_used_info

         order by tbs_used_info.used_of_max desc) aa,

       dba_data_files bb,

       dba_tablespaces cc

 where aa.tablespace_name = bb.tablespace_name

   and aa.tablespace_name = cc.tablespace_name) dd

   right join dba_users ee on dd.tablespace_name=ee.default_tablespace

   where ee.username in ('MOCHA_DB');

--查询每个用户对象所占的表空间大小

select *

  from (select owner, tablespace_name, sum(b) GB

          from (select owner,

                       t.segment_name,t.partition_name,round(bytes / 1024 / 1024/1024 , 2) b,tablespace_name

                  from dba_segments t)

         where owner in ('MOCHA_DB')

         group by owner,tablespace_name);

2.DM目的端信息

调研项

调研命令

服务器品牌/型号

dmidecode

服务器操作系统

cat /etc/os-release

内存容量

cat /proc/meminfo

CPU 型号/核数

cat /proc/cpuinfo

端口策略

是否与目的端网络、端口互通

安全策略

是否有软件、硬件相关安全限制(比如堡垒机、网闸、文件摆渡)

是否具备可视化界面

可视化提供的方式(直连、Xmanager、VNC、BMC 等)

是否安装 ODBC

odbcinst -j

3.DTS 迁移评估

选择评估模块。右键新建评估

连接到源端数据库后,可以选择不同的评估项目,点击下一步

选择需要评估的模式,点击下一步

选择评估的具体数据对象,点击下一步

迁移评估对象详情总览,点击完成

等待评估结束,查看评估结果

点击【查看评估报告】,可以查看评估概述、数据库信息、对象兼容详细、SQL 兼容详情,并且根据需要选择对应的导出报告类型

对于不兼容情况,可以点击“不兼容”,查看详情

4.数据库迁移

4.1 Oracle 源端数据库准备

正式开始移植前需要停止所有对源端数据库的操作

4.2 目的端达梦数据库准备

初始化参数设置

初始化参数建议配置如下:

数据库参数

参数值

DB_NAME(数据库名)

DAMENG(根据需求设置)

INSTANCE_NAME(实例名)

DMSERVER(根据需求设置)

PORT_NUM(端口)

5236(正式移植环境下,为保证数据库安全,不建议使用默认端口 5236)

管理员、审计员、安全员密码(安全版本特有)

不推荐使用默认密码

EXTENT_SIZE(簇大小)

32

PAGE_SIZE(页大小)

32

LOG_SIZE (日志大小)

2048M

CHARSET(字符集)

GB18030(根据实际要求设置)

CASE_SENSITIVE(大小写敏感)

敏感(根据实际要求设置)

BLANK_PAD_MODE(尾部空格填充)

部分参数说明:

(1)EXTENT_SIZE:簇大小默认为 16 页,建议设置成 32 页。

(2)CASE_SENSITIVE:默认是大小写敏感,源端为 Oracle 情况下,建议保持默认大小写敏感即可。

(3)BLANK_PAD_MODE:空格填充参数,是否要兼容 Oracle 进行设置,即在 BLANK_PAD_MODE = 0 的情况下,’A’ 和 ’A ’ 被认为是相同的值,参数为 1 的情况下,认为是两个不同的值,根据现场具体应用的需求进行设置。此为初始化参数,只能在初始化时候指定,后续不可以修改,需要提前做好评估,但是源端为 Oracle 数据库的时候,建议设置为 1。

(4)CHARSET:字符集编码,可选 GB18030、UTF-8,默认为 GB18030,如果只存储中文和字母数字,使用 GB18030 更节省空间。

(5)PAGE_SIZE:页大小默认为 8K,建议设置成 32K,一条记录的长度,受到页大小的限制,不可以超过页大小的一半,所以建议一开始规划页大小为 32K。

兼容性参数设置

参数名

含义

建议值

COMPATIBLE_MODE

是否兼容其他数据库模式。0:不兼容,1:兼容 SQL92 标准 2:兼容 ORACLE 3:兼容 MS SQL SERVER 4:兼容 MYSQL 5:兼容 DM6 6:兼容 TERADATA。

推荐值:2,重启数据库生效。

表空间规划

参照源库表空间使用情况即可,目的端则需要创建单独的业务表空间(包括数据表空间以及索引表空间)。

需要根据源端表空间使用情况进行规划目的端数据文件初始大小,避免在迁移过程中频繁自动扩展。

用户规划

参照源库用户进行创建,对于权限设置、资源限制要求等内容需要按照目的端达梦实际上线要求进行设置。

创建用户授予权限,不建议授予 DBA 角色,一般的权限,授予 resource、public、vti、soi、svi 这几个角色即可满足使用要求。

角色

权限

DBA

DM 数据库系统中对象与数据操作的最高权限集合,拥有构建数据库的全部特权,只有 DBA 才可以创建数据库结构。

RESOURCE

可以创建数据库对象,对有权限的数据库对象进行数据操纵,不可以创建数据库结构。

PUBLIC

不可以创建数据库对象,只能对有权限的数据库对象进行数据操纵。

VTI

具有系统动态视图的查询权限,VTI 默认授权给 DBA 且可转授。

SOI

具有系统表的查询权限。

SVI

具有基础 v 视图的查询权限。

设置用户的资源限制参数

资源设置项

说明

最大值

最小值

缺省值

CONNECT_IDLE_TIME

会话最大空闲时间(单位:1 分钟)。

1440(1 天)

1

无限制

FAILED_LOGIN_ATTEMPS

将引起一个账户被锁定的连续注册失败的次数。

100

1

3

PASSWORD_LIFE_TIME

一个口令在其终止前可以使用的天数。

365

1

无限制

PASSWORD_REUSE_TIME

一个口令在可以重新使用前必须经过的天数。

365

1

无限制

PASSWORD_REUSE_MAX

一个口令在可以重新使用前必须改变的次数。

32768

1

无限制

PASSWORD_LOCK_TIME

如果超过 FAILED_LOGIN_ATTEMPS 设置值,一个账户将被锁定的分钟数以天为单位的口令过期宽限时间,过期口令超过该期限后,禁止执行除修改口令以外的其他操作。

1440(1 天)

1

1

PASSWORD_GRACE_TIME

以天为单位的口令过期宽限时间,过期口令超过该期限后,禁止执行除修改口令以外的其他操作。

30

1

10

设置用户口令策略

0:无策略。
1:禁止与用户名相同。
2:口令长度不小于 9。
4:至少包含一个大写字母(A-Z)。
8:至少包含一个数字(0-9)。
16:至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。

默认PWD_POLICY=2,该参数不可以在 dm.ini 中直接修改,需要用 SP_SET_PARA_VALUE 系统过程来修改,如 SP_SET_PARA_VALUE(1, 'PWD_POLICY',8)。

创建迁移用户和表空间

要先创建好待使用的用户和这个用户的表空间

  1. DM中创建表空间

create tablespace MOCHA_TBS datafile '/dm/data/DAMENG/mocha_tbs01.dbf' size 5120 autoextend on next 128 maxsize 10240;

  1. 创建用户并授予权限

create user mocha_db identified by "mocha_db123" default tablespace mocha_tbs;

grant public,resource,soi,svi,vti to mocha_db;

4.3迁移步骤

创建迁移

配置数据源

配置迁移对象及策略

迁移对象方式及迁移策略中勾选“保持对象名大小写”

当勾选了“使用默认数据类型映射关系”后在迁移时 DTS 会将源端 Oracle 数据库中相应的数据类型采用默认的映射关系映射到目的端 DM 数据库中。如果在这里勾选了“使用默认数据类型映射关系”,后面又自定义了数据类型映射关系,DTS 会优先选择使用自定义的数据映射关系。

勾选源端待迁移的模式

通过是否勾选“创建模式”、“表”、“视图”、“存储过程/函数”、“触发器”来指定目的端 DM 是否要迁入源端 Oracle 中的这些对象

勾选源端数据库中需要迁移的模式下的数据对象

在 SQL 评估阶段不兼容的对象不需要勾选,待其它对象迁移完成后,再手动修改和导入这些不兼容的对象。

自定义对象迁移策略

点击转换后可以设置表的映射关系,包括迁移策略和列映射选项。

  1. 迁移策略

一般先迁移表,再迁移主键、索引和约束

部分选项说明:

a. 压缩:指定迁移的目的表是否按照压缩方式存储。

b. 强制聚集索引:即使源表的主键为非聚集主键,创建目的表时也会被转换为聚集主键。

c. 强制非聚集索引:即使源表的主键为聚集主键,创建目的表时也会被转换为非聚集主键。

d. 启用标志列插入:如果表上有标志列,则迁移数据时会强制向标志列插入值,以保证源和目的数据完全一致

e. 显示行数:将在迁移任务过程中,显示数据的行数。

f. 拷贝记录:如果目的表已存在,直接拷贝记录,不需要创建表。

g. 删除后拷贝记录:迁移过程中先删除已存在的目的表,再重新创建新目的表。

h. 源一次读取行数:设置从数据源中读取数据时每次读取数据的行数,该参数决定内存中缓存结果集的大小,对于数据量很大的数据源,设置该参数,可以控制内存的使用。

i. 目的一次提交行数:设置向目的数据库中每次写入数据的行数。当数据量比较大时,减小该参数的值可以减少内存的使用。但会影响迁移的速度。

j. 缓存批数:设置缓存队列的长度。调整该参数可以调整迁移过程中内存的使用。

(2)列映射选项

可根据需求修改源端迁移到目的端表的列名、数据类型、精度、小数位数、默认值、是否可空、主键、自增列、起始值、增量信息等。

开始迁移

检查迁移任务,确认迁移对象是否正确。

检查确认后点击“完成”即可开始迁移。

对象补迁

由于 Oracle 和 DM 数据库在某些语法使用上存在差异,导致某些对象可能会迁移失败,用户需要根据 DM 语法手动修改这些无法使用工具迁移的对象再导入到 DM 数据库中。

以上示例中,出现视图失败的情况,经查询是由于视图的查询字段中“percent”,是达梦中的关键字,在Oracle中不会出现报错,解决办法是把percent大写,双引号引起来,拿到达梦数据库中执行。

5.数据校验

统计源端对象及数据

1.统计各个表的数据量

(1)在源端创建辅助表 table_count 用来统计模式下所有表的数据量。

create table table_count (owner varchar(100),table_name varchar(100),cnt int);

(2)在源端执行脚本,将模式下表的数据量插入到辅助表 table_count 中

declare

v_owner VARCHAR2(100);

v_tabname VARCHAR2(100);

stmt  VARCHAR2(200);

num_rows number;

         begin

         for rec in (select owner,table_name from dba_tables where owner='MOCHA_DB' order by 1, 2)---owner根据实际情况调整

            loop

            select rec.owner,rec.table_name into v_owner,v_tabname from dual;

            stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';

            EXECUTE IMMEDIATE stmt INTO num_rows;  

            EXECUTE IMMEDIATE 'insert into table_count values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''')';

           end loop;

          end;

SELECT * FROM TABLE_COUNT;

统计各种对象的数量

Oracle端执行:

SELECT

 A.USERNAME "SCHEMA",

 (SELECT COUNT(1) FROM DBA_TABLES B WHERE B.OWNER = A.USERNAME) "TABLE_NUMS",

 ( SELECT COUNT(1) FROM DBA_VIEWS G WHERE G.OWNER = A.USERNAME ) "VIEW_NUMS",

  (SELECT COUNT(1) FROM DBA_MVIEWS K WHERE K.OWNER = A.USERNAME) MVIEW_NUMS,

 ( SELECT COUNT(1) FROM DBA_TRIGGERS H WHERE H.OWNER = A.USERNAME ) "TRIGGER_NUMS",

 ( SELECT COUNT(DISTINCT I.NAME) FROM DBA_SOURCE I WHERE I.OWNER = A.USERNAME AND I.TYPE = 'FUNCTION' ) "FUNC_NUMS",

 ( SELECT COUNT(1) FROM DBA_SEQUENCES J WHERE J.SEQUENCE_OWNER = A.USERNAME ) "SEQUENCE_NUMS",

 ( SELECT COUNT(DISTINCT L.NAME) FROM DBA_SOURCE L WHERE L.OWNER = A.USERNAME AND L.TYPE = 'PROCEDURE' ) "PROCESURE_NUMS",

 ( SELECT COUNT(1) FROM DBA_DB_LINKS M WHERE M.OWNER = A.USERNAME ) "DBLINK_NUMS",

 --( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = 'UNIQUE' AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE 'SYS_%' AND OWNER =A.USERNAME) "INDEX_NUMS",

 ( SELECT COUNT(1) FROM DBA_INDEXES I WHERE INDEX_TYPE <> 'LOB' AND OWNER = A.USERNAME) "INDEX_NUMS",

 ( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='TYPE' AND OWNER =A.USERNAME ) "TYPE_NUMS",

 ( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='PACKAGE' AND OWNER =A.USERNAME) "PKG_NUMS" FROM

 DBA_USERS A WHERE A.USERNAME IN ('MOCHA_DB');

统计目的端对象及数据

统计各个表的数据量

在目的端创建辅助表 table_count

create table table_count (owner varchar(100),table_name varchar(100),cnt int;

在目的端执行脚本,将模式下表的数据量插入到辅助表 table_count 中。

declare

v_owner VARCHAR2(100);

v_tabname VARCHAR2(100);

stmt  VARCHAR2(200);

num_rows number;

begin

for rec in (select owner,table_name from dba_tables where owner='MOCHA_DB' order by 1, 2)---owner根据实际情况调整

            loop

            select rec.owner,rec.table_name into v_owner,v_tabname from dual;

            stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';

            EXECUTE IMMEDIATE stmt INTO num_rows;  

   EXECUTE IMMEDIATE 'insert into table_count values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''')';

           end loop;

end;

统计各种对象的数量

 SELECT

 A.USERNAME  "用户名",

 (SELECT COUNT(1) FROM DBA_TABLES B WHERE B.OWNER = A.USERNAME)  "TABLE_NUMS",

 ( SELECT COUNT(1) FROM DBA_VIEWS G WHERE G.OWNER = A.USERNAME )  "VIEW_NUMS",

 ( SELECT COUNT(1) FROM DBA_TRIGGERS H WHERE H.OWNER = A.USERNAME )  "TRIGGER_NUMS",

 ( SELECT COUNT(DISTINCT I.OBJECT_NAME) FROM DBA_OBJECTS I WHERE I.OWNER = A.USERNAME AND I.OBJECT_TYPE = 'FUNCTION' )  "FUNC_NUMS",

 ( SELECT COUNT(1) FROM DBA_SEQUENCES J WHERE J.SEQUENCE_OWNER = A.USERNAME )  "SEQUENCE_NUMS",

 ( SELECT COUNT(DISTINCT L.OBJECT_NAME) FROM DBA_PROCEDURES L WHERE L.OWNER = A.USERNAME and L.OBJECT_TYPE='PROCEDURE')  "PROCEDURE_NUMS",

 ( SELECT COUNT(1) FROM DBA_DB_LINKS M WHERE M.OWNER = A.USERNAME )  "DBLINK_NUMS",

 ( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = 'UNIQUE' AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE 'INDEX335%' AND OWNER =A.USERNAME)  "INDEX_NUMS",

 ( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='TYPE' AND OWNER =A.USERNAME OR OBJECT_TYPE='CLASS' AND OWNER =A.USERNAME )  "TYPE_NUMS",

 ( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='PACKAGE' AND OWNER =A.USERNAME)  "PKG_NUMS" FROM

 DBA_USERS A WHERE A.USERNAME IN ('MOCHA_DB');

检查 DM 目的端的查询结果和 ORACLE 源端是否一致。

非分区表:

每一个表都会有一个聚簇索引

分区表:

每个分区都会有一个聚簇索引

比如,源端有两个字段做分区表,每个字段有9个分区,源端一共有18个索引分区

目标端也是两个字段做分区,每个字段9个分区,18个普通分区,还有9个聚簇索引,在dba_indexes里查一共27个索引分区。

注意含LOB字段索引的迁移,含LOB字段会有一个默认LOB类型的索引,以SYS开头,在达梦数据库中不含这个索引。

6.数据库移植完毕后收尾工作

索引补录

更新统计信息

当迁移后全库数据量较小时,可以使用全模式更新的方法:

DBMS_STATS.GATHER_SCHEMA_STATS( '模式名',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

对于需要单独收集统计信息的表,可以按照如下方式收集:

DBMS_STATS.GATHER_TABLE_STATS('模式名','表名',NULL,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

当全库数据量较大时,按模式更新统计信息比较慢,可以使用全列收集统计信息的方式进行收集:

--更新指定表的所有列的统计信息可使用 SYSDBA 或者用户自身--DROP TABLE SYSDBA.stat_history;--SELECT * FROM SYSDBA.stat_history;--创建日志记录表create table SYSDBA.stat_history (beg_time TIMESTAMP,end_time timestamp,sql_str varchar2(500),table_name varchar2(200),col_name VARCHAR2(200));

--创建存储过程CREATE OR REPLACE PROCEDURE "SYSDBA"."TABLE_STATS"

AUTHID DEFINERAS

declare --更新所有列的统计信息

v_sql varchar(4000);

v_begtime VARCHAR2(200);

v_endtime varchar2(200);CURSOR c1 IS SELECT

  SCH.NAME AS SCHEMA_NAME,

        TAB.NAME AS TABLE_NAME ,

        SYSCOL.NAME AS COLUMN_NAMEFROM

        SYSOBJECTS AS TAB,

        SYSOBJECTS AS SCH,

        SYSCOLUMNS AS SYSCOLWHERE

        SCH.ID =TAB.SCHID

    AND TAB.ID =SYSCOL.ID

    AND SCH.NAME in ('SYSDBA')   --填写实际用户名

    AND SYSCOL.TYPE$ NOT IN ('BLOB','CLOB','TEXT')

    and TAB.NAME  IN(select  TABLE_NAME  from ALL_TABLES WHERE OWNER in ('SYSDBA') and TABLE_NAME not like '%BM$_%' AND TABLE_NAME NOT LIKE 'MTAB$%');  begin

  execute immediate 'truncate table SYSDBA.STAT_HISTORY;';

  for i in c1

  loop  

  v_sql='stat 100 on '||i.SCHEMA_NAME||'."'||i.TABLE_NAME||'"("'||i.COLUMN_NAME||'");';

  begin  

  v_begtime := sysdate();  

  execute immediate v_sql;

  v_endtime := sysdate();

  insert into SYSDBA.stat_history VALUES (v_begtime,v_endtime,v_sql,i.TABLE_NAME,i.COLUMN_NAME);

  commit;

     EXCEPTION WHEN OTHERS THEN

                PRINT SQLERRM;  

  end;

  end loop;

  end;   --调用存储过程call "SYSDBA"."TABLE_STATS" ();

select * from SYSDBA.stat_history;

备份

完成整体的迁移工作后,如果为正式迁移,需要对系统做一次全库备份。

7.应用迁移

达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/383529.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP客户端connect断线重连

文章目录 TCP客户端connect断线重连1、为什么要断线重连2、实现代码 TCP客户端connect断线重连 1、为什么要断线重连 客户端会面临服务器崩溃的情况&#xff0c;我们可以试着写一个客户端重连的代码&#xff0c;模拟并理解一些客户端行为&#xff0c;比如游戏客户端等. 考虑到…

【Git】merge合并分支

两个分支未修改同一个文件的同一处位置: Git自动合并 两个分支修改了同一个文件的同一处位置:产生冲突 例&#xff1a; 在master分支修改了main同时&#xff0c;feat分支也修改了相同的文件 合并的时候就会产生冲突 解决方法: Step1- 手工修改冲突文件&#xff0c;合并冲突内容…

go语言day15 goroutine

Golang-100-Days/Day16-20(Go语言基础进阶)/day17_Go语言并发Goroutine.md at master rubyhan1314/Golang-100-Days GitHub 第2讲-调度器的由来和分析_哔哩哔哩_bilibili 一个进程最多可以创建多少个线程&#xff1f;-CSDN博客 引入协程 go语言中内置了协程goroutine&#…

星环科技携手东华软件推出一表通报送联合解决方案

随着国家金融监督管理总局“一表通”试点工作的持续推进&#xff0c;星环科技携手东华软件推出了基于星环科技分布式分析型数据库ArgoDB和大数据基础平台TDH的一表通报送联合解决方案&#xff0c;并已在多地实施落地中得到充分验证。 星环科技与东华软件作为战略合作伙伴&…

论文阅读【检测】:Facebook ECCV2020 | DETR

文章目录 论文地址AbstractMotivation模型框架详细结构小结 论文地址 DETR Abstract 提出了一种将目标检测视为直接集预测问题的新方法。简化了检测pipeline&#xff0c;有效地消除了许多手工设计的组件的需求&#xff0c;例如非最大抑制过程或锚生成&#xff0c;这些组件明…

802.11无线网络权威指南(二):无线帧结构

802.11无线网络权威指南&#xff08;二&#xff09;&#xff1a;无线帧结构 无线协议桢的三种类型无线网络帧结构完整帧格式control frameDuration/IDAddressSequence ControlQoS ControlHT Control 字段Frame Body 帧体FCS 校验域 帧细节管理帧控制帧RTS 帧CTS 帧ACK 帧格式PS…

ceph log内容解析

log内容构造 如osd的一条log 分别表示 时间戳 线程id 日志等级 子模块 内容实体 剖析源码实现 每条log都是由一个Entry构成 定义在src/log/entry.h中 Entry(short pr, short sub) :m_stamp(clock().now()), // 打印日志时的时间戳m_thread(pthread_self()), // 打印日志的线…

redis的持久化方式

目录 1. 什么是持久化&#xff1f; 2. redis实现持久化的方式 2.1 什么是RDB&#xff1f; 2.2 什么时候会触发RDB模式&#xff1f; 2.2.1 手动触发 2.2.2 自动触发 2.3 什么是Aof&#xff1f; 2.3.1 开启Aof 2.4 RBD和AOF的区别 1. 什么是持久化&#xff1f; 把内存中…

el-table列的显示与隐藏

需求&#xff1a;实现 表字段的显示与隐藏。效果图 代码实现 写在前面 首先 我部分字段有自定义的排序逻辑&#xff0c;和默认值或者 数据的计算 所以是不能简单的使用 v-for 循环column 。然后 我需要默认展示一部分字段&#xff0c;并且 当表无数据时 提示不能 显示隐藏 …

AIGC Kolors可图IP-Adapter-Plus风格参考模型使用案例

参考: https://huggingface.co/Kwai-Kolors/Kolors-IP-Adapter-Plus 代码环境安装: git clone https://github.com/Kwai-Kolors/Kolors cd Kolors conda create --name kolors python=3.8 conda activate kolors pip install -r requirements.txt python3 setup.py install…

mybatis一对多 多对多

一对一 方式一: ,在result的property属性用user.XXX 方式二:把user对象的属性用resultMap标签包含在association标签里,user的id做id标签,特点是返回值是对象的标识,而集合是collection 一对多 在user类加了个订单的集合,表示一个用户有多个订单 这接口当然是user的 分为re…

PWM信号转模拟信号转换器GP8101/GP8101M

前言&#xff1a; 各位大佬&#xff0c;听说过PAC吗&#xff1f;PAC (PWM to Analog Converter)。 今天介绍一个小众的转换芯片&#xff0c;PWM转模拟信号的&#xff0c;有一定的应用场景,单价一元多。这种芯片隔离PWM还是很容易的。 0%-100% PWM to 0-5V/0-10V SOP8封装的GP…

HarmonyOS三方库的使用

系统组件难以提供比较优秀的界面&#xff0c;需要第三方库来实现一些比较好看的界面效果 三方库的获取&#xff1a; 开源社区支持OpenHarmony-TPC 和 Openharmony三方库中心仓 先目前已经拥有各种各样的三方库&#xff0c;包括UI 图片 动画 网络 数据存储 工具类 多媒体 安全等…

redis数据类型介绍

Redis 支持多种数据类型&#xff0c;包括&#xff1a; 1.字符串&#xff08;String&#xff09;&#xff1a;最简单的数据类型&#xff0c;可以存储字符串、数字等。 2.哈希&#xff08;Hash&#xff09;&#xff1a;类似于 Map&#xff0c;可以存储键值对&#xff0c;其中键值…

Go语言编程 学习笔记整理 第2章 顺序编程 后半部分

1.流程控制 1.1 条件语句 if a < 5 { return 0 } else { return 1 } 注意&#xff1a;在有返回值的函数中&#xff0c;不允许将“最终的”return语句包含在if...else...结构中&#xff0c; 否则会编译失败&#xff01;&#xff01;&#xff01; func example(x int) i…

leetcode 2236.判断根节点是否等于字节点

1.题目要求: 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。2.思路: 直接数组前序遍历&#xff0c;然后判断后面两个…

【C++】:红黑树深度剖析 --- 手撕红黑树!

目录 前言一&#xff0c;红黑树的概念二&#xff0c;红黑树的性质三&#xff0c;红黑树节点的定义四&#xff0c;红黑树的插入操作4.1 第一步4.2 第二步4.3 插入操作的完整代码 五&#xff0c;红黑树的验证六&#xff0c;实现红黑树的完整代码五&#xff0c;红黑树与AVL树的比较…

【接口自动化_08课_Pytest+Yaml+Allure框架】

上节课一些内容 的补充 1、openxl这个方法&#xff0c;第一个元素是从1开始的&#xff0c;不是从0开始 回写的列在程序里写的是11&#xff0c;是因为是固定值 一、1. Yaml入门及应用 1、什么是yaml YAML&#xff08;/ˈjməl/&#xff0c;尾音类似camel骆驼&#xff09;是一…

单向链表

目录 思维导图&#xff1a; 学习内容&#xff1a; 1. 链表的引入 1.1 顺序表的优缺点 1.1.1 优点 1.1.2 不足 1.1.3 缺点 1.2 链表的概念 1.2.1 链式存储的线性表叫做链表 1.2.2 链表的基础概念 1.3 链表的分类 2. 单向链表 2.1 节点结构体类型 2.2 创建链表 2.…

EXCEL 排名(RANK,COUNTIFS)

1.单列排序 需求描述&#xff1a;如有下面表格&#xff0c;需要按笔试成绩整体排名。 解决步骤&#xff1a; 我们使用RANK函数即可实现单列整体排名。 Number 选择第一列。 Ref 选择这一整列&#xff08;CtrlShift向下箭头、再按F4&#xff09;。 "确定"即可计算…