将Oracle数据库迁移到达梦数据库

  公司某产品在项目现场上常用到的数据库有Oracle和达梦。

  做性能测试需要根据项目现场预埋大量的基础数据和业务数据,耗费时间、精力。故完成Oracle数据库的性能测试之后,采用直接将Oracle数据库迁入达梦数据库的方式,节约时间。


1. 环境说明

  源数据库 Oracle:V11.2.0.4

  目标数据库 DM:V8

2. 迁移工具介绍

  达梦数据库自带的DTS工具,迁移方式分为两种,如下:

  ①windows系统:安装达梦客户端,使用【DM数据迁移工具】

  ②linux系统:进入达梦安装路径的tool目录,执行./dts打开【DTS迁移工具】

  因数据库部署在阿里云服务器,本文采用linux系统环境的迁移方式进行数据迁移(执行./dts调出图形化界面前可能会存在其它问题,解决办法可参考:https://www.cnblogs.com/silgen/p/16668902.html)。

  如果是公司内网环境,建议采用达梦windows客户端【DM数据迁移工具】迁移数据。

3. 迁移前准备

3.1 创建达梦用户及表空间

# 创建表空间

[root@ufdb165 bin]# ./disql
disql V8
username:SYSDBA
password:

Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 2.881(ms)
SQL> create tablespace cwy_init datafile '/u01/dmdbms/data/DAMENG/cwy_init.dbf' size 5120 autoextend on next 1024;
executed successfully
used time: 78.379(ms). Execute id is 4.

# 创建用户并赋权
SQL> CREATE USER cwy_init IDENTIFIED by init_123456789 DEFAULT TABLESPACE cwy_init; 
SQL> grant dba to cwy_init;

3.2 调整达梦数据库参数(针对Oracle数据迁移)

Compatibility 使用效果及建议
COMPATIBLE_MODE

是否兼容其他数据库模式。
0:不兼容,1: 兼容 SQL92 标准,2:部分兼容 ORACLE,3: 部分兼容 MS SQL SERVER,4:部分兼容 MYSQL, 5:兼容 DM6,6:部分兼容Teradata。
该参数默认为 0,所以当从 Oracle移植到DM数据库时,修改值为2。

CALC_AS_DECIMAL 整数相除是否保留小数位,修改为 1
ORA_DATE_FMT

是否兼容 ORACLE 的 DATE 类型格式。0:不兼 容;1:兼容。
该参数默认为0。
注:仅当 COMPATIBLE_MODE 为 2 时有效

  修改方式,如下:

ALTER SYSTEM SET 'COMPATIBLE_MODE'=2 SPFILE;
ALTER SYSTEM SET 'CALC_AS_DECIMAL'=1 SPFILE;

  修改完成后需要重启数据库后才能生效。

# 查看修改后的参数值
select para_name,para_value from v$dm_ini where para_name = 'CALC_AS_DECIMAL' OR para_name = 'COMPATIBLE_MODE';

4. 数据迁移

 4.1 进入tool目录,执行./dts,启动迁移工具

[root@ufdb165 ~]# cd /u01/dmdbms/tool
[root@ufdb165 tool]# ./dts

 

 

 4.2 新建工程

  选择【新建工程】按钮,在弹出的新建工程页面填写相应的工程名

 4.3 新建迁移

  在工程列表的“迁移”标签右键选择新建迁移,并输入迁移名称和迁移描述。在选中新建的迁移后可以看到迁移工具的欢迎界面。

 

 

 4.4 选择迁移方式

  在欢迎界面点击下一步,然后选择数据源和目的库,选择要迁移的方式

  

 4.5 输入Oracle数据库信息

  进入连接oracle数据库界面,输入数据源(Oracle 数据库)的信息:主机名 (IP) 、端口,服务名(Oracle 默认服务名 ORCL),角色(默认),用户名和口令。

  此时Oracle要保持开启状态,并且Oracle 监听已启动。

 

 4.6 输入DM数据库信息

  进入连接DM数据库界面,输入目的数据库(DM数据库)的信息:主机名 (IP) 、端口(DM 默认端口 5236),用户名和口令

  要确保DM数据库保持开启状态。

 4.7 选择源模式和目的模式

  找到你要迁移的Oracle数据库中那个用户下的数据,再选择要导入的达梦数据库用户,然后点击【下一步】

  • 迁移的对象包括:模式及模式对象、目录、公共同义词、上下文等,根据不同数据源,支持迁移不同的对象。
  • 模式及模式对象包括:模式、表、视图、物化视图、序列、存储过程/函数、包、类、同义词以及自定义类型,根据数据源不同,支持的模式及模式对象也不同。

4.8 选择迁移对象

  此处选择要迁移的具体表格、视图、存储过程等,可根据名称具体选择。

 4.9 审阅迁移任务

  本步骤只做演示记录,为节省迁移时间,选择5个表作为迁移。

 

 4.10 完成迁移

  迁移过程中如果存在报错,请导出错误日志进行分析,判断是否对业务环境有造成不良影响。


拓展

1. 搜集全库统计信息

  执行如下sql,收集全库统计信息

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

2. 优化配置

  达梦官方给出一个自动调整内存配置的sql,具体如下:

declare
exec_mode int:= 0;   --0表示直接执行脚本修改参数,1表示不直接修改参数,打印设置参数的语句,设置为1后,必须调整v_mem_mb和v_cpus
mem_per int:= 100;   --默认所有的内存归达梦数据库使用,如实际不能100%可用,可以调整此参数
v_mem_mb int:= 16000; --根据机器实际内存调整此参数
v_cpus int:= 8;       --根据机器CPU核数调整此参数
 
tname varchar(100);
MEMORY_POOL int;
MEMORY_N_POOLS int;
MEMORY_TARGET int;
BUFFER INT;
MAX_BUFFER INT;
RECYCLE int;
CACHE_POOL_SIZE int;
BUFFER_POOLS int;
RECYCLE_POOLS int;
SORT_BUF_SIZE int;
SORT_BUF_GLOBAL_SIZE INT;
DICT_BUF_SIZE  INT;
HJ_BUF_SIZE INT;
HAGR_BUF_SIZE INT;
HJ_BUF_GLOBAL_SIZE INT;
HAGR_BUF_GLOBAL_SIZE INT;
--SORT_FLAG INT;
SORT_BLK_SIZE INT;
RLOG_POOL_SIZE INT;
TASK_THREADS INT;
IO_THR_GROUPS INT;
FAST_POOL_PAGES INT :=3000;
FAST_ROLL_PAGES INT :=1000;
CNT INT;
 
 
begin
    CNT :=0;
    if exec_mode=0 then 
      SELECT TOP 1 N_CPU,TOTAL_PHY_SIZE/1024/1024 INTO v_cpus,v_mem_mb FROM V$SYSTEMINFO;
    end if;
    
    v_mem_mb := v_mem_mb * (mem_per/100.0);
    
    v_mem_mb=round(v_mem_mb,-3);
    
    IF v_mem_mb <= 2000  THEN
      goto return_2000;
    END IF;
    
    IF v_mem_mb > 512000 THEN  
       v_mem_mb :=v_mem_mb*0.8;
    END IF;
    
    MEMORY_TARGET=round(cast(v_mem_mb * 0.12 as int),-3);
    
    TASK_THREADS :=4;
    IO_THR_GROUPS :=4;
    IF v_cpus < 8  THEN   
      TASK_THREADS :=4;
      IO_THR_GROUPS :=2;
    END IF;
    
    IF v_cpus >= 64 THEN 
       v_cpus := 64; 
       TASK_THREADS :=16;
       IO_THR_GROUPS :=8;
    END IF;
    
    
    
    
    BUFFER := round(cast(v_mem_mb * 0.4 as int),-3);
    MAX_BUFFER := BUFFER;
    
    RECYCLE :=cast(v_mem_mb * 0.04 as int);
    
    
  IF v_mem_mb < 70000 THEN
    
       with t as
        (
                select rownum rn from dual connect by level <= 100
        ) ,
        t1 as
        (
                select * from t where rn > 1 minus
                select
                        ta.rn * tb.rn
                from
                        t ta,
                        t tb
                where
                        ta.rn <= tb.rn
                    and ta.rn  > 1
                    and tb.rn  > 1
        )
      select top 1 rn into BUFFER_POOLS from t1 where rn > v_mem_mb/800 order by 1;
 
      --设置根据内存情况RECYCLE_POOLS参数
        with t as
        (
                select rownum rn from dual connect by level <= 100
        ) ,
        t1 as
        (
                select * from t where rn > 1 minus
                select
                        ta.rn * tb.rn
                from
                        t ta,
                        t tb
                where
                        ta.rn <= tb.rn
                    and ta.rn  > 1
                    and tb.rn  > 1
        )
      select top 1 rn into RECYCLE_POOLS from t1 where rn > v_mem_mb/800/3 order by 1;
      
        
    ELSE
       BUFFER_POOLS := 101;
       RECYCLE_POOLS := 41;
    END IF;
    
   
    
    --修改内存池
    IF v_mem_mb >= 16000  THEN 
       IF v_mem_mb= 16000 THEN
          MEMORY_POOL := 1500;
          SORT_BUF_GLOBAL_SIZE := 1000;
          MEMORY_N_POOLS := 3;
          CACHE_POOL_SIZE := 512;
       ELSE
          MEMORY_POOL := 2000;
          SORT_BUF_GLOBAL_SIZE := 2000;
          MEMORY_N_POOLS := 11;
          CACHE_POOL_SIZE := 1024;
       END IF;
       
       FAST_POOL_PAGES :=9999;
    --   SORT_FLAG = 0;
       SORT_BLK_SIZE=1;
       SORT_BUF_SIZE := 10;
       RLOG_POOL_SIZE := 1024;
       
       HJ_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);
       HAGR_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);
       HJ_BUF_SIZE  :=250;
       HAGR_BUF_SIZE :=250;
       RECYCLE :=round(RECYCLE,-3);
       
       IF v_mem_mb >= 64000 THEN
          FAST_POOL_PAGES :=99999;
          FAST_ROLL_PAGES :=9999;
          BUFFER :=BUFFER-3000;
          MAX_BUFFER :=BUFFER;
          CACHE_POOL_SIZE := 2048;
          RLOG_POOL_SIZE := 2048;
     --     SORT_FLAG = 1;
          SORT_BLK_SIZE=1;
          SORT_BUF_SIZE=50; 
          SORT_BUF_GLOBAL_SIZE= cast(v_mem_mb * 0.02 as int); 
          
          HJ_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.15625 as int);
          HAGR_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.04 as int);
          HJ_BUF_SIZE  :=512;
          HAGR_BUF_SIZE :=512;
          MEMORY_N_POOLS := 59;
       END IF;
       
       DICT_BUF_SIZE := 50;
       HJ_BUF_GLOBAL_SIZE :=round(HJ_BUF_GLOBAL_SIZE,-3);
       HAGR_BUF_GLOBAL_SIZE :=round(HAGR_BUF_GLOBAL_SIZE,-3);
       SORT_BUF_GLOBAL_SIZE :=round(SORT_BUF_GLOBAL_SIZE,-3);
       RECYCLE :=round(RECYCLE,-3);
    ELSE
       MEMORY_POOL :=GREAT(cast(v_mem_mb * 0.0625 as int),100);
       MEMORY_POOL :=round(MEMORY_POOL,-2);
       MEMORY_N_POOLS := 1;
       CACHE_POOL_SIZE := 200;
       RLOG_POOL_SIZE  := 256;
       SORT_BUF_SIZE := 10;
       SORT_BUF_GLOBAL_SIZE := 500;
       DICT_BUF_SIZE := 50;
    --   SORT_FLAG = 0;
       SORT_BLK_SIZE=1;
       
       HJ_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);
       HAGR_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);
       HJ_BUF_SIZE := GREAT(cast(v_mem_mb * 0.00625 as int),50);
       HAGR_BUF_SIZE :=GREAT(cast(v_mem_mb * 0.00625 as int),50);
    END IF;    
 
    
    IF exec_mode=0 THEN
        --修改cpu相关参数
        SP_SET_PARA_VALUE(2,'WORKER_THREADS',v_cpus);
        SP_SET_PARA_VALUE(2,'TASK_THREADS',TASK_THREADS);
        SP_SET_PARA_VALUE(2,'IO_THR_GROUPS',IO_THR_GROUPS);
        
        
        --修改内存池相关参数
        SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY',       mem_per);
        SP_SET_PARA_VALUE(2,'MEMORY_POOL',         MEMORY_POOL);
        SP_SET_PARA_VALUE(2,'MEMORY_N_POOLS',      MEMORY_N_POOLS);
        SP_SET_PARA_VALUE(2,'MEMORY_TARGET',       MEMORY_TARGET);
        --修改内存检测参数为1        
        SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK',       1);
        
        --非DSC环境将ENABLE_FREQROOTS设置为1,注意DM7 v$instance视图没有dsc_role字段,DM7这部分可以删掉
        if exists(select 1 from v$instance where dsc_role = 'NULL') then
           SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS',        1); 
        end if;
        
        
        --修改缓冲区相关参数
        SP_SET_PARA_VALUE(2,'BUFFER',              BUFFER);
        SP_SET_PARA_VALUE(2,'MAX_BUFFER',          MAX_BUFFER);
        SP_SET_PARA_VALUE(2,'BUFFER_POOLS',        BUFFER_POOLS);
        SP_SET_PARA_VALUE(2,'RECYCLE',               RECYCLE);    
        SP_SET_PARA_VALUE(2,'RECYCLE_POOLS',       RECYCLE_POOLS);
        
        --修改fast_pool相关参数
        SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES',     FAST_POOL_PAGES);    
        SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES',     FAST_ROLL_PAGES);
        
        --修改HASH相关参数
        SP_SET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE',  HJ_BUF_GLOBAL_SIZE);
        SP_SET_PARA_VALUE(1,'HJ_BUF_SIZE',         HJ_BUF_SIZE );
        SP_SET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE',HAGR_BUF_GLOBAL_SIZE);
        SP_SET_PARA_VALUE(1,'HAGR_BUF_SIZE',       HAGR_BUF_SIZE  );
        
        --修改排序相关参数
    --    SP_SET_PARA_VALUE(2,'SORT_FLAG',SORT_FLAG);
        SP_SET_PARA_VALUE(2,'SORT_BLK_SIZE',SORT_BLK_SIZE);
        SP_SET_PARA_VALUE(2,'SORT_BUF_SIZE',       SORT_BUF_SIZE);
        SP_SET_PARA_VALUE(2,'SORT_BUF_GLOBAL_SIZE',       SORT_BUF_GLOBAL_SIZE);
        
        --修改其他内存参数
        SP_SET_PARA_VALUE(2,'RLOG_POOL_SIZE',      RLOG_POOL_SIZE);
        SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE',     CACHE_POOL_SIZE);    
        SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE',       DICT_BUF_SIZE); 
        SP_SET_PARA_VALUE(2,'VM_POOL_TARGET',       16384); 
        SP_SET_PARA_VALUE(2,'SESS_POOL_TARGET',       16384); 
        
        
        --修改实例相关参数
        SP_SET_PARA_VALUE(2,'USE_PLN_POOL',        1); 
        SP_SET_PARA_VALUE(2,'ENABLE_MONITOR',      1); 
        SP_SET_PARA_VALUE(2,'SVR_LOG',             0); 
        SP_SET_PARA_VALUE(2,'TEMP_SIZE',           1024);
        SP_SET_PARA_VALUE(2,'TEMP_SPACE_LIMIT',    102400); 
        SP_SET_PARA_VALUE(2,'MAX_SESSIONS',        3000); 
        SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000); 
        SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER',        0); 
        SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',0); 
        
        --修改优化器相关参数
        SP_SET_PARA_VALUE(2,'OLAP_FLAG',2); 
        SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG',1);  
        SP_SET_PARA_VALUE(2,'OPTIMIZER_MODE',1); 
        SP_SET_PARA_VALUE(2,'ADAPTIVE_NPLN_FLAG',0); 
        
        --开启并行PURGE
        SP_SET_PARA_VALUE(2,'PARALLEL_PURGE_FLAG',1);
        --开启手动并行
        SP_SET_PARA_VALUE(2,'PARALLEL_POLICY',2);
        --UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。
        SP_SET_PARA_VALUE(2,'UNDO_EXTENT_NUM',16);
        --开启SQL 注入HINT功能
        SP_SET_PARA_VALUE(2,'ENABLE_INJECT_HINT',1);
        
 
    ELSE
        --修改cpu相关参数
        PRINT 'SP_SET_PARA_VALUE(2,''WORKER_THREADS'','||v_cpus||');';
        PRINT 'SP_SET_PARA_VALUE(2,''TASK_THREADS'','||TASK_THREADS||');';
        PRINT 'SP_SET_PARA_VALUE(2,''IO_THR_GROUPS'','||IO_THR_GROUPS||');';
        
        
        --修改内存池相关参数
        PRINT 'SP_SET_PARA_VALUE(2,''MAX_OS_MEMORY'',       '||mem_per||');';
        PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_POOL'',         '||MEMORY_POOL||');';
        PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_N_POOLS'',      '||MEMORY_N_POOLS||');';
        PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_TARGET'',       '||MEMORY_TARGET||');';    
        
        --修改缓冲区相关参数
        PRINT 'SP_SET_PARA_VALUE(2,''BUFFER'',              '||BUFFER||');';
        PRINT 'SP_SET_PARA_VALUE(2,''MAX_BUFFER'',          '||MAX_BUFFER||');';
        PRINT 'SP_SET_PARA_VALUE(2,''BUFFER_POOLS'',        '||BUFFER_POOLS||');';
        PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE'',               '||RECYCLE||');';
        PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE_POOLS'',       '||RECYCLE_POOLS||');';
        
        --修改fast_pool相关参数
        PRINT 'SP_SET_PARA_VALUE(2,''FAST_POOL_PAGES'',     '||FAST_POOL_PAGES||');';    
        PRINT 'SP_SET_PARA_VALUE(2,''FAST_ROLL_PAGES'',     '||FAST_ROLL_PAGES||');';
        
        --修改内存检测参数为1        
        PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_MAGIC_CHECK'',       1);';
        --非DSC环境将ENABLE_FREQROOTS设置为1,注意DM7 v$instance视图没有dsc_role字段,DM7这部分可以删掉
        if exists(select 1 from v$instance where dsc_role = 'NULL') then
        PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_FREQROOTS'',        1);'; 
        end if;
        
        --修改HASH相关参数
        PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_GLOBAL_SIZE'',  '||HJ_BUF_GLOBAL_SIZE||');';
        PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_SIZE'',        '||HJ_BUF_SIZE||');';
        PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_GLOBAL_SIZE'','||HAGR_BUF_GLOBAL_SIZE||');';
        PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_SIZE'',     '||HAGR_BUF_SIZE||');';
        
        --修改排序相关参数
    --    PRINT 'SP_SET_PARA_VALUE(2,''SORT_FLAG'','||SORT_FLAG||');';
        PRINT 'SP_SET_PARA_VALUE(2,''SORT_BLK_SIZE'','||SORT_BLK_SIZE||');';
        PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_SIZE'',       '||SORT_BUF_SIZE||');';
        PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_GLOBAL_SIZE'',       '||SORT_BUF_GLOBAL_SIZE||');';
        
        --修改其他内存参数
        PRINT 'SP_SET_PARA_VALUE(2,''RLOG_POOL_SIZE'',      '||RLOG_POOL_SIZE||');';
        PRINT 'SP_SET_PARA_VALUE(2,''CACHE_POOL_SIZE'',     '||CACHE_POOL_SIZE||');';    
        PRINT 'SP_SET_PARA_VALUE(2,''DICT_BUF_SIZE'',       '||DICT_BUF_SIZE||');'; 
        PRINT 'SP_SET_PARA_VALUE(2,''VM_POOL_TARGET'',       16384);';
        PRINT 'SP_SET_PARA_VALUE(2,''SESS_POOL_TARGET'',       16384);';
        
        
        --修改实例相关参数
        PRINT 'SP_SET_PARA_VALUE(2,''USE_PLN_POOL'',        1);';
        PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_MONITOR'',      1);'; 
        PRINT 'SP_SET_PARA_VALUE(2,''SVR_LOG'',             0);'; 
        PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SIZE'',           1024);';
        PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SPACE_LIMIT'',    102400);';
        PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSIONS'',        1500);';
        PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSION_STATEMENT'', 20000);';
        PRINT 'SP_SET_PARA_VALUE(2,''PK_WITH_CLUSTER'',        0);';
        PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_ENCRYPT'',0);';
        
        --修改优化器相关参数
        PRINT 'SP_SET_PARA_VALUE(2,''OLAP_FLAG'',2);';
        PRINT 'SP_SET_PARA_VALUE(2,''VIEW_PULLUP_FLAG'',1);';
        PRINT 'SP_SET_PARA_VALUE(2,''OPTIMIZER_MODE'',1);';
        PRINT 'SP_SET_PARA_VALUE(2,''ADAPTIVE_NPLN_FLAG'',0);';
        
        --开启并行PURGE
        PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_PURGE_FLAG'',1);';
        --开启手动并行
        PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_POLICY'',2);';
        --UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。
        PRINT 'SP_SET_PARA_VALUE(2,''UNDO_EXTENT_NUM'',16);';
        --开启SQL 注入HINT功能
        PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_INJECT_HINT'',1);';
        
        
    END IF;
    
    
    select MEMORY_TARGET+BUFFER+RECYCLE+HJ_BUF_GLOBAL_SIZE+HAGR_BUF_GLOBAL_SIZE+CACHE_POOL_SIZE
    +DICT_BUF_SIZE+SORT_BUF_GLOBAL_SIZE+RLOG_POOL_SIZE;
    exception
      when others then
         raise_application_error (-20001,substr( ' 执行失败, '||SQLCODE||' '||SQLERRM||' '||dbms_utility.format_error_backtrace  , 1, 400));
    
    <<return_2000>> null;
end;
/

 

posted @ 2022-09-07 20:03  查拉图斯特拉面条  阅读(4344)  评论(0编辑  收藏  举报