Nologging append 对 产生redo log 的影响
表空间: nologging基本上,insert append 产生少量redo,insert into nologging 和insert 效果一样。[@more@]--------------------------------------------------------------------------------------------------------------------------SQL> SQL> insert into mytest select * from user_tables;3988 rows created.SQL> SQL> select value from v$mystat where statistic# in (select statistic# from v$sysstat where name = 'redo size'); VALUE---------- 2590940SQL> SQL> SQL> SQL> select (259
《深入浅出Oracle:DBA入门、进阶与诊断案例》 学习笔记 第5章
在Buffer Cache 中,Oracle 通过几个链表进行内存管理,其中最为人熟知的就是LRU list and Dirty list (也通常被成为write list,从Oracle 8i开始,因为算法变化,也被称为checkpoint queue),各种list存放的是指向具体的Buffer的指针。数据库初始化时,所有的Buffer都被Hash到LRU list上,当需要从数据文件读数据的时,首先在LRU list 寻找Free 的Buffer,然后读取数据到Buffer Cache 中。当数据被修改后,状态变为dirty,就可以被移至dirty list(checkpoint queue)。Dirty list 上的都是候选的可以被DBWR写出到数据文件的Buffer。一
《深入浅出Oracle:DBA入门、进阶与诊断案例》 学习笔记 第4章
虽然这本书已经买了一年多了,但是只看了几章而已。现在把阅读过程中遇到的一些问题和需要注意的地方记录下来。1. what if sga_target > sga_max_sizeSGA_target 不能超过 SGa_max_size, 如果超过,则会出错。idle> alter system set sga_target = 800M;alter system set sga_target = 800M*ERROR at line 1:ORA-02097: parameter cannot be modified because specified value is invalidORA-00823: Specified value of sga_target greater than sga_max_sizeidle>2. the difference of: show parameter log_buffer; and show
Oracle 单用户模式
Oracle 单用户模式[@more@]一般来说,Unix-like的系统都有单用户模式,那么Oracle有单用户模式吗?好像是没有的,但可以模拟。在有些情况下还是很有用的,特别是某些急需的资源经常被lock的情况下。SQLPLUS> CONNECT SYS AS sysdba;SQLPLUS> SHUTDOWN IMMEDIATE;SQLPLUS> STARTUP;SQLPLUS> SPOOL revoke_restricted_session;SQLPLUS> SELECT 'REVOKE restricted session FROM 'username ';' FROM dba_usersWHERE username NOT IN ('SYS','SYSTEM');SQLPLUS> SPOOL OFF;SQLPLUS> @revoke_restricted_session.log;SQLP
以半个小时为单位,滚动增加和删除表分区 二
以半个小时为单位,滚动增加和删除表分区[@more@]对于分区的表,如果在表上创建了global index,一段时间之后drop了一个partition,便会遇到如下错误:ORA-01502创建global index:create index TEST_MDATE_IDX on test (mdate);测试:脚本如下:#!/bin/basha=2;while (true)dolog=`sqlplus -s it01271350/it01271350 << EOFinsert into test(agent) select object_name from dba_objects where rownum <$a;commit;EOF`;echo $log;let a=${a}+1;sleep 1;echo "$a is $a";done;一个半小时后会报出如下错误:ORA-01502
ITpub 的mysql 报错
ITpub 的mysql 报错,[@more@]通过google搜索发现的:Discuz! info: MySQL Query ErrorTime: 2009-4-24 11:56amScript: /viewthread.phpSQL: insert into [Table]logreferer(datetime,keywords,ipaddress,userid,url,referer,new) values('1240545370','select+object_name+from+dba_objects+where+object_name+like+'DBMS_AQ%'+and+status++=+'INVALID';','202.42.147.164','0','/viewthread.php?tid=1019858','http://www.google.com.sg/search?q=select+object_name+from+dba_objects+where+object_name+like+%27DBMS_AQ%25%27+and+sta
找出IO最高的SQL语句和process
找出IO最高的SQL语句和process[@more@]本来写好的文章,结果session过期了。郁闷。-------------------------------------------------------------------1. 前几天在itpub上看到一个通过热块找出相关语句的sqlSELECT /*+rule*/hash_value,sql_text FROM v$sqltext WHERE (hash_value,address)IN( SELECT a.hash_value,a.address from v$sqltext a, (SELECT DISTINCT a.owner,a.segment_name,a.segment_type FROM dba_extents a
以半个小时为单位,滚动增加和删除表分区 一
以半个小时为单位,滚动增加和删除表分区[@more@]为了试验以周为单位滚动增加和删除表分区,特地做了一个以半个小时为单位滚动前进的实验。要点:1. 一天24个小时恰好可以分成48个半个小时。故不需要一个特定的时间起点。2。 注意round 和floor的区别。1. 创建配置表:drop table part_retention_t cascade constraints;--delete part_retention;create table part_retention_t (table_name varchar2(100), tablespace_name varchar(50), retention number);Insert into part_RETENTION (TABLE_NAME, TABLESPACE_NAME, RETENTION) Value
以周为单位,滚动增加和删除表分区
以周为单位,滚动增加和删除表分区[@more@]以周为单位,滚动增加和删除表分区, 保持一个13个周的时间窗。要求: 数据保留3个月,大概就是13个周。过期的数据备份后删除。这是对 快速删除大量数据 的继续。要点:1. 以'2000-01-02 00:00:00'为时间的起点,因为'2000-01-02 00:00:00'正好是周日。2. 根据当前的sysdate,找出下一个周日的时间。3. 从'2000-01-02 00:00:00'起到下一个周日,假设是n个周,n mod 13, 这样时间窗便可以滚动前进了。4. 也不用为删数据发愁了。5. 用脚本控制job正好在周日跑,傻瓜式的,不懂Oracle的人也能用。
statspack 自动规划任务失败 及对job的探讨
跑statspack的job报这个错误:*** SESSION ID:(150.26013) 2009-04-21 03:02:07.419*** 2009-04-21 03:02:07.419ORA-12012: error on auto execute of job 39380ORA-12005: may not schedule automatic refresh for times in the past[@more@]跑statspack的job报这个错误:*** SESSION ID:(150.26013) 2009-04-21 03:02:07.419 *** 2009-04-21 03:02:07.419 ORA-12012: error on auto execute of job 39380 ORA-12005: may not schedule automatic refresh for times in the past 发现了这个网页的说明:http://blog.163.com/ansel_
快速删除大量数据 续一
快速删除大量历史数据是为了提高插入的性能,最终是为了提高AQ的性能。那么在插入的过程中能不能提高一下性能呢?想法:table 的nologging 选项会对插入有什么影响呢?结果:1. 在归档模式下,只用nologging + /*+ append */配合才会产生少量的log,提高插入性能。2. 在非归档模式下,/*+ append */ 会产生较少的log,提高插入性能。3. /*+ append */ 只有在 insert into ... select 的情况下有用。4. /*+ append */ 不可用在update 语句。结论:想法失败,在想其他的吧。[@more@]快速删除大量历史数据是为了提高插入的性能,最终是为了提
快速删除大量数据
架构: 分布式系统,用AQ同步DML是实现动态数控的同步。症状:中心数据库的queue里堆积大量的数据发布出去,知道撑爆tablespace。观察: AQ job 在花大量的时间等待一个“wait for unread message on broadcast channel”事件。这是一个被定义为空闲的事件。[@more@]架构: 分布式系统,用AQ同步DML是实现动态数控的同步。症状:中心数据库的queue里堆积大量的数据发布出去,知道撑爆tablespace。观察: AQ job 在花大量的时间等待一个“wait for unread message on broadcast channel”事件。这是一个被定义为空闲的事件。找遍了google,
搬家咯
把以前零散的在其他一些地方写得东东都搬到这里咯。[@more@]把以前零散的在其他一些地方写得东东都搬到这里咯。