oracle中rename表,oracle热点表online rename

对于在线的繁忙业务表的任何操作都可能带来意想不到的风险。

一张业务表,对partition key进行升位,其步骤是:

rename原表

新建临时表

交换分区到临时表

升位临时表的字段的长度

交换临时表到第二张临时表

rename第二种临时表为业务表

整个的操作过程如果顺利,预计在10s左右,如果放在文件中,速度会很快。

下面模拟繁忙表进行测试:

#!/bin/sh

. /home/oracle/.bash_profile

sqlplus -S /nolog<

conn test/test

declare

type arraylist is table of varchar2(20 byte);

arr_account arraylist;

ran number;

error varchar2(4000);

begin

arr_account := arraylist();

arr_account.extend(5);

arr_account(1):='';arr_account(2):='';

arr_account(3):='';arr_account(4):='';

arr_account(5):=''; ran :=dbms_random.value(1,5);

while(1>0) loop

begin

execute immediate 'insert into test(col1,col2,col3) values(:1,:2,:3)'

using '',arr_account(ran),dbms_random.string('|', 2000);

commit;

exception when others then

error:=SQLERRM;insert into log values(error);

commit;

end;

DBMS_LOCK.SLEEP(0.5);

end loop;

end;

/

EOF

现在打开100个线程进行并发的插入,因为每个insert都sleep 0.5秒钟,基本上1s钟插入的记录约等于线程数*2。

#!/bin/sh

for((i=1;i<=$1;i++))

do

/home/oracle/insert.sh &

done

因为表比较繁忙,所以用loop来进行ddl操作:

declare

begin

loop

begin

execute immediate'alter table test rename to test_bak';

exit;

exception

when others then

null;

end;

end loop;

end;

/

完成rename后,发现整个db主机的cpu利用率有不小的升高。

07:43:27 PM CPU %user %nice %system %iowait %idle

07:43:29 PM all 5.31 0.00 0.09 5.19 89.40

07:43:31 PM all 5.44 0.00 0.13 4.85 89.59

07:43:31 PM CPU %user %nice %system %iowait %idle

07:43:33 PM all 5.38 0.00 0.12 4.62 89.88

07:43:35 PM all 6.12 0.00 0.25 4.34 89.29

07:43:35 PM CPU %user %nice %system %iowait %idle

07:43:37 PM all 6.28 0.00 0.22 4.41 89.09

cpu升高了一个百分点:trace其中的一个session:

********************************************************************************

insert into test(col1,col2,col3)values(:1,:2,:3)

values

(:1,:2,:3)

call count cpu elapsed disk query current rows

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

Parse 44 0.00 0.01 0 0 0 0

Execute 0 0.00 0.00 0 0 0 0

Fetch 0 0.00 0.00 0 0 0 0

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

total 44 0.00 0.01 0 0 0 0

Misses in library cache during parse: 44

Optimizer mode: ALL_ROWS

error during execute of EXPLAIN PLAN statement

ORA-00942: table or view does not exist

parse error offset: 88

这里在20s的时间里,进行了44次insert, 每次insert都进行了parse,这也是cpu会上升的原因,因为parse是cpu密集型的操作,oracle parse这个sql时,

发现其depend object不存在,所以在下次过来时,仍然需要解析。

所以:在对特别繁忙的表进行rename操作的时候,object不可用,会造成大量的解析,如果并发量比较大,伴随着大量的读,会操作db hang住。所以要特别小心。

Oracle创建表空间和表

创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...

oracle 修改表的sql语句

oracle 修改表的sql语句     1增加一个列:ALTER TABLE 表名 ADD(列名 数据类型);如:ALTER TABLE emp ADD(license varchar2(256)) ...

Oracle建表插数据等等

Oracle的表的管理: 表名和列的命名规则,详见 数据库命名规范 . 必须以字母开头 . 长度不能超过30个字符 . 不能使用Oracle的保留字 . 只能使用如下字符 column_name-Z, ...

Oracle笔记-表的管理

3.1创建和管理表在Oracle表中使用的emp,dept,sal都是系统内建好的表,那么在SQL语法中同样支持了表的创建语句,要想创建表,则应先了解下Oracle中最常用的几种数据类型3.1.1常用 ...

5&period;oracle建表的时候同时创建主键,外键,注释,约束,索引

5.oracle建表的时候同时创建主键,外键,注释,约束,索引 1 --主键 )); ) ,constraint aba_pr primary key(id,name1)); --外键 )); --复 ...

oracle erp 表结构

BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM ...

Oracle修改表结构字段名和字段长度

添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...

Oracle创建表、修改表、删除表、约束条件语法

一. 使用create关键字创建表 --(1)创建新表use 数据库(在那个数据库中建表)create table 表名(字段名1(列名) 数据类型 列的特征,字段名2(列名) 数据类型 列的特征(N ...

转 关于oracle 分区表 表空间以及索引的总结

关于oracle的表空间,分区表,以及索引的总结关键字: oracle, 表空间, 分区表, 索引 上周第一次做数据库测试碰到了很多问题特此总结: 表空间: Oracle的UNDOTBS01.DBF文 ...

随机推荐

【荐】使用eval&lpar;&rpar;、new Function&lpar;&rpar;将JSON字符串转换为JSON对象

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用j ...

commons-httpclient中的超时设置

connectionTimeout与soTimeout的差异,前者指创建一个有效的客户端到服务端链接的最大允许时间,后者指socket接收data的时间. connectionManager.getP ...

SQL Server数据库级别触发器

禁止修改表结构和加表 CREATE TRIGGER [Object_Change_Trigger_DDL] ON DATABASE FOR ALTER_TABLE,DROP_TABLE,CREATE_ ...

GJM&colon; Unity3D AssetBundle 手记 &lbrack;转载&rsqb;

这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对AssetBundle使用过程中的一些坑进行填补指引以及喷!   AssetBundle是Unity推荐的 ...

编写单例的 dojo class

define([ "dojo/_base/declare" ],function( declare ){ var TimeChartService = declare(" ...

Java中finalize&lpar;&rpar;

垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们 ...

python爬爬&lpar;网友提供学习&rpar;

import urllib2,urllib,os,re def ZZ(url): pathw=os.getcwd() #图片和标题目录 imagetitleregion=r'

环境搭建 - Maven(Windows)

Maven环境搭建 本文以windows7下搭建Maven-3.5.0为示例 下载Maven压缩包 网址:Maven 非C盘根目录下新建文件夹:Maven D:\Maven 在Maven目录下新建文件 ...

&OpenCurlyDoubleQuote;AS3&period;0高级动画编程”学习:第二章转向行为&lpar;上&rpar;

因为这一章的内容基本上都是涉及向量的,先来一个2D向量类:Vector2D.as (再次强烈建议不熟悉向量运算的童鞋,先回去恶补一下高等数学-07章空间解释几何与向量代数.pdf) 原作者:菩提树下的 ...

初识hibernate——环境搭建

一  配置过程 1. 创建一个项目 2. 导包    required里的包 optional里的c3p0连接池的三个包 数据库驱动包 Junit 3.创建Hibernate的配置文件(hiberna ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值