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

news2024/11/13 8:44:25

目录

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.coloradmin.cn/o/1939465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 --- 路由

路由就是一组key-value的对应关系&#xff1b;多个路由&#xff0c;需要经过路由器的管理。 1. 基本切换效果 安装路由器 npm i vue-router /router/index.ts // import { createRouter, createWebHistory } from vue-router import Home from /components/Home.vue import…

[Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备

title: [Armbian] 部署Docker版Home Assistent&#xff0c;安装HACS并连接米家设备 date: 2024-07-21T10:51:23Z lastmod: 2024-07-21T11:40:39Z [Armbian] 部署Docker版Home Assistent&#xff0c;安装HACS并连接米家设备 官网&#xff1a;Home Assistant (home-assistant.i…

算法——滑动窗口(day6)

1004.最大连续1的个数 ||| 1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 这道题如果能转化为滑动窗口的话就会很简单&#xff0c;因为我们如果尝试去把0翻转为1再计数的话等到第2轮又得重新翻转回来&#xff0c;费时费力~ 那么我…

gihub导入gitee仓库实现仓库同步

昨天在GitHub里导入了gitee仓库&#xff0c;但是在仓库同步这里卡了很久&#xff0c;因为网上大多数都是从github导入gitee&#xff0c;然后github生成token放入实现同步&#xff0c;但是我找到一种更为方便的&#xff01; 1.首先找到项目文件下的.git文件里的config文件 2.在…

linux 下将文件安装的mysql.server服务添加到systemctl中管理

1、找到mysql 的 mysql.server/ 文件位置 find / -name mysql.server 2、编辑mysql.server脚本&#xff0c;并将mysql.server脚本添加到linux服务 3、将mysql.server 复制到etc/init.d/mysqld 目录 cp /app/db/mysql/support-files/mysql.server /etc/init.d/mysqld 4、授权…

08 B端产品业务调研的流程(1)

业务调研是掌握业务情况的有效方法。一般核心流程如下图&#xff1a; 明确调研目标&#xff1a;即调研的目标&#xff0c;解决为什么要做业务调研&#xff0c;期望解决什么问题&#xff0c;达到什么样效果&#xff0c;定向。 选取调研对象&#xff1a;涉及多角色&#xff0c;一…

【吊打面试官系列-ZooKeeper面试题】zookeeper 负载均衡和 nginx 负载均衡区别?

大家好&#xff0c;我是锋哥。今天分享关于 【zookeeper 负载均衡和 nginx 负载均衡区别? 】面试题&#xff0c;希望对大家有帮助&#xff1b; zookeeper 负载均衡和 nginx 负载均衡区别? zk 的负载均衡是可以调控&#xff0c;nginx 只是能调权重&#xff0c;其他需要可控的都…

heic文件怎么转换成jpg?上百份文件转换3秒就能搞定(办公必备)

heic和jpg是两种不同的图片格式&#xff0c;平时整理图片素材时&#xff0c;如果需要将heic转为jpg格式&#xff0c;那么可以使用相关的heic图片转换工具。 ​ 为什么要将heic文件转换成jpg&#xff1f;虽然HEIC格式具有很多优点&#xff0c;但是目前并不是所有设备和应用程序…

IAR环境下STM32+IAP方案的实现

--基于STM32F103ZET6的UART通讯实现 一、什么是IAP&#xff0c;为什么要IAP IAP即为In Application Programming(在应用中编程)&#xff0c;一般情况下&#xff0c;以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了&#xff0c;如果在设备使…

【Qt】按钮的属性相关API

目录 一. QPushButton 二. QRadioButton 按钮组 三. QCheckBox Qt中按钮的继承体系如下图 QAbstractButton是一个抽象类&#xff0c;集成了按钮的核心属性和API 按钮说明QPushButton&#xff08;普通按钮&#xff09;最常见的按钮&#xff0c;用于触发操作或者事件。可以设…

【Git命令】git rebase之合并提交记录

使用场景 在本地提交了两个commit&#xff0c;但是发现根本没有没必要分为两次&#xff0c;需要想办法把两次提交合并成一个提交&#xff1b;这个时候可以使用如下命令启动交互式变基会话&#xff1a; git rebase -i HEAD~N这里 N 是你想要重新调整的最近的提交数。 如下在本地…

27.js实现鼠标拖拽

e.offsetX是鼠标距离准确事件源的左上角距离 e.clientX是鼠标距离浏览器可视窗口左上角的距离 e.pageX是鼠标距离文档左上角的距离 /* 当鼠标点击div时开始挪动&#xff0c;当鼠标抬起&#xff0c;div静止——事件源是div 当鼠标点击后,鼠标在移动——事件源…

视频汇聚,GB28181,rtsp,rtmp,sip,webrtc,视频点播等多元异构视频融合,视频通话,视频会议交互方案

现在视频汇聚&#xff0c;视频融合和视频互动&#xff0c;是视频技术的应用方向&#xff0c;目前客户一般有很多视频的业务系统&#xff0c;如已有GB28181的监控&#xff08;GB现在是国内主流&#xff0c;大量开源接入和商用方案&#xff09;&#xff0c;rtsp设备&#xff0c;音…

Spring Boot 笔记1(启动类与控制器)

采用Spring Tool Suit 4 java jdk 17 学习启动类与控制器 创建Spring Starter Project 如果https://start.spring.io链接无效&#xff0c;可以选择https://start.aliyun.com 项目结构 启动类 启动类是程序的执行入口 例子1 Demo1Application.java package com.example.dem…

从0开始的STM32HAL库学习6

外部时钟源选择 配置环境 选择TIM2 配置红色框图中的各种配置 时钟源选择外部时钟 2 1. 预分频器 Prescaler &#xff0c;下面填0&#xff0c;不分频 2. 计数模式 CounterModer &#xff0c;计数模式选择为向上计数 3. 自动重装寄存器 CouterPeriod &#xff0c;自动重…

记录些MySQL题集(17)

一、MySQL索引为何使用B树结构&#xff1f; MySQL的索引机制中&#xff0c;默认使用BTree作为底层的数据结构&#xff0c;但为什么要选择B树呢&#xff1f;有人会说树结构是以二分法查找数据&#xff0c;所以会在很大程度上提升检索性能&#xff0c;这点确实没错&#xff0c;但…

企业邮件系统管理(一)掌握企业邮件系统管理:从Exchange Server 2010的安装到高可用性配置

&#x1f44d; 个人网站&#xff1a;【洛秋资源小站】 掌握企业邮件系统管理&#xff1a;从Exchange Server 2010的安装到高可用性配置 在当今的企业环境中&#xff0c;电子邮件系统是不可或缺的通信工具。为了确保企业邮件系统的稳定运行和高效管理&#xff0c;系统管理员需要…

WEB前端08-综合案例(动态表格)

使用 HTML、CSS 和 JavaScript 创建动态表格 在本教程中&#xff0c;我们将创建一个动态表格&#xff0c;允许用户添加行、选择项目&#xff0c;并执行批量操作&#xff0c;如全选或删除选中的行。我们将通过 HTML、CSS 和 JavaScript 来实现这一功能。让我们逐步了解每个部分…

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断 目录 分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断分类效果基本介绍程序设计参考资料 分类效果 基本介绍 Matlab实现BES-LSSVM秃鹰算法优化最…

Windows原生环境配置Tensorflow使用GPU

1 缘起 最近在折腾Transformer,选择Tensorflow作为基础框架, 距离上次应用Tensorflow跑项目已经有2年之多,同时,也换了电脑, 基础环境也没有了,开始重新搭建开发环境, 此时,Tensorflow 2.x版本已经来到了2.17.0, 上上本书里使用的还是初代Tensorflow2.0.0,发展太快了…