Oracle 9i中表的在线重定义

2023-11-07


Oracle 9i中表的在线重定义

今天遇到要把数据库中的某张表改成分区表,而且该表在别的地方还有其他的注册信息,如果自己手工建一个分区表的替代该表的话,那就得要手工地去执行该表在其他地方的注册,所以不想删除该表再手工创建同名的分区表。想到了Oracle 9i中可以使用在线重定义的功能,就用了该功能来实现。

1.首先对要在线重定义的表自行验证,看该表是否可以重定义,如果不可以则会提示错误信息。

SQL> execute dbms_redefinition.can_redef_table('ofsa','pft_party_profit_detail');

begin dbms_redefinition.can_redef_table('ofsa','pft_party_profit_detail'); end;

ORA-12089: cannot online redefine table "OFSA"."PFT_PARTY_PROFIT_DETAIL" with no primary key

ORA-06512: at "SYS.DBMS_REDEFINITION", line 8

ORA-06512: at "SYS.DBMS_REDEFINITION", line 247

ORA-06512: at line 1

SQL>

出错了, 该表上缺少主键,为该表建主键。再执行验证。

SQL> alter table pft_party_profit_detail add constraint pft_party_profit_detail_pk primary key(as_of_date,id_number);

Table altered

SQL> execute dbms_redefinition.can_redef_table('ofsa','pft_party_profit_detail');

PL/SQL procedure successfully completed

SQL>

2.建个和源表表结构一样的分区表,作为中间表。按日期范围分区,按id_number的值进行散列分区。

create table pft_party_profit_detail_bak
(
AS_OF_DATE DATE not null,
ACCOUNT_TABLE_CD NUMBER(
4
) not null,
PARTY_ID NUMBER(15
) not null,
ID_NUMBER NUMBER(25
) not null,
IDENTITY_CODE NUMBER(10
) not null,
GL_ACCOUNT_ID NUMBER(14
) not null,
ORG_UNIT_ID NUMBER(14
) not null,
COMMON_COA_ID NUMBER(14
) not null,
ISO_CURRENCY_CD VARCHAR2(15
) not null,
PARTY_TYPE_CD VARCHAR2(5
) not null,
PARTY_NUMBER VARCHAR2(30
) not null,
ACCOUNT_NUMBER VARCHAR2(30
) not null,
ACCOUNT_CATEGORY_CD NUMBER(4
) not null,
ACCOUNT_GROUP_CD NUMBER(4
) not null ,
PARENT_PARTY_NUMBER VARCHAR2(30
),
IDENTITY_CODE_CHG NUMBER(10
) ,
RECORD_COUNT NUMBER(6
) ,
PRIMARY_REL NUMBER(1
) ,
PRIMARY_BAL NUMBER(14,2
) ,
SECONDARY_REL NUMBER(1
) ,
ACCOUNT_CONTRIB NUMBER(14,2
) ,
CONTRIB_AFTER_CAPITAL_CHG NUMBER(14,2
) ,
ALLOCATED_EQUITY NUMBER(14,2
) ,
TOTAL_TRANSACTIONS NUMBER(8
) ,
CUR_NET_BOOK_BAL_C NUMBER(14,2
) ,
EQUITY_CREDIT NUMBER(14,2
) ,
INTEREST_CHARGE_CREDIT NUMBER(14,2
) ,
INTEREST_INC_EXP NUMBER(14,2
) ,
LOAN_LOSS_PROVISION NUMBER(14,2
) ,
NET_FEE_INCOME NUMBER(14,2
) ,
NET_INT_MARGIN NUMBER(14,2
) ,
OPEN_ACCOUNT_FLG NUMBER(1
) ,
ORIGINATION_DATE DATE ,
RETURN_ON_EQUITY NUMBER(11,4
) ,
TOTAL_ACCOUNT_EXP NUMBER(14,2
) ,
AVG_BOOK_BAL NUMBER(30,4
) ,
PC_EXP NUMBER(30,4
) ,
CC_EXP NUMBER(30,4
) ,
CC_N_EXP NUMBER(30,4
) ,
PC_N_EXP NUMBER(30,4
) ,
CUST_OFFICER_EXP NUMBER(30,4
) ,
CUST_EXP NUMBER(30,4
) ,
ACTIVITY_EXP NUMBER(30,4
) ,
CUR_BOOK_BAL NUMBER(30,4
) ,
ACTIVITY_TIMES NUMBER(30
) ,
EXP_PER_ACTIVITY NUMBER(30,4
) ,
NO_OBJECT_ALLOC_EXP NUMBER(38,4
) ,
NO_ALLOCATION_EXP NUMBER(38,4
) ,
FOREIGN_CURRENCY VARCHAR2(15
) ,
PRODUCT_ID NUMBER(14
)
)
partition by range(as_of_date) subpartition by hash(id_number)
(
partition p_2006_2007 values less than(to_date('2007-12-31','yyyy-mm-dd'
)),
partition p_2008_2009 values less than(to_date('2009-12-31','yyyy-mm-dd'
)),
partition p_2010_2011 values less than(to_date('2011-12-31','yyyy-mm-dd'
)),
partition p_2012_2013 values less than(to_date('2013-12-31','yyyy-mm-dd'
)),
partition p_2014_2015 values less than(to_date('2015-12-31','yyyy-mm-dd'
)),
partition p_2016_max values less than(maxvalue)
)

3.执行表的在线重定义:

SQL>execute dbms_redefinition.start_redef_table('ofsa','pft_party_profit_detail','pft_party_profit_detail_bak');

PL/SQL procedure successfully completed

4.执行把中间表的内容和数据源表进行同步。

SQL>execute dbms_redefinition.sync_interim_table('ofsa','pft_party_profit_detail','pft_party_profit_detail_bak9');

PL/SQL procedure successfully completed

5.执行结束在线定义过程。

SQL>execute dbms_redefinition.finish_redef_table('ofsa','pft_party_profit_detail','pft_party_profit_detail_bak9');

PL/SQL procedure successfully completed

SQL>

查看数据字典,可以看到改表已经成为了分区表。

6.如果执行在线重定义的过程中出错,可以在执行dbms_redefinition.start_redef_table之后到执行dbms_redefinition.finish_redef_table之前的时间里执行:DBMS_REDEFINITION.abort_redef_table以放弃执行在线重定义。

执行在线重定义的过程,要求源表和中间表要在同一个schema下。上面执行的过程虽然使用了分区表,但是并没有为分区数据指定表空间,这还要和DBA确认一下。分区表上还没有建索引。。。还有很多要做。

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

Oracle 9i中表的在线重定义 的相关文章

  • 如何修复“Oracle.EntityFrameworkCore 类型中的方法‘get_Info’没有实现”。

    我正在尝试通过 EW 连接到 Oracle DB 论方法OnConfiguring是错误 System TypeLoadException 程序集 Oracle EntityFrameworkCore Version 2 0 19 1 Cu
  • 什么会导致 Oracle ROWID 更改?

    AFAIK Oracle 中的 ROWID 表示相应数据文件中记录的物理位置 在什么情况下记录的ROWID可能会改变 我所知道的一个是分区表上的更新 它将记录 移动 到另一个分区 还有其他情况吗 我们的大多数数据库都是 Oracle 10
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • 如何在Oracle中从表中选择列,*?

    我正在创建很多脚本 有时为了检查表是否根据我的需要进行更新 我会即时编写几个 SELECT 语句 在 SQL SERVER 中你可以这样写 SELECT Column1 FROM MY TABLE 出于可见性原因 这很有用 但是这似乎在 O
  • 如何在python中转换1970年之前的日期

    我写了一个方法来处理 mongodb 结果 其中日期为datetime datetime i used dumps方法 该方法将日期转换为不是毫秒 这里如果日期在 1970 年之前 则日期将转换为负值 我无法处理此问题以更改回 1970 年
  • 在java中创建Unix时间戳[重复]

    这个问题在这里已经有答案了 可能的重复 从 Date 获取 Unix 时间戳 https stackoverflow com questions 7784421 getting unix timestamp from date 我正在约会
  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • 如何更新 pl/sql 中嵌套表的列? [复制]

    这个问题在这里已经有答案了 我正在尝试在表中创建一个可以存储多个值的列 如下所示 我有一个学生id std和一个名为marks可以采用几个值 例如2 3 4 我想更新此列表以添加另一个标记2 3 4 5但我不知道怎么做 我如何更新专栏mar
  • 将数据从 oracle 移动到 HDFS,处理并从 HDFS 移动到 Teradata

    我的要求是 将数据从 Oracle 移至 HDFS 处理HDFS上的数据 将处理后的数据移至 Teradata 还需要每 15 分钟执行一次整个处理 源数据量可能接近50GB 处理后的数据也可能相同 在网上搜索了很多之后 我发现 PRARO
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V
  • 从日期变量创建月末日期

    我有一个包含日期变量的大型数据框 它反映了该月的第一天 有没有一种简单的方法来创建代表该月最后一天的新数据框日期变量 以下是一些示例数据 date start month seq as Date 2012 01 01 length 4 by
  • Oracle 上“描述”命令不起作用的原因是什么?

    我正在尝试在 oracle 上运行 describe table name 命令 我正在使用 dbeaver 来访问 oracle 但是 当我运行该命令时 它显示 SQLException 和错误消息 无效的 sql 语句 我该如何进行手术
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • oracle ExecuteNonQuery 在 ASP.Net 上冻结

    我正在尝试使用 ASP C 和 CLR 4 5 中的 Oracle 连接来运行非查询 这是我的代码 string connectionString ConfigurationManager ConnectionStrings OracleC
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • 如何测试 UITextField 是否为零?

    我正在尝试制作我的应用程序的一部分 如果该人不更改我的 UITextField 中的空白文本 那么他 她将无法继续下一步 基本上 我想测试 UITextField 的 nil 文本 我已经使用了 if text 方法 但是如果用户单击 UI
  • Cakephp 自定义日期输入表单助手的输出

    I got echo this gt Form gt input birthdate array label gt Geburtsdatum true dateFormat gt DMY minYear gt date Y 70 maxYe
  • json_encode 返回 NULL?

    由于某种原因 项目 描述 返回NULL使用以下代码 这是我的数据库的架构 CREATE TABLE staff id int 11 NOT NULL AUTO INCREMENT name longtext COLL
  • php oracle客户端oci8安装出现什么问题

    我尝试了安装 PHP Oracle 客户端的所有过程 1 我安装了客户端版本8和32位 2 我在php ini中取消了oci的注释 3 重新启动Wamp 4 不确定是否真的安装 但我在 php ini 中得到了引用 5 但仍然无法连接 泰汉

随机推荐

  • .NET Framework简介

    1 什么是 NET Framework NET Framework 是支持生成 运行下一代应用程序和XML Web Services的内部Windows组件 它简化了在高度分布式Internet环境中的应用程序开发 NET Framewor
  • python之数值类型数据及运算

    数据类型 数据类型分为 字符串 str 整型 int 浮点型 float 负数 complex 布尔型 bool 一 字符串 1双引号 单引号括起来的 2双引号开头 结尾 xxx 3单引号开通 结尾 xxx 4不能一边单一边双 5多行字符串
  • iOS 为app生成下载链接,并生成二维码

    1 打开这个网址 http aso100 com 在此处输入app名称 点搜索 2 看 第一个就是我们的app 下一步点击图标 3 点击app id 4 看连接出来了 5 最后到这个网站生成二维码 http 2bai com cn hao2
  • Vue2中使用高德地图(Loader )

    1 需求 根据输入的地址 地图显示地址的位置 2 准备工作 2 1 注册高德开放平台账户 并完成认证 根据具体实际情况 完成个人开发或者企业开发认证 高德开放平台https console amap com 2 2在应用管理 我的应用中添加
  • 斗地主老输?只能领低保?看我用Python写一个AI出牌器!现在一亿欢乐豆了!

    前言 最近在网上看到一个有意思的开源项目 快手团队开发的开源AI斗地主 DouZero 今天我们就一起来学习制作一个基于DouZero的欢乐斗地主出牌器 看看AI是如何来帮助我们斗地主 赢欢乐豆 实现财富自由的吧 首先一起来看看AI斗地主出
  • View那些事儿(1) -- View绘制的整体流程

    写在开头 Android的知识体系十分庞大 在Android的学习道路上难免会遇到学习了新东西就忘了旧东西的情况 本系列文章主要是对自己对View的学习过程进行一个深入的理解与总结 当然还结合自己在实际项目中的一些体会写了一些东西 当用户打
  • LINUX 下 用C语言编写 TCP/IP通信的 sqlite3数据库服务器

    一 功能需求 我们首先明确一下 我们要制作的这个小服务器 需要具备什么功能 1 1 用户的注册和登录 使用sqlite3数据库 插入新的用户和查询用户的名字和密码是否匹配 1 2 查询单词 单词及其解释中 保存在一个文本文件当中 需要打开文
  • Android 12(S) 图形显示系统 - 示例应用(二)

    1 前言 为了更深刻的理解Android图形系统抽象的概念和BufferQueue的工作机制 这篇文章我们将从Native Level入手 基于Android图形系统API写作一个简单的图形处理小程序 透过这个小程序我们将学习如何使用Nat
  • spring boot配置dubbo(properties)

    spring boot与dubbo配置 properties dubbo和zookeeper配合使用 具体的它们之间的配置这里不说了 一 spring boot与dubbo配置有两种方式 1 spring boot在自己的配置文件appli
  • ScratchJr-ScratchJr介绍

    ScratchJr是什么 ScratchJr 是一个入门级的编程语言 它可以让幼儿 5 7岁 创建互动的故事和游戏 孩子利用图形化的程序积木让角色移动 跳跃 舞蹈 唱歌 孩子也可以利用绘图编辑器绘制自己的角色 用麦克风录制自己声音 用照相机
  • QT中野指针问题。

    错误提示 Signal received The inferior stopped because it received a signal from the Operating System Signal name SIGSEGV Sig
  • 服务器共享文件更改名称报错,服务器文件修改

    服务器文件修改 内容精选 换一换 本节操作指导用户实现同一个子网的Windows弹性云服务器之间文件共享 共享文件的云服务器在同一个子网下 且网络互通 在云服务器右下方的网络图标处 右键单击 打开网络和共享中心 打开网络和共享中心单击 更改
  • mysql规范

    数据库表设置规范 字符集一般选择utf8mb4 MySQL5 5 3以后支持 因为utf8mb4是utf8的超集并完全兼容utf8 能够用四个字节存储更多的字符 排序规则一般选择utf8mb4 general ci 比较和排序的时候更快 一
  • 编写一个算法来判断一个数是不是“快乐数”。

    一个 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直 到这个数变为 1 也可能是无限循环但始终变不到 1 如果可以变为 1 那么这个数就是快乐数 示例 输入 19 输出 true 解释 1
  • 用VBS脚本查询纯真IP库QQWry.dat(转)

    查询给的IP地址所在的国家 ADSL服务商名称 前提 需要提供一个纯真的IP库 这个可以只需将从网上搜索QQWry dat进行搜索这个文件下载即可 然后将该文件放到与该脚本同目录下即可 原文地址 http demon tw programm
  • CSMA/CD协议原理及作用

    CSMA CD Carrier Sense Multiple Access with Collision Detection 协议是一种通信协议 它用于在以太网网络中解决多端口同时发送数据的冲突问题 原理 Carrier Sense 在发送
  • jvm的学习方法

    jvm详解 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 SmartyPa
  • debug常规的基本使用

    1 debug启动 在需要的调试的地方打上断点 然后右键debug启动 2 窗口调试功能 1 终止 程序终止 2 放行 有断点则调到下一个断点 没有则直接有运行完 3 跳到下一行 4 进入方法 3 快捷键 F8 跳到下一行 F9 放行 到下
  • Pandas提取数据的几种方式

    文章目录 前言 Pandas读取数据的几种方式 1 read csv 2 read excel 3 read sql 总结 前言 快期末了 数据挖掘的大作业需要用到python的相关知识 这太难为我这个以前主学C 的人了 不过没办法还是得学
  • Oracle 9i中表的在线重定义

    Oracle 9i中表的在线重定义 今天遇到要把数据库中的某张表改成分区表 而且该表在别的地方还有其他的注册信息 如果自己手工建一个分区表的替代该表的话 那就得要手工地去执行该表在其他地方的注册 所以不想删除该表再手工创建同名的分区表 想到