精华内容
下载资源
问答
  • 错误出现场景:用EXP/IMP迁移有LOB字段表数据,且EXP时表空间和IMP...如果只有DDL,DML等普通的非管理员权限(能执行REVOKE等,如果有那么有另外的方法解决这种错误),可以先在目标表空间创建一个空表(CREATE T...
    错误出现场景:用EXP/IMP迁移有LOB字段表数据,且EXP时表空间和IMP时表空间名字不一样。

    错误提示:IMP工具仍试图在EXP时的表空间中建表,如果恰好目标数据库中不存在此名称的表空间,那么就会给出表空间不存在的错误提示。

    如果只有DDL,DML等普通的非管理员权限(不能执行REVOKE等,如果有那么有另外的方法解决这种错误),可以先在目标表空间中创建一个空表(CREATE TABLE),再IMP导入DMP文件,但必须加上参数IGNORE=Y,如:
    imp username/pwd@orcl file=LOB.dmp fromuser=u1 touser=u2 buffer=102400 [b]ignore=y[/b]

    缺点:如果有很多表都有LOB字段,那就很费事了。
    展开全文
  • 摘要:Oracle 12c 能否2小时内在线完成一张14亿条记录的结构字段类型变更概述前面分享过Oracle大在线修改的脚本(在线重定义),经过几轮的测试发现,都存在些缺陷,效率始终不是很满意。这次把索引和统计信息拆...

    摘要:Oracle 12c 能否在2小时内在线完成一张14亿条记录的表结构字段类型变更

    概述前面分享过Oracle大表在线修改的脚本(在线重定义),经过几轮的测试发现,都存在些缺陷,效率始终不是很满意。这次把索引和统计信息拆出来后发现效率相对算是最高的。

    在线重定义的目标,是对在线业务影响最小,通过最短的锁表时间来实现表结构的变更,锁表只发生在finish_redef_table过程中,正式切换前先执行sync_interim_table过程异步同步数据,以尽可能减少业务影响。

    由于是要对客户的核心业务变更,按管理要求没办法提前执行finish_redef_table前的过程,且维护窗口时间有限,业务又不能完全停掉,才有了这次的测试。

    主要测试常见的2种场景,如下:场景1:

    复制全部依赖 - COPY_TABLE_DEPENDENTS(索引 + 约束 + 统计信息),触发器和权限这种基本没有,就没有复制。

    优点:操作方便,脚本直接把原表所有依赖全部复制过去,改后的表直接使用,不需要额外处理,适合百万或千万的表,且对效率没要求可用。

    缺点:上亿的表测试发现效率非常低。

    场景2:

    有主键的表只复制约束 - COPY_TABLE_DEPENDENTS(会复制主键和唯一索引),其它索引和统计信息等重定义完成后再开并行重建和收集,这里要补充说明一下为什么要复制约束,因为创建主键不能并行操作,等重定义完成数据转换后,相当于在普通大表上创建主键,效率非常低。

    优点:目前针对10亿以上的表测试发现效率是最高的,14亿的表全部弄完约2小时左右。

    缺点:操作过程稍微麻烦一点,别的还好。

    复制规则,如下:

    copy_indexes => 0,

    copy_triggers => FALSE,

    copy_constraints => TRUE,

    copy_privileges => FALSE,

    ignore_errors => FALSE,

    num_errors => num_errors,

    copy_statistics => FALSE);

    由于场景1的效率比较差,我这里就只列举场景2的测试过程,后续实际业务变更也是在场景2中进行,以下是整个变更过程:硬软配置一般,如下:CPU:Intel® Xeon® CPU E7-4820 v3 @ 1.90GHz(物理4个,10核心,80个逻辑cpu)

    内存:500 GB

    存储:华为某型号

    数据库软件:Oracle 12.2 Nocdb RAC,未打补丁。

    2. 我们先看一下原表数据行数,接近14亿条,人工造的,表实际大小和生产相差1倍以上。

    SQL> select /*+ parallel(40) */ count(*) from OM_OFFERING_INST_TEST;

    COUNT(*)

    ----------

    1399999996

    Elapsed: 00:00:17.39

    3. 创建临时表,有35个分区,部份省略了,主键、索引等都不要建。

    CREATE TABLE "CUSTINFO"."INT_OM_OFFERING_INST_TEST" (

    "BUSINESS_SEQ" VARCHAR2(20),

    "PROD_ID" NUMBER(20, 0),

    "OFFERING_INST_ID" NUMBER(20, 0),

    "OFFERING_ID" NUMBER(20, 0),

    "OFFERING_NAME" VARCHAR2(256),

    "OFFERING_CODE" VARCHAR2(50),

    "CUST_TYPE" VARCHAR2(20),

    "CUST_ID" NUMBER(20, 0),

    "BRAND" VARCHAR2(50),

    ......

    "RECORD_STATUS" NUMBER(3, 0) DEFAULT 1

    )

    PARTITION BY LIST ( "BE_ID" ) ( PARTITION "P_000" VALUES ( '000' ),

    PARTITION "P_001" VALUES ( '001' ),

    PARTITION "P_002" VALUES ( '002' ) ,

    PARTITION "P_100" VALUES ( '100' ) ,

    PARTITION "P_200" VALUES ( '200' ) ,

    ..........

    4. 定义参数,设置并行和行迁移

    define USERNAME = 'CUSTINFO'; --用户名

    define SOURCE_TAB = 'OM_OFFERING_INST_TEST';-- 原表名

    define INT_TAB = 'INT_OM_OFFERING_INST_TEST';-- 临时表名,需要手工提前创建

    define PARALLELS = 35; --并行数,这里设的分区数

    alter session enable parallel dml ;

    alter session force parallel dml parallel &PARALLELS;

    alter session force parallel query parallel &PARALLELS;

    alter table &INT_TAB enable row movement; --临时表开启行迁移

    5. 检查原表是否支持在线重定义,比较快,仅用了1秒不到。

    SQL> begin

    2 dbms_redefinition.can_redef_table(uname => '&USERNAME',

    3 tname => '&SOURCE_TAB',

    4 options_flag => DBMS_REDEFINITION.CONS_USE_PK);

    5 end;

    6 /

    PL/SQL procedure successfully completed

    Executed in 0.027 seconds

    6.映射字段类型,启动重定义进程,用了近10分钟,稍微有点慢。从这里开始到结束, 如果中途有错误,想要重来,需要调abort_redef_table过程取消任务。

    SQL> set timing on;

    SQL> begin

    2 DBMS_REDEFINITION.START_REDEF_TABLE(uname => '&USERNAME',

    3 orig_table => '&SOURCE_TAB',

    4 int_table => '&INT_TAB',

    5 col_mapping => 'to_number(owner_party_role_id) owner_party_role_id,

    7 to_number(offering_inst_id) offering_inst_id,

    8 to_number(subs_id) subs_id,

    9 to_number(group_id) group_id,

    10 to_number(apply_obj_id) apply_obj_id', --这里只列举了需要变更的字段类型

    11 options_flag => DBMS_REDEFINITION.CONS_USE_PK);

    12 end;

    13 /

    PL/SQL procedure successfully completed

    Executed in 576.565 seconds

    7. 复制依赖对象,这里只复制了主键约束,耗时54分钟,如果全部复制,我在测试跑了3个小时没有结果,只接Kill了。

    SQL> DECLARE

    2 num_errors PLS_INTEGER;

    3 BEGIN

    4 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(uname => '&USERNAME',

    5 orig_table => '&SOURCE_TAB',

    6 int_table => '&INT_TAB',

    7 copy_indexes => 0,

    8 copy_triggers => FALSE,

    9 copy_constraints => TRUE,

    10 copy_privileges => FALSE,

    11 ignore_errors => FALSE,

    12 num_errors => num_errors,

    13 copy_statistics => FALSE);

    14 END;

    15 /

    PL/SQL procedure successfully completed

    Executed in 3230.441 seconds

    8. 异步同步数据,耗时28秒,比较快。

    SQL> begin

    2 dbms_redefinition.sync_interim_table(uname => '&USERNAME',

    3 orig_table => '&SOURCE_TAB',

    4 int_table => '&INT_TAB');

    5 end;

    6 /

    PL/SQL procedure successfully completed

    Executed in 27.908 seconds

    9. 完成在线重定义,结束任务,耗时73秒,也是比较快。

    SQL> begin

    2 dbms_redefinition.finish_redef_table(uname => '&USERNAME',

    3 orig_table => '&SOURCE_TAB',

    4 int_table => '&INT_TAB');

    5 end;

    6 /

    PL/SQL procedure successfully completed

    Executed in 72.302 seconds

    10. 创建索引,这个分区表上的索引不多,就3个普通索引,开53个并行,平均每个耗时4分钟左右,累计13分钟。

    SQL> CREATE INDEX "CUSTINFO"."INX_OM_OFFERING_INST_TEST_CUSTID" ON "CUSTINFO"."OM_OFFERING_INST_TEST" ("CUST_ID") online parallel 35;

    Index created

    Executed in 257.138 seconds

    SQL> CREATE INDEX "CUSTINFO"."INX_OM_OFFERING_INST_TEST_GROUPID" ON "CUSTINFO"."OM_OFFERING_INST_TEST" ("GROUP_ID") online parallel 35;

    Index created

    Executed in 244.853 seconds

    SQL> CREATE INDEX "CUSTINFO"."INX_OM_OFFERING_INST_TEST_SUBSID" ON"CUSTINFO"."OM_OFFERING_INST_TEST" ("SUBS_ID") online parallel 35;

    Index created

    Executed in 261.665 seconds

    11. 收集统计信息,同样也是开35个并行,耗时4分钟左右。CASCADE => true表示收集表、列、索引等。

    SQL> exec dbms_stats.gather_table_stats(ownname => 'CUSTINFO',tabname => 'OM_OFFERING_INST_TEST',CASCADE => true,degree => 35);

    PL/SQL procedure successfully completed.

    Elapsed: 00:04:18.35

    12. 取消表、索引上的并行度,检查字段是否修改成功,删除临时表,至此整个修改过程结束,这里耗时约10分钟左右。

    --取消表上的并行

    alter table &SOURCE_TAB noparallel;

    --取消索引上的并行

    alter index INX_OM_OFFERING_INST_TEST_CUSTID noparallel;

    alter index INX_OM_OFFERING_INST_TEST_GROUPID noparallel;

    alter index INX_OM_OFFERING_INST_TEST_SUBSID noparallel;

    --删除临时表

    drop table &INT_TAB;

    总结总计执行耗时:95分钟,不到2小时,效率上暂时能接受,如果有更好的办法,求拍砖,谢谢。检查表定义 1秒

    启动重定义进程 10分钟

    复制依赖 54分钟

    异步同步数据 28秒

    执行结束任务 73秒

    创建索引 13分钟

    收集统计信息 4分钟

    取消并行检查删除临时表 10分钟

    展开全文
  • 如果一个 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的、名称与这个目标吻合的框架或者窗口的文档。如果这个指定名称或 id 的框架或者窗口不存在,浏览器将打开一个新的窗口...

    sql语句查询现在时间SELECT NOW()

    定义和用法 注意写在html中
    标签的 target 属性规定在何处打开链接文档。
    如果在一个
    标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的、名称与这个目标吻合的框架或者窗口中的文档。如果这个指定名称或 id 的框架或者窗口不存在,浏览器将打开一个新的窗口,给这个窗口一个指定的标记,然后将新的文档载入那个窗口。从此以后,超链接文档就可以指向这个新的窗口。
    打开新窗口
    被指向的超链接使得创建高效的浏览工具变得很容易。例如,一个简单的内容文档的列表,可以将文档重定向到一个单独的窗口:

    导航栏框架: 注意写在html中

    Table of Contents

    HTML 标签
    定义和用法
    frameset 元素可定义一个框架集。它被用来组织多个窗口(框架)。每个框架存有独立的文档。在其最简单的应用中,frameset 元素仅仅会规定在框架集中存在多少列或多少行。您必须使用 cols 或 rows 属性。
    实例
    简单的三框架页面:

    练习1. JetBrains WebStorm 2018.3.2 x64快捷键整理 代码格式化整理Ctrl+Alt+L 代码的向前平移:选中要平移的代码:Shift+Tab 代码向后平移:Tab即可

    Eclipse快捷键整理
    快速生成代码: alt+shift+s
    ctrl+shift+x 转为大写 ctrl+shift+y 转为小写
    javaScript 中代码的注释: Ctrl +Shift +C
    复制上面一行代码: ctrl+alt+向下箭头
    快速定位类: ctrl+shift+t
    Ctrl+F 寻找
    Ctrl+H 替换

    生成注解的方法
    Shift + Alt+j
    结果显示
    /

    • @author 幻听

    /*

    生成tostring方法Ctrl+Alt+S+S
    @Override
    public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append(“User [id=”).append(id).append(", userName=")
    .append(userName).append(", orders=")
    .append(orders).append("]");
    return builder.toString();
    }
    生成构造方法供参考Ctrl+shift+v
    ctrl+shift+c
    或者alt

    搜狗输入法查找符号 ctrl+shift+Z
    在这里插入图片描述

    在这里插入图片描述
    ctrl+F搜索内容
    在这里插入图片描述

    退出系统时跳出frame框架
    target属性值的含义:
    _blank:新建窗口、_self:相同窗口、_parent:父窗口、_top:首窗口
    简单的一个小例子

    常规的退出系统无非就是两种方式,一个是点击超链接,页面跳转到登录页面,另一个就是点击页面元素,触发js事件,使当前页面跳转。
    1、利用超链接属性中target="_parent"。
    在超链接中加入target属性 (或者)退出系统 就可以了,他的原理相当于目标页面替换当前的父窗体,而不是当前操作的窗体。
    target属性值的含义:
    _blank:新建窗口、_self:相同窗口、_parent:父窗口、_top:首窗口
    2、利用js
    1)<a href="#" οnclick=top.location.replace(“logout.action”)>退出
    在logout()函数中将session清空,返回的登录页面就会全屏显示登录页面.他的原理相当于在请求发送前,把请求的页面替换成当前页面最顶级的frame,这样返回的页面理所应当的会替换整个页面的内容。
    2)在login.jsp中加入脚本

    function window.onload()
    {
    if(window.parent.length>0)
    window.parent.location=location;
    }

    当登录页面在frame中加载过程中,会触发这段js代码,从而判断是不是顶级窗体而自动跳转。
    这两种方法的区别就在于一个是提交请求之前对请求进行处理,另外一个是请求回来以后进行处理。
    注意:视图—导航窗格
    在这里插入图片描述

    自己电脑设置多标签模式
    菜单----设置—标签设置—打开网页采用—勾选多标签模式即可
    效果图
    在这里插入图片描述

    展开全文
  • web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码。...

    web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码。下面我以mysql数据库为例分情况一一说明:
    1.如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:

    INSERT INTO 目标表 SELECT * FROM 来源表;
    
    insert into insertTest select * from insertTest2;
    

    复制代码

    2.如果只希望导入指定字段,可以用这种方法:

    INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;(这里的话字段必须保持一致)
    
    insert into insertTest2(id) select id from insertTest2;
    

    复制代码

    3.如果您需要只导入目标表中不存在的记录,可以使用这种方法:
       INSERT INTO 目标表
    (字段1, 字段2, …)
    SELECT 字段1, 字段2, …
    FROM 来源表
    WHERE not exists (select * from 目标表
    where 目标表.比较字段 = 来源表.比较字段);
    1>.插入多条记录:

    insert into insertTest2
    (id,name)
    select id,name
    from insertTest
    where not exists (select * from insertTest2
    where insertTest2.id=insertTest.id);
    

    2>.插入一条记录:

    insert into insertTest    
    (id, name)    
    SELECT 100, 'liudehua'    
    FROM dual    
    WHERE not exists (select * from insertTest    
    where insertTest.id = 100);
    

    insert into insertTest select * from insertTest2;
    

    在phpmyadmin上十分有用


    http://www.jb51.net/article/36820.htm

    $row=$mysql->query("insert into `user_deleted` select * from `user_detail` WHERE `uid` ={$uid};");
    


    展开全文
  • web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码。...
  • web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码。...
  • web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量...
  • Oracle的Dual

    2018-05-12 14:04:00
    是一张只有一个字段,一行记录的表,任何用户均可读取,常用没有目标表的select语句块。 2、习惯上,我们称之为“伪表”。因为他存储主体数据。 3、他的存在,是为了操作上的方便。因为select都是要有特定...
  • web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码。...
  • KETTLE 使用教程文章标签: KETTLEkettle使用教程Kettle的建立数据库连接、使用kettle进行简单的全量对比插入更新:kettle会自动对比用户设置的对比字段,若目标表不存在字段,则新插入该条记录。若存在,则更新。...
  • 在日常开发中,需要从数据库中批量导入所有数据,同时这些数据可能在目标表中存在,也可能不存在。因为数据量还比较大,如果一条一条在业务代码里判断然后插入或者更新,非常非常慢。 这个时候,我们可以对判断...
  • 主要目标是理解什么是计算字段,如何创建计算字段,...计算字段不实际存在于数据库表中,而是运行时SELECT语句内创建的。 【字段: 其含义与列相同,字段这个术语通常计算字段这种场合下使用。】 只有数据库知道SEL
  •  有两个数据一开始只打算用来计算时查询,没打算放到目标单据体参照字段.后来改细节问题后放到目标单据做参照字段.  发现问题:做报表的时候用橡皮檫加查询条件,找到我想要的参照,后发现单据节点也打...
  • imp 导入时报表空间不存在

    千次阅读 2016-05-06 17:31:12
    问题: 从源库导出user 用户的一个,这...导入时会报表空间不存在的信息,解决办法是 在目标创建与源库一样的空间data1 ,然后可以进行导入,再将数据move 到data2 ,最后再删除data1 空间及数据文件。
  • 1,你建立了一个自定义模型,但是有一些字段,比如图片字段,依然表中(这种时候,你自己建立模型中最好不要重复包含主表中字段了,否则容易引起混乱),这样,那么你的主要目标在附件表中: 解决方法: ...
  • 问题源于一个简单的目标,vc++程序能够判定一个数据库的某个字段是否是自增长的,这样可以基于与类绑定的编程处理insert,update时避开这类字段. 但自增字段可能用于查询,所以存在于类的绑定关系. 1....
  • 1,你建立了一个自定义模型,但是有一些字段,比如图片字段,依然表中(这种时候,你自己建立模型中最好不要重复包含主表中字段了,否则容易引起混乱),这样,那么你的主要目标在附件表中: 解决方法: ...
  • SQL依据旧生成新

    2018-01-08 07:25:42
    1.SELECT INTO FROM语句 ...复制代码要求:目标表Table2不存在,因为插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2。 注:MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INT...
  • SuperMap iDesktop 产品中,普通数据集右键查看属性表,无法编辑行。是因为要直接属性表中添加行,只能是纯属性...注:保留新增字段用来设置源数据中存在而目标数据中不存在字段是否保留。 ②编辑的数据集...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 194
精华内容 77
关键字:

在目标表中字段不存在