本站用于记录日常工作内容,虚拟化云计算,系统运维,数据库DBA,网络与安全。
 
0

批量删除Oracle数据

发表者:admin分类:数据库2015-08-01 15:43:51 阅读[1729]
批量删除Oracle数据在使用delete语句删除数据时,数据库是要做日志记录的,以便将来可以恢复数据,可是我在删除上百万条数据时,十分缓慢甚至死机,请问有没有什么好方法?鉴于QQ群中不断的有人被这方面的问题困惑,故转贴如下:专家意见:几个办法:  1. 如果删除的数据是大部分,建议使用楼上的方法把要保留的数据放在一个临时表里,truncatetable后再放回来  2. 也可以分段提交,楼上也提到了  3. 专门使用一个大回滚段  4. 如果确认将来不需要做恢复,改为非归档模式,删除完改回来再做个备份.源:http://searchdatabase.techtarget.com.cn/感谢:tech target IT专家网网友观点一: create or replace procedure delete_tableisi number(10);beginfor x in (select * from emp where DEPTNO like 'a%')loopdelete emp where emp.id = x.idi:=i+1;if i>1000 thencommit;i:=0;end if;end loop;exceptionwhen others thendbms_out.put_line(sqlcode);rollback;end delete_table;   网友观点二: 这个是我平常用来批量删除数据,每500条数据提交一次。DECLARECNT NUMBER(10):=0;I NUMBER(10);BEGINSELECT COUNT(*) INTO CNT FROM ep_arrearage_bak WHERETO...
 
0
在使用delete语句删除数据时,数据库是要做日志记录的,以便将来可以恢复数据,可是我在删除上百万条数据时,十分缓慢甚至死机,请问有没有什么好方法?这个是我平常用来批量删除数据,每500条数据提交一次。DECLARECNT NUMBER(10):=0;I NUMBER(10);BEGINSELECT COUNT(*) INTO CNT FROM ep_arrearage_bak WHERE TO_CHAR(DF_DATE,'MM')='01';FOR I IN 1..TRUNC(CNT/500)+1 LOOPDELETE FROM ep_arrearage_bak WHERE TO_CHAR(DF_DATE,'MM')='01' AND ROWNUM<=500;COMMIT;END LOOP;END;
 
0

Oracle ADD_MONTHS 使用

发表者:admin分类:数据库2015-08-01 10:21:17 阅读[1703]
需要脚本,自动清空分区数据。表是按月分区,希望每月自动执行一次,清空下个月的分区数据。 分区后缀是两位数月份,不足前面补0。 SQL> select lpad(extract(month from(add_months(to_date('2012-12-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), 1))), 2, '0') aa from dual; AA--01 SQL> select lpad(extract(month from(add_months(to_date('2012-11-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), 1))), 2, '0') aa from dual; AA--12 SQL> 标准文档:ADD_MONTHS SyntaxDescription of the illustration add_months.gifPurposeADD_MONTHS returns the date date plusinteger months. The date argument can be a datetime value or any value that can be implicitly converted toDATE. The integer argument can be an integer or any value that can be implicitly converted to an integer. The return type is alwaysDATE, regardless of the datatype of date. Ifdate is the last day of the month or if the resulting month has fewer days than the day component ofdate, then the result is the last day of the resulting m...
Oracle dbLink跨数据库查询并插入数据 工作中需要从一个数据库中的表GIS_WEICHAI_DATA_1S中的数据导入到另个一数据库的表GIS_WEICHAI_DATA_1S中,数据库服务器都是远程的<IP分别为: 221.131.228.256     211.161.192.46>!我的实现方法是在本地使用PL/SQL操作两个远程服务器,实现方式如下:1.               为你需要操作的远程数据库服务器建立本地服务名:      在本地数据库安装文件中,找到$ORACLE_HOME/network/admin/tnsnames.ora文件,    末尾添加    --第一个远程服务器的服务名:MYORACLE1MYORACLE1 =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = 221.131.228.256)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = orcl)    )  )   --第一个远程服务器的服务名:MYORA...
输出到文件文件首先编辑一个脚本文件,比如命名为abc.sh   spool abc.txt;                      #将结果输出为abc.txtselect * from wap_subscribe where Telcomcompanyid = '20200' and (Orderdate like '2005%' or Disorderdate like '2005%');spool off;  在sql>模式下使用@/opt/abc.sh即可,查询结果即输出到abc.txt了。输出到Excel文件SQL> set termout offSQL> set heading offSQL> set pagesize 0SQL> set verify offSQL> set echo offSQL> spool /tmp/aaa.csvSQL> select id || ',' || name || ',' from test;   #多字个段分列存放在表格中1,,2,,3,6,,7,SQL> spool off补充一下:在将查结果保存到文件的时候,可能不希望将结果输出到屏幕,这样会影响速度。那么就可以能通过脚本的方式来解决。在命令行下面实现不了,所以写在脚本中,招行一下就可以了。创建文件more email.sql set term offspool user.txt@get_email.sqlspool offexitmore get_email.sql select email from album.wdxc_user;sqlplus uesr/pa...
 
0
一 设置为归档方式Sql代码  sql> archive log list;   #查看是不是归档方式  sql> alter system set log_archive_start=true scope=spfile; #启用主动归档  sql> alter system set log_archive_dest=''location=/oracle/ora9/oradata/arch'' scope=spfile;#设置归档路径  sql> alter system set log_archive_dest_1=''location=/oracle/ora9/oradata/arch1'' scope=spfile;  sql> alter system set log_archive_dest_2=''location=/oracle/ora9/oradata/arch2'' scope=spfile;  #如果归档到两个位置,则可以通过上边方法实现  sql> alter system set log_archive_format=''arch_%d_%t_%r_%s.log''  #设置归档日记款式  sql> shutdown immediate;    www.2cto.com sql> startup mount;    #打开控制文件,不打开数据文件  sql> alter database archivelog; #将数据库切换为归档模式  sql> alter database open;   #将数据文件打开  sql> archive log list;   #查看此时是否处于归档模式  查询以确定数据库位于archivelog模式中且...
一般来讲除开业务数据存放的表空间,DBA要着重关注SYSTEM,SYSAUX,UNDO,TEMP表空间,SYSTEM表空间的大小一般是衡定的,UNDO和TEMP表空间的大小由数据库的业务情况决定,而SYSAUX表空间在默认条件下你如果不做任何配置,随着时间的推移,会膨胀的越来越大!SYSAUX表空间做为SYSTEM表空间的辅助表空间,主要存放EM相关的内容以及表统计信息,AWR快照,审计信息等,个人认为,如果你的SYSAUX表空间大小超过2G,那么该考虑让他减肥了! 一:使用下列语句查询表空间使用率 view sourceprint?01.SELECT * FROM ( 02.SELECT D.TABLESPACE_NAME, 03.SPACE || 'M' "SUM_SPACE(M)", 04.BLOCKS "SUM_BLOCKS", 05.SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 06.ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%'07."USED_RATE(%)", 08.FREE_SPACE || 'M' "FREE_SPACE(M)"09.FROM (  SELECT TABLESPACE_NAME, 10.ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 11.SUM (BLOCKS) BLOCKS 12.FROM DBA_DATA_FILES 13.GROUP BY TABLESPACE_NAME) D, 14.(  SELECT TABLESPACE_NAME, 15.ROUND (SU...
ORA-07445: 出现异常错误: 核心转储(oracle bug) 目录(?)[+]近来在测试时碰到一莫名问题,研发声称在开发环境中正常,而我们在测试环境中则经常遭遇,几番折腾,发现是oracle的bug所致。不过即使是oracle出bug,人家在metalink上也井井有条的写着从哪个版本到那个版本存在这样的问题,在什么版本上可以fix掉这个bug,在什么条件下会触发这个bug,又通过什么样的解决方案可以把这个bug规避掉。所以说,bug到处都会有,而怎样让已知bug不会成为用户无法使用产品或者生产力无法提高的借口是非常重要滴...废话少说,还是记下问题排查的过程,以备后查。数据库版本:oracle10.2.0.4问题现象:日志中出现如下报错:2011-06-2110:2050,010: INFO [http-8180-Processor11|http-8180-Processor11] ([PublishSequenceDetailHibernateDao].java:307) - 准备数据存储过程参数:publishType[1]publishSeq[813007]currentFolderIds[37]2011-06-2110:2052,103:ERROR [http-8180-Processor11|http-8180-Processor11] ([PublishSequenceDetailHibernateDao].java:317) - 存取过程操作失败无法从套接字读取更多的数据 2011-06-2110:2052,104:...
"ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法在测试数据库里,之前操作一个修改表结构语句失败后,再执行下一个语句时,提供报错: #  alter tables items modify (manager,varchar2(8))提供语句有错误。#alter table items modify (manager varchar2(8))提示以下错误 :ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源# commit;然后使用 SQL提交数据后,就可以正常使用数据表结构了。网友给出以下方法,测试oracle10g 提示找不到视图。解决方法如下:=========================================================SQL> select session_id from v$locked_object;SESSION_ID----------       56SQL> SELECT sid, serial#, username, osuser FROM v$session where sid = 56;       SID    SERIAL# USERNAME                       OSUSER---------- ---------- ------------------------------ ---------------------...
一道关于AVG函数和NULL值的面试题 某部门有10个员工,其中9个工资为1000,另一个为NULL,当使用AVG函数取该部门平均工资时,结果应该是多少?A.1000B.900我这里把题目再延伸一下,如果我们count(工资)结果是多少? A.10, B.9实践出真知SQL> select * from v$version;BANNER-------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit ProductionPL/SQL Release 11.1.0.7.0 - ProductionCORE    11.1.0.7.0      ProductionTNS for Linux: Version 11.1.0.7.0 - ProductionNLSRTL Version 11.1.0.7.0 - ProductionSQL>SQL> drop table t purge;Table dropped.SQL> create table t(sal number);Table created.SQL> insert into t values (10);1 row created.SQL> insert into t values ('');1 row created.SQL> insert into t values(0);1 row created.SQL> commit;Commit complete.SQL> select * from t;       SAL---------- &n...
    总共51页,当前第31页 | 页数:
  1. 21
  2. 22
  3. 23
  4. 24
  5. 25
  6. 26
  7. 27
  8. 28
  9. 29
  10. 30
  11. 31
  12. 32
  13. 33
  14. 34
  15. 35
  16. 36
  17. 37
  18. 38
  19. 39
  20. 40
  21. 41