oracle 9i下在线重定义表

2023-10-27

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

参考文档:

piner 9i新特性之——在线表格重定义研究

tahiti.oracle.com

转载于:https://www.cnblogs.com/rootq/archive/2010/01/13/1646396.html

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

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

  • MySQL中设置自增主键id从1开始

    可能遇到过这种问题 当你只想新增一条数据时 发现使用Insert语句后 发现id并不是从1开始的 握草 怎么回事 其实很简单 通过执行一下SQL 对应你的表就可以解决 ALTER TABLE user AUTO INCREMENT 1 具体
  • 【计算机开题报告】二手车交易平台

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 选题目的 意义 如今时代网络技术正在快速发展 电子商务技术也以极为强势的姿态闯入人们的视野之中 随着人们生活质量的提升 为了对身边二手物品进行回收利用 二
  • 如何处理不稳定的自动化测试?

    abluecolor 在解决这个问题之前 请停止编写更多测试 因为这将花费你较高的测试维护成本 你需要尽快行动起来对不稳定的原因进行深入研究 找到不稳定的根因 并且尝试在流程 环境和代码方面做一些优化工作解决它 MasterKindew 如
  • Nexus5596交换机支持3层需要的子卡

    3层子卡 nexus5596如果没有这块子卡 无法支持3层特性 TEST Cisco N5596 1 show modu Mod Ports Module Type Model Status 1 48 O2 32X10GBase T 16X
  • 神州信息一表通监管合规系统

    什么是 一表通 国家金融监督管理总局为进一步建立健全数据统计监管体系 规范数据报送指标体系 明确检测数据规则 而推行建立的一套新体系监管报送方式 提升校验准确性和信息安全性 近期 国家金融监督管理总局更是进一步加大推动 一表通 的实行试点范
  • 软件开发和网络安全哪个更好找工作?

    为什么今年应届毕业生找工作这么难 有时间去看看张雪峰今年为什么这么火就明白了 这么多年人才供给和需求错配的问题 在经济下行的今年 集中爆发 供给端 大学生越来越多 需求端 低端工作大家不愿去 高端岗位又太少 很多基础行业 比如机械 土木 所
  • 6 - 数据备份与恢复|innobackupex

    数据备份与恢复 innobackupex 数据备份与恢复 数据备份相关概念 物理备份与恢复 逻辑备份 推荐 使用binlog日志文件实现对数据的时时备份 使用日志 恢复数据
  • 【计算机毕业设计】病房管理系统

    当下 如果还依然使用纸质文档来记录并且管理相关信息 可能会出现很多问题 比如原始文件的丢失 因为采用纸质文档 很容易受潮或者怕火 不容易备份 需要花费大量的人员和资金来管理用纸质文档存储的信息 最重要的是数据出现问题寻找起来很麻烦 并且修改
  • 【计算机毕业设计】出租车管理系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本出租车管理系统就是在这样的大环境下诞生 其可以帮助管理者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人
  • 【计算机毕业设计】网上拍卖系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本网上拍卖系统就是在这样的大环境下诞生 其可以帮助使用者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人员
  • 【计算机毕业设计】北关村基本办公管理系统

    在如今社会上 关于信息上面的处理 没有任何一个企业或者个人会忽视 如何让信息急速传递 并且归档储存查询 采用之前的纸张记录模式已经不符合当前使用要求了 所以 对北关村基本办公信息管理的提升 也为了对北关村基本办公信息进行更好的维护 北关村基
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 图解python | 字符串及操作

    1 Python元组 Python的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 tup1 ByteDance ShowMeAI 1997 202
  • python超详细基础文件操作【建议收藏】

    文章目录 前言 发现宝藏 1 文件操作 1 1 文件打开与关闭 1 1 1 打开文件 1 1 2 关闭文件 1 2 访问模式及说明 2 文件读写 2 1 写数据 write 2 2 读数据 read 2 3 读数据 readlines 2
  • 【计算机毕业设计】微信小程序反诈科普平台

    相比于以前的传统手工管理方式 智能化的管理方式可以大幅降低反诈科普平台的运营人员成本 实现了反诈科普平台的标准化 制度化 程序化的管理 有效地防止了反诈科普平台的随意管理 提高了信息的处理速度和精确度 能够及时 准确地查询和修正反诈科普 一
  • 【计算机毕业设计】springbootstone音乐播放器的设计与实现

    随着我国经济的高速发展与人们生活水平的日益提高 人们对生活质量的追求也多种多样 尤其在人们生活节奏不断加快的当下 人们更趋向于足不出户解决生活上的问题 stone音乐播放器展现了其蓬勃生命力和广阔的前景 与此同时 为解决用户需求 stone
  • 【ES6】解构语句中的冒号(:)

    在解构赋值语法中 冒号 的作用是为提取的字段指定一个新的变量名 让我们以示例 const billCode code version route query 来说明 billCode code version 表示从 route query
  • 面试官问,如何在十亿级别用户中检查用户名是否存在?

    面试官问 如何在十亿级别用户中检查用户名是否存在 前言 不知道大家有没有留意过 在使用一些app注册的时候 提示你用户名已经被占用了 需要更换一个 这是如何实现的呢 你可能想这不是很简单吗 去数据库里查一下有没有不就行了吗 那么假如用户数量
  • 毕业设计:基于python人脸识别系统 LBPH算法 sqlite数据库 (源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤

随机推荐

  • leetcode 611. 有效三角形的个数

    给定一个包含非负整数的数组 你的任务是统计其中可以组成三角形三条边的三元组个数 示例 1 输入 2 2 3 4 输出 3 解释 有效的组合是 2 3 4 使用第一个 2 2 3 4 使用第二个 2 2 2 3 注意 数组长度不超过1000
  • 服务器系统重装用哪个系统,服务器系统重装用哪个系统

    服务器系统重装用哪个系统 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 重装裸金属服务器的操作系统 快速发放裸金属服务器
  • pyqt中样式设置-QLabel,QMessageBox,QInputDialog

    pyqt中的UI界面的各类样式进行设置 以及默认窗口的样式设置 1 设置图标 self mylabel QtWidgets QLabel self mylabel setMaximumSize 200 80 设置图标大小 self myla
  • (C语言)输入1个字符串,输出其中所出现过的大写英文字母。

    输入一个字符串 输出其中所出现过的大写英文字母 例 输入 FONTNAME and FILENMAE 输出 F O N T A M E I L include
  • LeetCode - 环形链表 II

    日常刷题中 题目 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 p
  • 阿里HR:说说你对黑盒和白盒的理解! CN友:原来是这样子的呀,get到了!!!

    目录 黑盒测试和白盒测试 黑盒测试 黑盒功能测试 非功能黑盒测试 回归黑盒测试
  • java拼接url时单引号,在url链接中转义单引号

    I have a link that is sent throw some php echo voir sa galerie galerry links to another page get title primid is the id
  • Human3.6M dataset(3D人体姿态估计)

    这里是数据集的部分数据 3D关节点 一般论文试验够用了 包括 演员1 5 6 7 8训练集 9 11测试集 共有15个动作场景 需要的自取 下载地址 http www cs stanford edu people ashesh h3 6m
  • UVM的构造函数new的个人理解

    构造函数new 自己总结的规律 理解 结合UVM实战这本书的阅读理解 归纳一下自己对new函数的个人理解 只是书本前几章阅读后的认知 还不能完善 在此只为记录防丢失 构造函数new 一般类的实例化 包含类的声明和类的构造 比如 my dri
  • Pytorch加速与优化:超参数调优、量化、剪枝

    Pytorch加速与优化 超参数调优 量化 剪枝 前言 前提条件 相关介绍 实验环境 超参数调优 hyper parameters 量化 quantization 动态量化 Dynamic quantization 后训练静态量化 Post
  • python中dataframe怎么去重_pandasdataframe重复数据查看.判断.去重

    Apple iPhone 11 A2223 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 gt 本文详解如何使用pandas查看dataframe的重复数据 判断是否重复 以及如何去重 dataframe数据样本
  • python数据容器--五类数据容器的总结对比

    python数据容器 五类数据容器的总结对比 列表 元组 字符串 集合 字典 下标索引 是 是 是 否 否 重复元素 是 是 是 否 否 是否可修改 是 否 否 是 是 适用场景 一批数据 可修改 可重复的存储场景 一批数据 不可修改 可重
  • 5 spring事件与监听器

    Spring的事件 1概述 ApplicationEvent以及Listener是Spring为我们提供的一个事件监听 订阅的实现 内部实现原理是观察者设计模式 设计初衷也是为了系统业务逻辑之间的解耦 提高可扩展性以及可维护性 2组成 Ap
  • android图片压缩上传

    一 调用webservice接口 传的参数是String类型的参数 需要把Bitmap转换为String类型 byte arrayOfByte CommUtil Bitmap2Bytes DangerPointSubmitActivity
  • 关于phpStudy的Less-26空格被过滤使用%a0变乱码无法执行应该带有空格的查询语句

    我的实验环境是 C phpStudy PHPTutorial WWW sqli labs master Less 26 练习sql inject 注入练习第26关 Less 26 输入的空格被过滤了 提示中明显指出select 和 1之间的
  • 腾讯云:MySQL数据库的高可用性分析

    作者介绍 易固武 腾讯高级工程师 参与腾讯账号安全建设 腾讯数据仓库 TDW 优化改造 腾讯云数据库等项目 对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数据库 有海量的应用将数据存储在MySQL
  • git pull出现Abort没有原因提示

    使用git pull更新时 出现文件冲突 将冲突文件解决后 再进行pull操作 出现abort 但是没有提示原因 这是由于直接在子文件夹下进行pull操作 而其他级别的文件夹下出现也出现文件冲突 而git发现了冲突但是由于不在当前目录下没有
  • 教你一招:解决u盘插入计算机时提示格式化,如何恢复u盘中的文件

    1 插入U盘时 计算机提示格式化 看到这里 到底是格不格呢 别怕 随便你了 2 查看U盘属性 发现都为零 怎么办呢 u盘上面有很多重要文件啊 别急 继续往下看 3 解决办法 1 下载DiskGenius硬盘恢复软件 安装后打开 软件官方下载
  • 招聘数据采集+数据清洗与分析+数据可视化

    1 需求 1 1 数据采集 1 网站解析 利用 chrome 查看网页源码 分析招聘网站网页结构 1 检查 招聘网站 在网页中右键点击检查 或者 F12 快捷键 进入 如下图的查看元素页面 示例图 1 2 检查网站 点击 Network 勾
  • oracle 9i下在线重定义表

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