oracle 9i在线重定义,在oracle 9i下在线重定义表

2023-11-12

9i提供了联机重定义表的方法,可以让你在基本不影响原表的DML情况下修改表结构。

实际上,联机重定义表并不是完全的联机重定义,在最后交换表名的时候会短暂地锁定原表和中间表,但这个过程很短暂,相对于传统方法来说,这是一个进步。

/*

9i提供了联机重定义表的方法,可以让你在基本不影响原表的DML情况下修改表结构。

实际上,联机重定义表并不是完全的联机重定义,在最后交换表名的时候会短暂地锁定原表和中间表,但这个过程很短暂,相对于传统方法来说,这是一个进步。

利用联机重定义功能可以在线实现如下功能:

修改表的存储参数

移动该表到相同 Schema 下的 不同表空间内

添加并行查询支持

添加或删除分区

重建表以便减少碎片

在普通表和索引组织(index-organized)表之间互相转换

添加或删除列,重新定义列的数据类型

添加/删除索引

做一个从普通表到分区表之间的转换操作.

修改约束

需要的权限:

CREATE ANY TABLE

ALTER ANY TABLE

DROP ANY TABLE

LOCK ANY TABLE

SELECT ANY TABLE

限制条件:

·你必须有足以维护两份表格拷贝的空间。

·你不能更改主键栏。

·表格必须有主键。

·必须在同一个大纲中进行表格重定义。

·在重定义操作完成之前,你不能对新加栏加以NOT NULL约束。

·表格不能包含LONG、BFILE以及用户类型(UDT)。

·不能重定义链表(clustered tables)。

·不能在SYS和SYSTEM大纲中重定义表格。

·不能用具体化视图日志(materialized view logs)来重定义表格;不能重定义含有具体化视图的表格。

·不能在重定义过程中进行横向分集(horizontal subsetting)。

基本步骤如下

第一步:利用dbms_redefinition.can_redef_table过程检查该表是否能被在线重定义。

如果这一步不抛出异常,说明该表是可以在线重定义的。

第二步:创建一个与原表类似的空表结构,用于重定义该表,这里叫做是中间表

在这里你可以定义表的新列名、新数据类型、列顺序、存储参数等。注意,为了提高效率,在这一步不要建立索引和约束。

第三步:用dbms_redefinition.start_redef_table procedure定义重构开始

这个过程将会自动执行如下操作:

1、插入所有行从原有表到中间表

2、创建MLOG$_xxx快照与快照日志,临时存储DML语句直到完成。

该过程可以输入如下参数信息

. 用户的名称

. 原表的名称

. 中间表的名称

. 原表和中间表的列的映射关系。

这个参数默认值是null,表示原表和中间表的字段按原表的顺序一一对应。但如果需要在中间表添加、删除字段,修改字段数据类型、改变字段顺序,则必须要把这个参数填写好。不同字段间用都好分隔。

作映射时,对应的字段先写原表字段,然后再写中间表的字段。

如添加字段,并改变列的数据类型:

原表 a(id int ,name varchar2(10))

中间表b(id number,new_name varchar2(10),sex int)

exec dbms_redefinition.start_redef_table procedure('suk','a','b','name new_name,id id')

或者exec dbms_redefinition.start_redef_table procedure('suk','a','b','id id,name new_name')

再如 同时添加、删除字段:

原表 a(id int ,name varchar2(10))

中间表b(id number,sex int)

exec dbms_redefinition.start_redef_table procedure('suk','a','b','id id')

映射时可以使用一些简单函数,如

exec dbms_redefinition.start_redef_table procedure('suk','a','b','to_char(id) id')

所以,如果数据量很大的话,这一步会比较慢。

第四步:调用DBMS_REDEFINITION.SYNC_INTERIM_TABLE过程同步原表与中间表的数据

这一步不是必须的,如果省略这一步,在finish_redef_table也会执行这一步骤。但我们应该把这一步放在为中间表建立索引、约束等前面,这样可以提高效率。

第五步:与原表一致,在中间表上面创建约束,索引,触发器

与原表一致(如果需要),中间表的对象权限被授予给别的对象

注意:在中间表建立外键约束时应该加上DISABLE关键字

第六步:用dbms_redefinition.finish_redef_table过程完成表的最终重定义

该过程将自动完成

. 应用快照日志中的DML到中间表

. 互换原表与中间表的名字,包括所有可能出现的数据字典

. 但是需要注意的是,并不对换约束,索引,触发器的名称,这些需要手工修改

. 删除MLOG$_XXX

. 启用原来在中间表上的外键

同时,执行这一步时,oracle会短暂地LOCK原表和中间表

第七步:删除中间表、

第八步:如果是920以上,可以利用ALTER TABLE ... RENAME CONSTRAINT ...语句来修改约束名称,如果以下版本,就只有删除并重建了,当然,如果约束名称并不重要,也就无所谓了

第九步:如果重组织失败,那么你就必须采取特殊的步骤来让它重新开始。由于重定义过程需要创建表格的快照,因此为了重新开始这一过程,你必须调用DBMS_REDEFINITION.ABORT_REDEF_TABLE来释放快照。

几个需要注意的地方:

. 在重定义表期间,不允许对中间表作任何DML操作

*/

--以下是一个利用9i的联机重定义表删除字段的简单过程

--原表结构

SQL> desc channel

Name Type Nullable Default Comments

------------------- -------------- -------- ------- --------

CHANNEL_ID NUMBER(16)

CHANNEL_NAME VARCHAR2(120)

PARENT_CHANNEL_ID NUMBER(16) Y

CHANNEL_URL VARCHAR2(256) Y

CHANNEL_DESCRIPTION VARCHAR2(4000) Y

STYLE_CLASS VARCHAR2(120) Y

CONFIGURE_FILE VARCHAR2(120) Y

CHANNEL_SEQUENCE NUMBER(4) Y 9999

CHANNEL_LEVEL NUMBER(2) Y

CREATE_DATE DATE SYSDATE

SELF_TAG_ID NUMBER(8) Y

CHANNEL_CODE VARCHAR2(120) Y

--创建中间表

SQL> create table channel_test as select * from channel where 1=2;

Table created

SQL> alter table channel_test drop column STYLE_CLASS;

Table altered

SQL> desc channel_test

Name Type Nullable Default Comments

------------------- -------------- -------- ------- --------

CHANNEL_ID NUMBER(16)

CHANNEL_NAME VARCHAR2(120)

PARENT_CHANNEL_ID NUMBER(16) Y

CHANNEL_URL VARCHAR2(256) Y

CHANNEL_DESCRIPTION VARCHAR2(4000) Y

CONFIGURE_FILE VARCHAR2(120) Y

CHANNEL_SEQUENCE NUMBER(4) Y

CHANNEL_LEVEL NUMBER(2) Y

CREATE_DATE DATE

SELF_TAG_ID NUMBER(8) Y

CHANNEL_CODE VARCHAR2(120) Y

--检测是否能在线重定义表

SQL> exec dbms_redefinition.can_redef_table('suk','channel');

PL/SQL procedure successfully completed

--开始重定义表

SQL> exec dbms_redefinition.start_redef_table('suk','channel','channel_test','channel_id,CHANNEL_NAME,PARENT_CHANNEL_ID,CHANNEL_URL,CHANNEL_DESCRIPTION,CONFIGURE_FILE,CHANNEL_SEQUENCE,CHANNEL_LEVEL,CREATE_DATE,SELF_TAG_ID,CHANNEL_CODE');

PL/SQL procedure successfully completed

--完成重定义表

SQL> exec dbms_redefinition.finish_redef_table('suk','channel','channel_test');

PL/SQL procedure successfully completed

--查看重定义后的表结构,可以看到表channel的结构已经改变

SQL> desc channel

Name Type Nullable Default Comments

------------------- -------------- -------- ------- --------

CHANNEL_ID NUMBER(16)

CHANNEL_NAME VARCHAR2(120)

PARENT_CHANNEL_ID NUMBER(16) Y

CHANNEL_URL VARCHAR2(256) Y

CHANNEL_DESCRIPTION VARCHAR2(4000) Y

CONFIGURE_FILE VARCHAR2(120) Y

CHANNEL_SEQUENCE NUMBER(4) Y

CHANNEL_LEVEL NUMBER(2) Y

CREATE_DATE DATE

SELF_TAG_ID NUMBER(8) Y

CHANNEL_CODE VARCHAR2(120) Y

参考文档:

tahiti.oracle.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle 9i在线重定义,在oracle 9i下在线重定义表 的相关文章

  • Python数据预处理

    学 目录 1 数据表的基本信息查看 2 查看数据表的大小 3 数据格式的查看 4 查看具体的数据分布 二 缺失值处理 1 缺失值检查 2 缺失值删除 3 缺失值替换 填充 三 重复值处理 1 发现重复值 四 异常值的检测与处理 1 检测异常
  • Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    ERROR 1045 28000 Access denied for user root localhost using password YES 翻译 错误1045 28000 对用户 root 本地主机拒绝访问 使用密码 是 一般这个错
  • Java String总结

    文章目录 创建String 字符串比较 字符串常量池 直接赋值 构造方法 理解字符串不可变 反射 特殊手段 char 和String StringBuffer和StringBuilder String API 创建String 常见的构造方
  • 实验五_linux进程控制,实验五Linux进程管理

    实验五 Linux进程管理 一 实验目的 1 进行系统进程管理 2 周期性任务安排 二 实验内容 1 进程状态查看 2 控制系统中运行的进程 3 安排一次性和周期性自动执行的后台进程 三 实验练习 任务一 进程管理 实验内容 1 查看系统中
  • Go语言 context的源码分析与典型使用(WithCancel,WithTimeout,WithDeadline,WithValue)

    文章目录 context原理 Context基本结构 WithCancel WithTimeout WithDeadline WithValue 代码实现 context原理 context 主要用来在 goroutine 之间传递上下文信
  • C语言学习打卡11.22

    上一周学习内容 函数 初学函数笔记 返回类型 一个函数可以返回一个值 return type 是函数返回的值的数据类型 有些函数执行所需的操作而不返回值 在这种情况下 return type 是关键字 void 函数名称 这是函数的实际名称
  • Windows提权基本原理

    前言 没有多少人谈论在Windows下提权 是一件让人遗憾的事 我想 没有人这么做的理由有以下几点 在渗透测试项目中 客户需要的验证就是一个低权限shell 在演示环境 你经常就会得到管理员帐户 meterpreter使你变得懒惰 gets
  • Angular4.0_依赖注入简介

    什么是依赖注入模式及使用依赖注入的好处 依赖注入 Dependency Injection 简称DI var product new Product createShipment product 我们new一个对象实例 然后当做参数传递给c
  • C++ 实现 redis 发布订阅 --- 使用 hiredis 同步API(一)

    ubuntu18 04安装redis 方法一 使用ubuntu官方软件库安装redis 1 获取最新的软件包 sudo apt update 2 安装redis sudo apt install redis server 3 查看是否安装好
  • Web安全之SQL注入漏洞学习(七)-堆叠注入

    堆叠注入简介 堆叠注入是指注入的多条SQL语句可以一起执行 MySQL命令行中 每一条语句结尾加 表示语句结束 这样是不是可以多句一起使用 这个叫做 stacked injection 堆叠注入原理 局限性 原理 在MySQL的SQL语法中
  • 华硕电脑怎么录屏?分享实用录制经验!

    华硕电脑怎么录屏呀 刚买的笔记本电脑 是华硕的 自我感觉挺好用的 但是不知道怎么录屏 最近刚好要录一个教程 怎么都找不到在哪里录制 有人能教教我吗 随着电脑技术的不断发展 人们越来越依赖电脑进行工作和娱乐 录屏功能作为电脑的一项重要功能 已
  • 华为OD机试 C++ 【报文重排序】

    题目 你手里有一堆乱七八糟的消息片段 每个片段后面都跟着一个数字 那个数字就像是每个片段的编号 你需要按照这些数字 将消息片段整合成一个完整的消息 并把那些数字扔掉 输入 第一行告诉你有几个消息片段 记作N 0 lt N 1000 第二行就
  • Axure rp9 学习笔记-进度笔记以及问题整理

    Axure rp9 学习笔记 进度笔记以及问题整理 4 15 iphone 原型设计 遇到问题 1 苹果手机左按键画的过程中没有弧度 corner 选项为灰 没法选 2 将绘制好的iphone 原型图设置成母版以后 却无法更改颜色 我们对M
  • Rust vs Go:常用语法对比(八)

    题目来自 Golang vs Rust Which Programming Language To Choose in 2023 1 141 Iterate in sequence over two lists Iterate in seq
  • 【LeetCode 热题 HOT 100-002】两数相加(python)

    题集链接 https leetcode cn problem list 2cktkvj 题目链接 https leetcode cn problems add two numbers favorite 2cktkvj 一 题目 二 代码 解
  • C# winform Panel 获取滚轮事件

    使用 Panel 做为控件容器时 设置 Panel AutoScroll true时 在适当的时候将会出现滚动条 但是只能通过拖动滚动条来调整滚动条的位置 如果想要用鼠标中间键来控制滚动条的位置 可以通过下面几步来完成 1 在构造函数中加上
  • DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN原理总结及对比

    GAN系列学习 2 前生今世 本文已投稿至微信公众号 机器学习算法工程师 欢迎关注 本文是GAN系列学习 前世今生第二篇 在第一篇中主要介绍了GAN的原理部分 在此篇文章中 主要总结了常用的GAN包括DCGAN WGAN WGAN GP L

随机推荐

  • 记一次Vulnstack靶场内网渗透(五)

    实验环境搭建 VMware新建网卡VMnet14 选择仅主机模式 并将网段IP设置为192 168 138 0 然后将Windows 7和Windows 2008绑在这个VMnet14上 除此之外 还需要给Windows 7 新增一个网卡
  • C#实现俄罗斯方块游戏

    还记得小时候经常拿袖珍电子游戏机或者小霸王玩过最多的就是俄罗斯方块 冒险岛 超级玛丽还有魂斗罗之类的 这些游戏由于其中简单易上上手的特点 曾经风靡了全世界 俄罗斯方块的基本规则是移动 旋转和摆放游戏自动输出的各种方块 使之排列成完整的一行或
  • Linux开机&关机

    走进Linux系统 开机登录 开机会启动许多程序 它们在Windows叫做 服务 service 在Linux就叫做 守护进程 daemon 开机成功后 它会显示一个文本登录界面 这个界面就是我们经常看到的登录界面 在这个登录界面会提示用户
  • 关于String内存分配的深入探讨

    2019独角兽企业重金招聘Python工程师标准 gt gt gt public class Test public static final String MESSAGE taobao public static void main St
  • Sqli-labs之Less-34

    Less 34 基于错误 POST 单引号 字符型 addslashes 宽字节注入 这一关是POST型的注入 同样的将post传递过来的内容进行了转义处理 过滤了单引号 反斜杠 有之前的例子我们可以看到 df可以将转义的反斜杠给吃掉 而G
  • 数据结构 十进制和十六进制进制间的相互转换

    一 十进制转十六进制 例题 输入十进制数 654321 输出十六进制数 9FBF1 解题步骤 十进制数对16取余 因为最终结果是从下往上依次书写 说以我们可以利用栈的特性 先进 的后出 将余数存入栈中依次弹出 再将弹出的数进行拼接输出即可
  • C++迭代器-------array的基本用法总结

    基本用法中主要总结有 遍历和比较大小 注意 加上头文件 include
  • 利用python来制作动态二维码

    前言 为什么要学习python 是因为不仅很多工作需要用到python 同时我们可以利用python做很多好玩儿的事儿 今天就来教大家如何利用python制作动态二维码 代码说明 我们以小猪佩奇gif图片为例 如果我们利用的背景图是gif动
  • 工厂实施MES系统可以带来哪些效益?

    众多工厂生产现状 1 设施设备先进 但是管理方式落后 手工管理模式的存在 造成数据的不准确和不完全 没有完全实现信息化管理 2 生产计划协调性差 作业调度困难 生产作业计划主要依据调度员的经验制定 设备利用率低 任务进度监控难 紧急插单普遍
  • C++虚基类

    问题引出 问题 A中数据 在D中保存了两份 虚继承 虚继承的目的是让某个类做出声明 承诺愿意共享它的基类 其中 这个被共享的基类就称为虚基类 Virtual Base Class 虚派生只影响从指定了虚基类的派生类中进一步派生出来的类 它不
  • 扎心!为何HR看了你的简历却不通知面试?

    还只是老老实实地写简历 投简历 默默地等待面试通知 那只有两种可能 你太天真 或者是 你真的很久没有 求职 了 如果你细心观察会发现 当你完成一份简历之后 它的状态也会有变化 然而 却有很多求职者并没有搞清楚这些 状态 到底代表着什么 但小
  • idea 配置 JavaWeb 项目的 tomcat

    目录 第一步 单击 idea 靠右上部位的 添加配置 Add Config Run Config 第二步 点击 添加新 或者图中箭头指向的任意一个地方 第三步 选择 Tomcat 服务器 本地 不是 TomEE 第四步 若以前从未配置 To
  • 使用SARIMA做季节时间序列预测全流程(附MATLAB代码)

    在之前的专栏中我们用ARIMA的方法做了时间序列的趋势性预测 不过我们经常还会遇到一种情况 即某些时间序列中存在明显的周期性变化 这种周期是由于季节性变化 季度 月度等 引起的 如下图所示 为1949年到1960年每月国际航空公司的乘客人数
  • C# pdf文件加数字证书,防篡改

    C 指定文件夹内新创建pdf文件加签数字证书 代码实现 引用 Spire Pdf string files Directory GetFiles Config pdfPath 需加数字证书pdf存放文件夹地址 string filesLis
  • 进程信号生命周期详解

    信号和信号量半毛钱关系都没有 每个信号都有一个编号和一个宏定义名称 这些宏定义可以在signal h中找到 例如其中有定 义 define SIGINT 2 查看信号的机制 如默认处理动作man 7 signal SIGINT的默认处理动作
  • c++自定义类型和预处理

    struct 内部初始化变量时 不能用 struct data int x 12 float f 122 5f int pi x data da cout lt lt da f lt lt endl data dap new data 使用
  • 配置 nginx 遇到错误排查(初级)

    系统版本 ubuntu 14 04 nginx 版本 nginx 1 4 6 Ubuntu 本文不是一步步搭建 nginx 的过程 而是我在使用 nginx 的过程中 整理自己遇到的的一些问题 适用于 nginx 遇到问题 排查问题的 ch
  • Neo4J 初次启动与密码

    初次安装成功Neo4J在安装的文件中会有一个bin文件夹 powershell进入bin文件夹执行 neo4j sonsole会有以下结果 D neo4j bin gt neo4j console 2020 09 04 00 57 31 0
  • Python基于PyTorch实现卷积神经网络分类模型(CNN分类算法)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 卷积神经网络 简称为卷积网络 与普通神经网络的区别是它的卷积层内的神经元只覆盖输入特征局部范围的单元 具有稀
  • oracle 9i在线重定义,在oracle 9i下在线重定义表

    9i提供了联机重定义表的方法 可以让你在基本不影响原表的DML情况下修改表结构 实际上 联机重定义表并不是完全的联机重定义 在最后交换表名的时候会短暂地锁定原表和中间表 但这个过程很短暂 相对于传统方法来说 这是一个进步 9i提供了联机重定