总是归档错误-重置归档目录
这段时间测试redo的产生和热备期间,居然出现了一系列的重做日志块头错误导致无法归档。Sql>alter database clear unarchived logfile group 1;先后执行了清空日志组status为inactive的日志,但是再次查看v$archive_dest的归档目的都出现error,还是现实重做日志块头错误,然后又再次强制清空了几次日志还是出现了所谓的无法归档,重做日志块头错误。实在想不通为什么会出现这种情况,按理说日志组清空不会还报日志块头错误啊。SQL> select dest_id,dest_name,status,error from v$archive_dest where status<>'INACTIVE';
oracle 9.2.0.8.0的drop user而引起的ora-0060[qmxiUnpPacked2], [121], [], [], [], [], [], []
今天和同事在生产库中需要删除一个测试用户,居然碰见一个bug。Sql>drop user test cascadeOra-01001 无效游标Ora-0060内部错误代码,参数: [qmxiUnpPacked2], [121], [], [], [], [], [], [].SQL> select * from v$version; BANNER----------------------------------------------------------------Oracle9i Enterprise Edition Release 9.2.0.8.0 - ProductionPL/SQL Release 9.2.0.8.0 - ProductionCORE9.2.0.8.0 ProductionTNS for 32-bit Windows: Version 9.2.0.8.0 - ProductionNLSRTL Version 9.2.0.8.0 - Production推
深入浅出redo和undo记载03
如何高效快速插入数据,nologging+append+parallel 停掉索引和约束!下面来看看nologging和append模式下产生的redo测试!SQL> archive log list数据库日志模式 非存档模式自动存档 禁用存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 1当前日志序列 3SQL> create or replace view redo_size as select name,value from v$mystat a,v$statname b where 2 a.STATISTIC#=b.STATISTIC# and b.NAME='redo size';SQL> create public synonym redo_size for redo_size; Syno
深入浅出-redo和undo记载02
Log_buffer中的redo entries的大小是以bytes为单位,LGWR还是以redo block size为单位把redo写入磁盘,redo block size是oracle源代码固定的,跟操作系统有关,通常的操作系统都是以512bytes为单位。例如Solaris,AIX,Windows,Linux等可以从v$sysstat视图得到redo bloc sizeSQL> select value,name from v$sysstat where name in ('redo size','redo wastage','redo blocks written'); 2 / VALUE NAME---------- ---------------------------------------------------------------- 5065308 redo size 294736 redo wasta
深入浅出-redo和undo记载01
Redo和undo可以说是oracle实例回滚和事务一致性的重要依据,好在自己对于oracle的这两个理解比shared pool理解透彻,结合eygle的深入浅出这两章再次回味一下redo和undo的特性!Redo用于记录数据库的改变,redo特性有三个组件:redo log buffer重做日志缓存 lgwr后台进程用于把redo log buffer写入disk,redo log file(归档模式下arcn用于把写满的redo log file归档到归档日志下),redo中记录数据库的改变的信息以重做条目redo entries形式存储(又称redo records),redo entrie包含数据库改变的信息,其中有insert update的dml和alter
深入浅出buffer cache和shared pool记载03
还是继续整理eygle深入浅出中关于shared pool部分。Shared pool共享池,初步仅仅只是理解为sql和pl/sql 数据字典的共享区,提供代码共享,当然这也是shared pool最重要的地方。在oracle 10G后的自动sga管理,shared pool回由oracle自动管理,并不需要dba过多的设置,因为系统的业务情况也是不稳定的,buffer cache和shared pool的需求程度也不同,自动sga的管理可以按系统负载情况均衡sga的各个组件。Alter system set events ‘immediate trace name heapdump leval 2’EXTENT 8 addr=28000000 Chunk 28000038 sz= 24 R-freeabl
深入浅出cache buffer和shared pool记载02
当进程需要读取数据到buffer cache或cache buffer根据LRU算法进行管理,就会扫描LRU list获取可用buffer或更改buffer状态,此时在搜索过程中必须获取latch,锁定内存结构(latch是oracle的一种串行锁机制,保护共享内存结构),防止并发访问顺坏内存中的数据。SQL> col name for a25SQL> select addr,latch#,name,hash,gets,misses,immediate_gets,immediate_misses from v$latch where name='cache buffers lru chain'; ADDR LATCH# NAME HASH GETS MISSES IMMEDIATE_GETS IMMEDIATE
深入浅出buffer cache和shared pool记载01
开始静下心来好好看书了,再次翻看egyle的深入浅出的buffer cache于shared pool原理,看得够呛,eygle剖析得很有点深,记载以下书中的有些要点和个人理解! Sga的buffer cache对oracle体系有些了解的都了解一些,用户进程递交请求给服务器进程,服务器进程不会在disk磁盘上直接获取数据都会构造一个buffer cache的内存机构来缓存数据,数据的修改 读取都是在buffer cache获取然后写给磁盘,同样在大多数os上也是采取的缓存机制,自己最近也在看鸟哥的linux私房菜,文件系统的e2和e3正是采用的缓存机制交换数据,而且e3中还采用了oracle中的
10g windows安装db出现ora-24324
今早在windows下10G重新安装oracle数据库,往常安装数据库一般很顺利,因为是windows上不需要设置环境变量,内核参数,还有文件夹权限设置等相比linux上简单太多,不过这次貌似出现了一点小插曲,安装时候出现下列几个错误!oracle_home/cfgtoollogs/dbca有相应的dbca创建创建db的logORA-24324: 未初始化服务句柄ORA-24323: 不允许此值ORA-03113: 通信通道的文件结束这个错误自己在尝试在测试库用隐含参数_allow_resetlogs_corruption=true略去一致性然后alter database open resetlogs无法打开数据库时报错上述错误,第一次发现首次安装数
noarchivelog下rman做的冷备份ora-19602和深入浅出pga的一些摘要-02
今早pub上和一个帖子是关于noarchivelog模式下rman做的冷备份,总是出现了noarchivelog下无法备份,从冷备份的原理来说:冷备份与数据库归档模式无关,刚好自己测试也可以通过ora-19602: cannot backup or copy active file in NOARCHIVELOG mode *Cause: You tried to copy or backup a file that was not closed cleanly, and the database was in NOARCHIVELOG mode. This is not allowed because when restored, the file will require redo application before it is usable, and redo is not currentl
深入浅出sga和pga章节记载-01
今早重新又翻看了eygle的深入浅出的关于sga和pga的章节,对于sga和pga如何设置可以说一直没有什么定性的标准,这里先说一下关于自动管sga和pga管理中参考的两个视图v$sga_target_advice和v$pga_target_adviceSQL> desc v$sga_target_advice;Name Type Nullable Default Comments ------------------- ------ -------- ------- -------- SGA_SIZE NUMBER Y SGA_SIZE_FACTOR NUMBER Y 此表中的sga_size和当前parameter中sga大小比值ESTD_DB_TIME NUMBER Y
深入浅出-检查点scn
最近又开始重新查看eygle的深入浅出了,大师的书籍确实值得一读再读,这里摘要下大师的第一张数据库启动关闭的一些个人觉得需要细细理解的知识点。checkponit cnt在open状态检验我们说过:当我们使用file_hdrs事件来转储数据文件头信息时,Oracle会转储两部分信息,一部分来自控制文件,一部分来自数据文件,在数据库启动过程中,这两部分信息要用来进行启动验证。在数据库open的过程中,Oracle要进行检查中包含以下两个过程:第一次检查数据文件头中的Checkpoint cnt是否与对应控制文件中的Checkpoint cnt一致.如果相等,进行第二次检查.第二
exp和expdp排除部分表
两种导出工具exp和expdp,数据磊工具确实好用,不管是在性能还是在功能上都比exp等导出工具强大,不过需要在服务器端运行,利用oracle内部的队列和任务job机制,听到很多网友说到如何去除部分表或者部分对象导出,这个如果在expdp中可以很简单的实现。Expdp ashuang/ashuang@orcl dumpfile=test01.dmp logfile=test01.log exclude=trigger,table:”in(‘SF01’,’SF02’)”总是出现了所谓的ora-39001参数值无效ora-39071 exclude值的格式错误找了半天还是找不出这个格式哪里写错了,网上收索了下又是该死的转义字符,记得以前写query时就是
redo的等待log file sync和log file parallel write和redo size设置
今早上pub,看到pub的一篇帖子中提到了如何设置redo log的大小,利用视图v$log_history可以查看redo的切换的具体信息来判断。Select round(first_time,’DD’),thead#,count(sequence#) from v$Log_history group round(first_time,’DD’),thread#order by 1,2主要是通过每天的日志切换量来判断。select a.recid,a.first_time,b.first_time last_time,(b.first_time-a.first_time)*24 redo_replacefrom v$log_history a,v$log_history bwhere a.recid=b.recid-1order by a.first_time desc这个sql可以查出两个日志切换时间间隔,单位时
性能调整记载02
接着对oracle性能调整记载(二)Disk_asynch_io,dbwr_io_slaves和异步I/O异步I/O是线程发送一个I/O请求到内核,然后就可以处理其他的事情了,内核完成I/O请求后,将会通知线程I/O操作完成。同步I/O是线程发送一个I/O请求到内核就进入等待状态,知道I/O操作完成后才继续执行别的事情。Dbwr_io_slaves主要用于模拟异步环境,DB_WRITER_PROCESSES,和DBWR_IO_SLAVES是有区别的。DB_WRITER_PROCESSES生成多个DBWR进程;而DBWR_IO_SLAVES生效时,只有一个DBWR进程,仅当系统需要时,才生成多个DBWR从属进程。(默认dbwr_io_slaves为0,可见一般
性能调整篇01
最近在看某某大牛的性能调整篇,结合个人理解和熟悉陆续会整理一系列的性能调整方面的理解。接触oracle大半年了,32位oracle和64位oracle,最近才摸清这缘由。32位系统肯定只能安装32位的oracle,不过32位的oracle使用的内存有限(大概只有1.7G),就是即使再多的物理内存也没办法真正使用,这在大型数据库中的性能扩展可想而知。64位系统安装了64位oracle,oracle使用的内存也没有上限,所以企业一般都是64位的吧!锁定内存到物理内存sga_lock:说到了内存,这些天看oracle-concepts有个参数sga_lock的主要适用于锁定oracle所使用的内存存
profile资源限制基础记载
Profile资源限制Show parameter resource_limit.默认在数据库中resource_limited=false限制了资源限制Alter system set resource_limit=true开启资源限制。一般create profile命令Create profile test01_profile limitSessions_per_user 4 –user并行的最大连接数,当超过这个并行连接数时会出现ORA-02391 exceeded simultaneous SESSIONS_PER_USER limitConnect_time 60 –一个连接session的最长连接时间,超过后会断开,回滚当前事务,单位为分钟。Idle_time 10—一个连接session的最长空闲时间,当超过idle_time时会断开,回滚当前事务
直接加载和并行-02
还是继上次说说并行parallel,首先并行原理是:oracle创建一个进程用于协调并行服务进程之间的信息和任务分配,把一个任务分割成很多小任务分配给并行服务进程,并行进程同时处理各自分配任务,直到任务全部结束,最后协调进程负责将各进程任务合并为最终执行结果返回给用户。并行在OLAP用的比较多,OLAP系统表一般为大表,OLTP上的表很多都以索引访问为主,不过一切都要看实际业务情况,一般如果有多cpu,操作的对象很大开启并行是可以明显提高效率的。一个查询的parallelAlter table tt01 parallel 2;SQL> select count(*) from tt01
直接加载和并行记载-01
不久之前记得做过几个测试关于nologging和append的产生redo的。看并行和直接加载刚好有点需要记载的地方就贴blog上了。直接路径加载将直接绕过buffer cache将数据直接写入磁盘。而且会把数据写入HWM以上的数据块中,所以一般直接路径加载速度上可能比常规加载快。直接路径加载既可以并行 也可以串行,对分区表和普通表都可以。Insert /*+append*/ into tt07 select * from dba_objects当然如果是insert into …values单条插入方式,oracle10G中没有此项功能,网友说到在11G中可以insert /*+append_values*/ into tt07 values( ),不过个人没
concept方案对象-01
方案定义:方案是一个逻辑数据结构集合,每个user都有一个同名的方案,方案对象就是方案下的对象,例如user用户的user方案的下的table,view等对象。方案schema和user区别不过有点区别的是创建一个user后,当前user下没有对象,此时并不存在此user的方案schema,方案诞生与user下的第一个对象的创建。行的格式容量:数据行片断:Oracle使用一个或多个行片断存储每一行数据。当一个数据块可以容纳一个数据行时(且表的列数小于256)此数据行就只用了一个数据行片断。当一个数据块无法容纳一条数据行时,oracle将使用多个行片断存储这一条数