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中表的在线重定义 的相关文章

  • PHP:使用 DateTime 类转换日期

    我从 PayPal IPN 获得了此日期 payment date 20 12 59 Jan 13 2009 PST 我如何转换Y m d TH i s Z 我确实尝试过 date new DateTime POST payment dat
  • WHERE IN 条件不接受字符串值

    我正在动态构造一个带有名称的字符串用户数据在 PL Sql 过程中通过附加用户名 单引号 和逗号 的形式 abc123 xyz456 pqr789 但是当我将此字符串传递给 SELECT 语句的 WHERE IN 条件时 SELECT FR
  • Rails 3:如何获取特定时区今天的日期?

    为了获得今天的日期 我这样做 Date today gt Fri 20 May 2011 我想获取特定时区的今天日期 例如 Melbourne 我的设置中有以下设置application rb config time zone Melbou
  • 删除指针后将其设为 NULL 是一个好习惯吗?

    我首先要说的是 使用智能指针 您将永远不必担心这个问题 下面的代码有什么问题 Foo p new Foo use p delete p p NULL 这是由答案和评论 https stackoverflow com questions 19
  • 休眠可能会导致此“获取顺序错误”错误吗?

    我尝试使用 Hibernate Spring JPA 执行此查询 在 Oracle DB 中 Query value DELETE from MY TABLE where ID ID nativeQuery true void delete
  • ER_TRUNCATED_WRONG_VALUE:日期时间值不正确

    我最近完成了一个研究项目的申请 一切都很好 我剩下的就是将应用程序投入生产 我正在将 MySQL 与 Node js 结合使用 我知道 我们不喜欢这样 但总得有人尝试一下 我有一个套接字 它向 mysql 消息表添加一条聊天消息 其中包含文
  • Solr 日期字段 tdate 与 date?

    所以我有一个关于 Solr 字段日期类型的问题 这个问题非常简单 日期 字段和 tdate 字段之间有什么区别 模式 xml 声称 为了更快的范围查询 请考虑 tdate 类型 和 基于 Trie 的日期字段 以实现更快的日期范围查询和日期
  • 更改Java日期的格式[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有格式为 Date 的对象 107 2013 12 00 00 AM 我的期望值 2013 07 01 我如何做到这一点 我正在尝试使用这
  • 将 OraclePreparedStatement 与 DBCP 连接结合使用

    我正在尝试使用 dbcp 框架为我的 oracle 服务器创建一个连接池 我用过这个tutorial http web archive org web 20120615100115 http www freshblurbs com 80 j
  • Oracle中如何检测4字节UTF8字符

    我们已经看到oracle中存储了4字节的UTF 8字符 我们需要检测特定列中有多少行包含此类字符 尝试了这里给出的建议 UTF 16 补充字符 https stackoverflow com questions 34720830 how t
  • TOAD 将 &String 视为绑定变量

    我正在使用 Oracle Data Integrator 开发一些 ETL 有时会使用 TOAD 测试部分代码 今天我遇到了 TOAD 的问题 我有一行像 AND column value like DEV PROD 当我尝试运行包含上面过
  • Oracle 中的 SQL 调优 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何文章 链接可以让我找到 SQL 调优 Oracle 的示例 如果能用例子来解释那就太好了 我需
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 如何在 SQLite 中将时间戳转换为字符串?

    我有一个表 其中存储了时间戳 以毫秒为单位 我想将这些时间戳转换为人类可读的形式 这是我的表的输出示例 SELECT date raw strftime d m Y date 1000 as string FROM my table raw
  • 通过 Oracle 的数据库链接运行 SQL Server 存储过程

    参考如何通过数据库链接执行 Oracle 存储过程 https stackoverflow com questions 240788 how to execute an oracle stored procedure via a datab
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • ORA-12154: TNS: 无法解析指定的连接标识符 (PLSQL Developer)

    我需要使用 PLSQL Developer 访问 oracle 数据库 当我尝试连接到数据库时出现以下错误 ORA 12154 TNS could not resolve the connect identifier specified 我
  • 对 PLSQL 中的每个表执行

    我想要所有表中匹配特定名称条件的记录数 这是我构建的 SQL Declare SQLStatement VARCHAR 8000 BEGIN SELECT SELECT COUNT FROM Table Name INTO SQLState
  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐

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