cmds在线重定义增加列

--输出信息采用缩排或换行格式化
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'PRETTY', TRUE);
--确保每个语句都带分号
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
--关闭表索引、外键等关联(后面单独生成)
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'REF_CONSTRAINTS', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS_AS_ALTER', FALSE);
--关闭存储、表空间属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'STORAGE', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'TABLESPACE', FALSE);
--关闭创建表的PCTFREE、NOCOMPRESS等属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);

Oracle数据库操作中,假如在原始表TB_HXL_USER上新增字段remark01,默认值为'A',但是由于该表的数据量比较大,直接在原表上新增字段,执行的时间特别长,最后还报出了undo空间不足的问题。而且在新增字段的过程中,其他用户还不能访问该表,出现的等待事件是library cache lock。
下面试着通过在线重定义的方法新增字段,能够避免undo空间不足以及其他用户不能访问该表的情况。

1.使用如下SQL获取原始表的DDL
设置分隔符号以及去掉表DDL中的storage属性

SELECT DBMS_METADATA.GET_DDL(OBJECT_TYPE => 'TABLE', NAME => 'INSURED') ||  
DBMS_METADATA.GET_DEPENDENT_DDL(OBJECT_TYPE => 'INDEX',BASE_OBJECT_NAME => 'INSURED') ||  
DBMS_METADATA.GET_DEPENDENT_DDL(OBJECT_TYPE => 'CONSTRAINT',BASE_OBJECT_NAME => 'INSURED' ) ||  
DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT', 'INSURED', 'CMDS')  
FROM DUAL;

begin  
Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,'SQLTERMINATOR',True);  
Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,'STORAGE',False);  
end;
/


提取表,索引,约束以及权限的语句。
Select Dbms_Metadata.Get_Ddl(Object_Type => 'TABLE', Name => 'INSURED') ||  Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'INDEX',  Base_Object_Name => 'INSURED') From Dual ;

2.将步骤1 SQL中的表名TB_HXL_USER 替换为TB_HXL_USER_MID 创建中间表

3.中间表新增字段 remark01
alter table insured_MID add remark01 varchar2(10) default 'A'; 
4.检查能否进行重定义,过程执行成功即说明可以重定义
begin
DBMS_REDEFINITION.CAN_REDEF_TABLE('cmds','insured',DBMS_REDEFINITION.CONS_USE_rowid);
end;
/


begin
DBMS_REDEFINITION.CAN_REDEF_TABLE('cmds','insured_mid',DBMS_REDEFINITION.CONS_USE_rowid);
end;
/


5.开始重定义表

注意:如原始表有未提交的事物,该过程会一直在等待,等待事件为enq: TX - row lock contention。
不能执行start_redef_table的情况下,需要将如下权限赋予用户。
grant create any table to hxl;  
grant alter any table to hxl;  
grant drop any table to hxl;  
grant lock any table to hxl;  
grant select any table to hxl;  
grant create any trigger to hxl;  
grant create any index to hxl; 

运行start_redef_table过程

SQL> BEGIN  
dbms_redefinition.start_redef_table(uname => USER,orig_table => 'insured', int_table => 'INSURED_MID', options_flag => DBMS_REDEFINITION.cons_use_rowid); 
END; 
/
如果有主键则是options_flag => DBMS_REDEFINITION.cons_use_pk,如果没有DBMS_REDEFINITION.cons_use_rowid  

6.开始同步中间表
BEGIN  
dbms_redefinition.sync_interim_table(uname => 'CMDS',orig_table => 'INSURED',int_table => 'INSURED_MID');  
END;
/


7.完成同步
注意:如原始表有未提交的事物,该过程会一直在等待
BEGIN  
dbms_redefinition.finish_redef_table(uname => 'CMDS',orig_table => 'INSURED',int_table => 'INSURED_MID');  
END;
/


8.删除中间表
drop table insured_mid;
9.修改索引名称
alter index IDX_INSURED_NO_mid rename to IDX_INSURED_NO;  
alter index IDX_INSURED_INDEX_mid rename to IDX_INSURED_INDEX; 

执行完以上的9个步骤,新增字段就创建成功了。

转载于:https://www.cnblogs.com/wangrongxin/p/6654009.html

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

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

相关文章

YOLOX-PAI: An Improved YOLOX, Stronger and Faster than YOLOv6

YOLOX-PAI:一种改进的YOLOX,比YOLOv6更强更快 原文:https://arxiv.org/pdf/2208.13040.pdf 代码:https://github.com/alibaba/EasyCV 0.Abstract We develop an all-in-one computer vision toolbox named EasyCV to facilita…

Linux Shell 重定向到文件以当前时间命名

我们经常在编译的时候,需要把编译的过程日志保留下来,这时候这个命令就非常重要了。 make |tee xxx_$(date %y%m%d%H%M%S).txt

安装一直初始化_3D max 软件安装问题大全

纵使3D虐我千百遍,我待3D如初恋!大家好,我是小文。快节奏生活的今天,好不容易有点学习的热情,打开电脑学习下,没想到被简单的软件安装问题浇灭!这不是耽误了一位伟大的世界设计师诞生的节奏吗&a…

让vim显示空格,及tab字符

1、显示 TAB 键 文件中有 TAB 键的时候,你是看不见的。要把它显示出来: :set list 现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白字符在哪里。 这样做的一个缺点是在有很多 TAB 的时候看起来很…

TCP/IP 协议栈 -- 编写UDP客户端注意细节

上节我们说到了TCP 客户端编写的主要细节&#xff0c; 本节我们来看一下UDP client的几种情况&#xff0c;测试代码如下&#xff1a; server&#xff1a; #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>…

RuntimeError: Address already in use

问题描述&#xff1a;Pytorch用多张GPU训练时&#xff0c;会报地址已被占用的错误。其实是端口号冲突了。 因此解决方法要么kill原来的进程&#xff0c;要么修改端口号。 在代码里重新配置 torch.distributed.init_process_group()dist_init_method tcp://{master_ip}:{mast…

python读取数据流_python3+pyshark读取wireshark数据包并追踪telnet数据流

一、程序说明本程序有两个要点&#xff0c;第一个要点是读取wireshark数据包(当然也可以从网卡直接捕获改个函数就行)&#xff0c;这个使用pyshark实现。pyshark是tshark的一个python封装&#xff0c;至于tshark可以认为是命令行版的wireshark&#xff0c;随wireshark一起安装。…

Windows环境下的安装gcc

Windows具有良好的界面和丰富的工具&#xff0c;所以目前linux开发的流程是&#xff0c;windows下完成编码工作&#xff0c;linux上实现编译工作。 为了提高工作效率&#xff0c;有必要在windows环境下搭建一套gcc,gdb,make环境。 MinGW就是windows下gcc的版本。 下载地址ht…

RuntimeError: NCCL error in:XXX,unhandled system error, NCCL version 2.7.8

项目场景&#xff1a; 分布式训练中遇到这个问题&#xff0c; 问题描述 大概是没有启动并行运算&#xff1f;&#xff1f;&#xff1f;&#xff08; 解决方案&#xff1a; &#xff08;1&#xff09;首先看一下服务器GPU相关信息 进入pytorch终端&#xff08;Terminal&#x…

Codeforces Round #371 (Div. 2) C. Sonya and Queries —— 二进制压缩

题目链接&#xff1a;http://codeforces.com/contest/714/problem/C C. Sonya and Queriestime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputToday Sonya learned about long integers and invited all her friends to …

一张倾斜图片进行矫正 c++_专业性文章:10分钟矫正骨盆前倾

如今&#xff0c;骨盆前倾(又称“下交叉综合征”)非常多&#xff0c;大部分是由于以下两个原因而变得越来越突出&#xff1a;经常久坐不良的运动习惯后面我们讲到纠正骨盆前倾的四个基本步骤&#xff0c;让你快速解决&#xff0c;提高生活质量知识型和系统型的内容&#xff0c;…

vue.js源码学习分享(五)

//配置项var config {/*** Option merge strategies (used in core/util/options)//选项合并策略*/optionMergeStrategies: Object.create(null),/*** Whether to suppress warnings.//是否抑制警告*/silent: false,/*** Show production mode//生产模式 tip message on boot?…

TypeError: can‘t convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory

项目场景&#xff1a; 运行程序&#xff0c;出现报错信息 TypeError: cant convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.。 Traceback (most recent call last):File "tools/demo.py", line 97, in <module>vi…

Secure CRT 自动记录日志

配置自动log操作如下&#xff1a; 1.options ---> Global Options 2、General->Default Session->Edit Default Settings 3、Terminal->Log File 设置如图上所示 点击 日志 &#xff0c;在选项框中 Log file name中填入路径和命名参数&#xff1a; E:\Log\%Y_%M_…

java 异步调用方法_乐字节Java编程之方法、调用、重载、递归

一、概述方法是指人们在实践过程中为达到一定目的和效果所采取的办法、手段和解决方案。所谓方法&#xff0c;就是解决一类问题的代码的有序组合&#xff0c;是一个功能模块。编程语言中的方法是组合在一起来执行操作语句的集合。例如&#xff0c;System.out.println 方法&…

git clone 从GitHub上下载项目到服务器上运行+创建虚拟环境

1. 基础的Linux命令 可先进入需要放置文件的路径之下 pwd # 可看当前路径 cd …/ #返回上一层目录 cd ./xx/ #进入当前路径下的下一个文件2. GitHub项目clone到服务器上运行 # 复制GitHub页面的链接&#xff0c;在服务器后台输入git clone 命令即可 git clone https://githu…

[笔记] FireDAC DataSet 导入及导出 JSON

刚好需要将 FireDAC DataSet (TFDDataSet, TFDQuery...) 转成 JSON&#xff0c;网上找了一圈&#xff0c;原来从 XE6 开始就支持这个功能了&#xff1a; 储存&#xff1a; DataSet1.SaveToFile(d:\Data.json, TFDStorageFormat.sfJSON); 载入&#xff1a; DataSet1.LoadFromFil…

recovery相关的FAQ总结

一、[FAQ12481]Recovery mode在cache/recovery目录下新建一支文件&#xff0c;重启后&#xff0c;新建文件消失了 [DESCRIPTION] 1、在recovery.cpp文件的最后新建一支文件 /cache/recovery/wetest&#xff1b;并写入内容&#xff1a;welcome to recovery mode&#xff01; 2、…

AttributeError: module ‘torch.jit‘ has no attribute ‘_script_if_tracing‘

项目场景&#xff1a; torvh使用提示 AttributeError: module torch.jit has no attribute _script_if_tracing 原因分析&#xff1a; 解决办法&#xff1a;原因是torch与torchvision版本不匹配导致的&#xff0c;重新安装torchvision即可 解决方案&#xff1a; pip install…