trigger和物化视图同步表
做了两张数据表的同步,测试刚好通过。两张测试表Create table tongbu01(id number primary key,Name varchar2(10)) Create table tongbu02 as select * from tongbu01的trigger这里我们利用tongbu01来同步tongbu02 tongbu_trigger tongbu01 inserting tongbu02 (:new.id,:new.name); updating tongbu02 =:new.id,=:new.name =:old.id =:old.name; deleting tongbu02 =:old.id =:old.name; ;; 的所有dml的相应的dml利用物化视图:语句的查询。 和on demand仅仅在物化视图需要被刷新时才进行刷新,以保证和基表数据
回南京,抓紧了!
昨天顺利回南京,这段时间大概有一个星期没有更新blog了,跟即将接触工作的同事总算交接完毕了,这段时间真没怎么好好接触oracle和更新blog了,哎,下面的日子要刻苦了,时间也不多了,还有大概不到半年的时间给我充电,然后就北漂了,所以抓紧了,今晚去淘个个人笔记本,好好利用。come on![@more@]
rman的全备份脚本和控制文件安全策略
在nocatalog模式下的备份,所有的备份信息都存储在控制文件中,所以数据库的一个完整备份集应该包括数据文件,控制文件,初始化参数文件还有所有的归档日志。Oracle 10G环境rman全备份脚本:rman>run{allocate channedl d1 device type disk;backup full tag ‘orcl’ database include current controlfile plus archivelog delete all input:}在数据库全备份完成之后,需要执行alter system archive log current命令将当前日志归档,备份归档日志应该包括最后生成的归档日志。...RMAN> backup full tag 'orcl' database include c
自动段空间管理-eygle循序渐进记载
自动段空间管理:Oracle9I后推出自动段空间管理,原来自由列表被位图所取代,通过位图能够迅速有效管理存储数据扩展和剩余区块block。 在手工管理表空间时,需要insert和delete自由列表freelist,并通过pctfree和pctused参数来判断一个block移除和加载到freelist中,这样操作肯定会带来自由列表的竞争。在ASSM管理下,insert通过扫描数据文件头部的位图查找可用block,即使可用空间低于pctfree也不会被位图上移除,因此后续的pctused参数也不再需要。低于Pctfree的数据块将用于已有数据的更新,所以freelist和freelist group参数在ASSM中都
手工管理段空间大概
oracle9I后可以对段内的数据块自动段空间管理,oracle9I前需要对段内的数据块手工管理。手工管理段空间manaual segment space management(MSSM)手工管理段空间是在段头放置一个自由列表来管理block的使用,可以把自由列表freelist想象成tables,手工管理段空间也就是insert和delete这个自由列表的block来手工管理段空间。可以create 手工管理的tablespaceCreate tablespace MSSM datafile ‘’ size 50M extent management local segment space management manual然后在MSSM中创建对象Create table MSSM(id number) tablespace MSSM在创
oracle concept——data block,extent,segment-01
现在开始再次下定决定好好看看oracle concept,几个月前看了一两天太抽象了后面就慢慢没怎么看了,要坚持啊!里面对oracle数据库体系结构和原理的讲解很全面,而且文档中有些细节后面需要再查看别的资料结合实际来验证,精度细读之.当创建一个对象表,索引或者分区表等,将会创建一个这个对象的段,如果段内空间不足将分配新的extent,但是段内的数据是通过block来管理也是最小的I/O单位。Block是数据库中的最小单位,Block中主要分为:块头:主要记录的是块的类型 块的地址表目录区:此数据块的对应的表的信息行目录区:此数据块的对应的
控制文件快照和rman利用快照恢复
Oracle中有对控制文件快照,windows中默认的存储在oracle_homedatabasesncf<sid>.ora,linux下默认的存储在oracle_home/dbs/snapcf<sid>.ora,这个控制文件快照可以用于数据库恢复。当rman需要同步控制文件信息或者备份当前控制文件时,控制文件快照会自动备份。Rman target /Rman>backup current controlfile format ‘d:control.ctl’;可以查看具体的控制文件和控制文件快照备份信息Windows下直接可以直接查看备份的控制文件属性查看和控制文件快照的默认位置查询。Linux下可以ls查看具体的控制文件备份集和会控制文件快照
rman恢复spfile和control和resetlogs创建控制文件和不完全恢复疑点
这些天太忙了,做的事情好琐碎,不过磨练毅力啊。由于在windows下启动数据库要先启动数据库服务的历程,然后启动数据库cmd>net start oracleserivetest启动数据库服务test历程Cmd>sqlplus sys/oracle as sysdbaStartup一直以为linux也和windows下启动数据库一样,需要启动服务和数据库,今天看eygle在循序渐进书中说到linux下不存在数据库服务这一说话,直接用spfile启动数据库就可以了。也难怪以前在手工创建数据库中提到了oradim,而且此工具只在windows下能使用,是一个注册服务的工具,在linux等平台下无法使用。Oradim –new –
数据库的冷备份迁移
昨天帮网友弄了一下数据库的冷备份然后迁移数据文件 控制文件 日志文件到目标服务器盘符下。1 关闭数据库Sql>Shutdown immediate此时是正常关闭数据库,buffer cache会全部写到数据文件中。2 此时把所有的数据文件 控制文件 日志文件等copy到目标的盘符下Sql>host cp /opt/app/oracle/oradata/test/*.dbf /usr/test/dbCp /opt/app/oracle/oradata/*.log /usr/test/redoCp /opt/app/oracle/oradata/*.ctl /usr/test/ctlcp spfile初始化参数文件到新的oracle_home/dbs/spfiletest.ora此时已经将数据文件 控制文件等物理的copy到新的
rman备份的策略和croosschek delete基本命令
使用rman可以对备份集进行管理,在rman配置中存储的有默认的管理备份集的信息Rman target /Show allRman的配置参数为:Configure retention policy to redundancy 1; #defaultConfigure controlfile autobackup off;…关于rman的备份集得保留策略有基于redundancy冗余和基于reocovery window恢复窗口的保留策略。此时用rman做两个全备份集Rman>run{Allocate channel d1 type disk;Backup database target=full01_test0822;}Rman>rman{Allocate channel d2 type disk;Backup database target=full02_test0822;}此时完成了一个库的两个
学习贵在坚持——效率啊
最近效率好差,要好好打起精神,oracle应该是慢慢步入快速的学习通道,最近效率好差劲,虽然跟客户的频繁要求有关,但是根本原因还是在于自己的时间规划利用上,手头上这么好的资料不好好利用真浪费。 eygle的两本好书,tom的oracle9I和10I编程艺术,一本oracle concept,书不在多在于精读细读,个人觉得上述几本书真的非常的非常的好,eygle的两本实践类型的,tom的oracle数据库体系的介绍,还有一本oracle concept的官方文档,不过eygle不适合初学者,接触oracle8个多月,也应该慢慢步入oracle的快速学习通道了,加油,真的要加油了。 明
意外删除redo的恢复
今天做了点删除redo log的测试,查阅资料和实际动手整理了一下的一些东西。A非当前联机日志被删除损坏正常关闭数据库shutdown immediate我们在os上删除logfile redo01.log,此redo log属于group 1 startup mount;startup;select * from v$logv$log视图中有column status和archived log,其中status有current当前日志组,inactive非活动日志组,active活动日志组,unused未使用日志组,archived表示是否已经归档。当然如果是当前日志组,oracle是不会对其归档的。如果此时我们删除的是非当前日志redo01.log,redo01.log已经归档了,此时启
rman备份-(1) 利用备份级恢复数据文件和控制文件
这段时间一直在练手rman恢复,由于之前对os下用户热备份的原理比较了解,陆陆续续看eygle的书然后动手,慢慢的了解rman基本的原理,还是比较有成就感的。热备份的原理是利用备份集restore(修复)数据库中数据文件 控制文件,然后通过归档日志,redo log中记载的全部数据库信息recover(恢复)重组数据文件,其中关键的有checkpoint scn等知识点。下面实际晒一下这段时间rman练手细节首先此时通过rman做了一个数据库的全备份Rman>run{Allocate channel d1 tpye disk;Backup database tag=ashuang0817;}如果是用控制文件做恢复目录,应该
几个scn和恢复的细节
前些天在看电视剧《无懈可击之高手如林》,终于速度看完了,该静下心来看看oracle了,不然年底估计完成不了俺的4本book的阅读了,这些天陆陆续续接触了rman备份的原理,其中肯定不免得接触了oracle中的scn,查阅资料当然主要是eygle的两本书的说法和itpub上网友整理的一些scn的资料。当一个checkpoint发生时有哪些scn了1 发生检查点,记录系统的检查点scn。Select name,checkpoint_change# from v$datafile2 发生检查点对数据文件的checkpoint scn更新,也就是数据文件checkpoint scn,存储在控制文件中Select name,checkpoint_change#
手工创建数据库
Oracle数据库的启动分为三个状态nomount,mount,open,三个状态需要的文件了spfile,controlfile,datafile,log file。第一次看eygle的《循序渐进》的第一章就是手工创建数据库解析。当时由于是5个月前刚接触oracle,很多东西都不会很理解,现在这几天又好好看了下,期间我也手工创建数据库一两次,晒下其中的有些注意的地方。1 首先我们先做点准备工作吧,oracle软件肯定需要安装的吧,然后数据库文件的储存目录Mkdir oracle_baseadminsfadump Mkdir oracle_baseadminsfbdump 准备用于存储警告日志文件和后台跟踪日志Mkdir oracle_base
sga的自动管理
sga自动共享内存管理sga以一定大小为单位来为各个部分分配内存空间,这个单位被称为细粒,如果sga不大于1G,那么细粒的单位就是4MB,如果大于1G,数值就可能变化了。相应的可以在v$sga_dynamic_components中的granule_size中查到具体的数值,也可以尝试手动修改一下sga_max_size的数值,再次查看v$sga_dynamic_componentsselect granule_size from v$sga_dynamic_components实际试验sga中内存的分配是否以granule细粒为单位的手动修改下shared_pool_size的大小alter system set shared_pool_size=30M;此时shared_pool_size是30M,并不是4M
接触oracle快8个月的一点心得吧
什么是oracle:不知道,就知道sql是个语言,应该跟oracle有点关系吧!呵呵!真正的意义上接触了oracle也就是今年的事吧!从最初的sql语句,肯定不能只会select * from dual了好歹后面有个where like等的条件吧。最先弄懂了的一个dml语言应该是update吧!然后insert delete最初的dml语言,还记得以前需要修改一个table中的column,用pl/sql中的for update利用隐藏锁来一行一行修改数据,真是囧!从数据库的对象table index view的创建,到procedure function然后到trigger package的创建使用,还有sequence cluster 和synonym database lin
oracle nomount小议
关于数据库的nomount状态的一点信息。数据库的启动nomount mount open三个状态,其中nomount中今天查看eygle的博客发现后台altersid.log中存在输出了pid和os id两个信息。pid代表该进程在数据库内部的进程标识符,而os id则代表该进程在操作系统上的进程标识符。SQL> startup nomount;ORACLE instance started.Total System Global Area 1073741824 bytesFixed Size 1223488 bytesVariable Size 264242368 bytesDatabase Buffers 801112064 bytesRedo Buffers 7163904 bytes此时先是oracle的sga的分配然后读取spfile中的参数System par
用户管理的热备份恢复
前天太忙了,没得时间写blog,今天一早弄完所有的事情就来更新了!昨天看了eygle的关于oracle中用户管理的热备份恢复,自己动手试了一下 成功恢复!alter tablespace users begin backuphost copy d:oracleproduct10.2.0oradatatestusers01.dbf d:users01.dbf表空间热备,这个时候我们对数据库的修改都会产生过多的redo log,是因为产生了split block,oracle为了解决split block而要在日志中记录数据块的前镜像。可以让表空间分别处于alter tablespace users begin backupalter tablespace users end backup查看下面的具体的m-n的值selec
oracle中update的细节
今天一天比较忙,不过好歹完成了一个知识点的整理oracle的更新数据的原理和其中的latch锁。 前段时间提到oracle的关于update原理,个人查阅资料,oracle中关于update 数据块时的具体步骤大家可以参考下,如果觉得有问题可以自己尝试dump下数据块来看看。 1 首先查看buffer cache中是否存在数据块,如果存在则取出不存在oracle则要数据文件中读取数据块信息 2 查看该数据块的latch锁,如果没有则oracle选择等待。 3 oracle更新该数据块,并把相应的原数据块镜像写入undo。 4 commit时oracle释放该table的lock锁资源,并释放回滚段信息,更新