ORACLE 想清楚了再做,要谨慎些 兄弟
星期一 发现一个表有很多重复数据 随机使用删除重复数据的语句。
星期二 发现 这语句跑了很久都没跑完,13个小时了!只不过删除10个月的数据而已
依然断了它,可它回滚花了4个小时,上午影响了数据库的服务速度了。
然后一个月一个月检查重复数据的范围,最后定位到9月到10月。删除它,用那条语句很慢,一个小时后断了它。然后把该表的索引删除了,再把表指为NOLOGGING。30分钟就把数据删除了。
随后接着建索引,和关键字。
星期三 发现 关键字没成功,还有很多重复数据,感觉不对头。查看了下重复数据的具体情况,不重复啊! 问及业务人员才知道该表确定唯一记录 要有三个字段来确定。
原来靠2个字段来确定重复记录,现在可好了把2009年的数据都删了!
晚上觉得重导数据,先清空了表,然后建主建,倒数据。等到22:30 还没结束实在要走了!
星期四 发现手工导数据过程跑了384分钟 在凌晨4点报错ORA-30036: 无法按 8 扩展段 (在还原表空间 'UNDOTBS1' 中),作业的相应过程也跑了159分钟后报同样的错,而且影响了很多过程。
看了该过程看到最后有个UPDATE 更新3年的字段 估计是导致报错的原因!
在导数据的过程中 有COMMIT 呀 才执行后面的UPDATE 为什么表没有存到呢? 乖乖的哦
同事来说数据怎么样?他的活动要查! 我为什么不先导2009年的数据满足用户使用,现在导的是2007的数据。
总结下:为了除掉重复数据而导致的后果,主要是因为自己没有想清楚。起码不要全表删掉了数据,删除2009年的数据,这样不会报错。要么先导2009年的数据,先满足用户需要。
相关文档:
一。查看oracle数据库是否为归档模式:
1.select name,log_mode from v$database;
NAME LOG_MODE
------------------ ------------------------
QUERY NOARCHIVELO ......
1创建新表
1.1从查询到的表创建表
create table temp as select stuName,stuNo,stuSex from stuInfo where stuAge>25;
1.2创建新表
/*学生信息表*/
create table stuInfo(
stuName varchar2(10) ,
stuNo varchar2(10),
stuSex varchar2(4),
stuAge number(2),
st ......
在Oracle8i或以上版本中,可以创建以下两种临时表:
1。会话特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT PRESERVE ROWS;
2。事务特有的临时表
CREATE GL ......
Oracle 存储过程返回结果集用 ref cursor 实现。
试验步骤如下:
1. 建立 ref cursor 类型和过程
CREATE OR REPLACE PACKAGE types
AS
TYPE ref_cursor IS REF CURSOR;
END;
/
CREATE TABLE STOCK_PRICES(
RIC VARCHAR(6) PRIMARY KEY,
PRICE NUMBER(7 ......
NVL(Expr1,Expr2)如果Expr1为NULL,返回Expr2的值,否则返回Expr1的值
NVL2(Expr1,Expr2,Expr3)如果Expr1为NULL,返回Expr2的值,否则返回Expr3的值
NULLIF(Expr1,Expr2)如果Expr1和Expr2的值相等,返回NULL,否则返回Expr1的值 ......