创建逻辑stand by数据库
1 准备工作 1.1 第一步:确定主数据库中是否包含逻辑standby数据库不支持的数据类型和表。 以下是逻辑standby数据库支持的类型: CHAR NCHAR VARCHAR2 and VARCHAR NVARCHAR2 NUMBER DATE TIMESTAMP TIMESTAMP WITH TIME ZONE TIMESTAMP WITH LOCAL TIME ZONE INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND RAW CLOB BLOB 逻辑standby数据库不支持的类型包括: NCLOB,LONG,LONG RAW, BFILE, ROWID和UROWID,以及用户自定义的类型,包括对象类型,REF类型,varray和嵌套表。
通过streams replication实现Oracle和SQL Server之间异构数据同步
关于streams replication的原理本文就不做介绍了,相关文章可以在OTN和metalink上找到。本文主要介绍通过streams replication和transparent gateway实现Oracle向SQL Server的数据同步的配置过程。主要参考了metalink上的文章,并在期间开了4个SR解决发现的问题(并发现新bug一个)。 一、测试环境: Oracle DB Server: 9205, SID: ORA92, Host: ORATEST(192.168.111.22), schema: orarepSQL Server: 2000, DB: pubs, Host: SQLTEST,(192.168.111.11) schema: sqlrepOracle 透明网关:10gR2 二、透明网关的配置 将Oracle transpar
关于Oracle临时表数据cache的研究
Global Temporary Table是Oracle 8i中出现的特性,可以用于存储事务或会话中的临时数据。它的出现大大方便了开发人员。但是在使用上面,由于它本身的特性,一直存在一些问题。 简单说一下临时表,它的数据只对调用它的会话可见,一个会话是无法访问其他会话中的临时表的数据。可以在创建时指定它是事务级的还是会话级的。它被创建在用户的默认临时表空间上,在创建时不会分配段,而是在会话中第一次insert的时候从零时表空间分配数据段。DML时,不会产生redo log,但是会产生undo log。并且无法生成临时表或者临时表上索引的统计信息(势
关于事务对数据块的操作过程的分析和试验(1)
事务和数据块 这里主要想通过试验来推断Oracle的事务在数据块(Oracle中存储的最小单位)上一些微观操作,以便于更好的理解Oracle的事务控制、一致性处理及锁冲突。 创建测试表:SQL> create table t_multiver (a number, b number); Table created. SQL> insert into t_multiver values (1,1); 1 row created. SQL> insert into t_multiver values (2,2); 1 row created. SQL> insert into t_multiver values (3,3); 1 row created. SQL>SQL> commit; Commit complete. 首先,看一下数据块上和记录有关
Dual 表的性能优化
Dual表示一个特殊的系统,它只有一个字段、一条记录。在我们的代码中,经常会利用它产生一些特殊值,比如系统时间:select sysdate from dual; 正常情况下,以上语句会对dual表做一次全表扫描,产生3 consistent gets。这是一个很小的数值。但是如果放在一个大循环内,就会产生非常大的consistent gets(实际上,我们的系统就出现过这样的问题)。 如何来优化它呢,consistent gets即时只降低1,在一个大循环中都将会是一个非常大值。首先看一下sql trace:SQL> select sysdate from dual; Execution Plan-----------------
安装配置ultra search
1. 安装ultra search组件 从Oracle网站上下载oracle10g companion安装。 重启数据库;SQL> startup force 2. 安装Oracle Text 10g a) 创建Oracle Text对象SQL> connect SYS/password as SYSDBASQL> spool text_install.txtSQL> @?/ctx/admin/catctx.sql CTXSYS SYSAUX TEMP UNLOCK 其中,CTSYS是用户CTSYS的密码,SYSAUX是其所在表空间,TEMP是其临时表空间,LOCK是CTSYS创建后是否锁住。 检查日至是否有错误,如果出错,卸载Oracle Text 10g(见),重启数据库,从第二步重新开始。 b) 安装Oracle Text语种支持
TX锁(Transaction Lock)分析
前两天看到现场alert日志中有一些00060(Deadlock)的告警。查了一下日志文件,发现一些奇怪的现象,比如有些锁在Insert时产生的,有些死锁是对同一个对象产生的。于是在解决这些问题的同时,仔细研究了一下TX锁,总结了产生TX锁的各种情况。 数据记录被锁 我们知道,Oracle中事务产生的索都是行级锁。也就说,事务在对表做更新操作(Update、Delete)时,只在针对数据块中需要更新的数据记录加锁。这种类型的锁就是我们最常见的锁。看下面的例子:SQL> create table t_lock(a number, b varchar2(20), c char(10)) initrans 1 max
利用Ultra Search创建自己的桌面文档搜索系统
以下是创建步骤(安装Ultra Search过程参见我的另外一篇文章《安装配置ultra search》): 创建一个数据库用户 Sqlplus “/as sysdba” SQL> Create user demo identified by demo; SQL> grant WKUSER to demo; 启动Ultra Search Searchctl start 登录http://localhost:5620/ultrasearch/admin/ User Name: WKSYS Password: WKSYS 创建Instance Admin->Instance->Create->Create Instance 内容如下: New Instance Name: Demo_Inst Database Schema: Demo Schema Password: Dem
查询计划中集的势(Cardinality)的计算
当使用CBO模式的优化器时,oracle在生成查询计划时,会计算各个访问路径的代价,选择代价最小的访问路径作为查询计划。这个选择过程我们可以通过做一个10053的trace来观察。 在做代价估算时,有一个很重要的参数作为代价计算的因数,这就扫描字段的集的势(cardinality)。那么这个值是如何计算的呢?这个值的计算根据索引情况及查询条件不同而不同,因而它的计算也比较复杂。下面我们只讨论在使用绑定变量的情况下集的势的计算。 集的势总的计算公式是: 集的势 = MAX(集的势因子 * 记录数, 1) 可以看出,影响集的势的值的主要
什么时候使用绑定变量性能反而更差
当我在做培训时,在解释绑定变量的好处时,大家都比较容易理解。但是,对于并不是任何时候绑定变量都是最优的。这一点很多人不是和理解。下面就讨论一下在什么时候会出现绑定变量会使性能变差。 扫描成本和OPTIMIZER_INDEX_COST_ADJ 我们知道,在CBO模式下,Oracle会计算各个访问路径的代价,采用最小代价的访问路径作为语句的执行计划。而对于索引的访问代价的计算,需要根据一个系统参数OPTIMIZER_INDEX_COST_ADJ来转换为与全表扫描代价等价的一个值。这是什么意思呢?我们先稍微解释一下这个参数:OPTIMIZER_INDEX_COST_ADJ。它的值是
Oracle内存全面分析(1)
Oracle的内存配置与oracle性能息息相关。而且关于内存的错误(如4030、4031错误)都是十分令人头疼的问题。可以说,关于内存的配置,是最影响Oracle性能的配置。内存还直接影响到其他两个重要资源的消耗:CPU和IO。 首先,看看Oracle内存存储的主要内容是什么: 程序代码(PLSQL、Java); 关于已经连接的会话的信息,包括当前所有活动和非活动会话; 程序运行时必须的相关信息,例如查询计划; Oracle进程之间共享的信息和相互交流的信息,例如锁; 那些被永久存储在外围存储介质上,被cache在内存中的数据(如redo log条目
Oracle 11g 新特性
Oracle 11g现在已经开始进行beta测试,预计在2007年底要正式推出。和她以前其他产品一样,新一代的oracle又将增加很多激动人心的新特性。下面介绍一些11g的新特性。 1. 数据库管理部分 · 数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负责以测试系统调优后的效果。 · SQL重演(SQL Replay) 和前一特性类似。但是只是捕捉SQL负载部分,而不是全部负载。 · 计划管理(Plan Management) 这一
Oracle时间类型数据为0的bug
开发组在数据迁移时,报告发现一些数值为'0000/00/00'的date数据,导致数据迁移失败。 这个问题有点奇怪,因为在Oracle中,date类型的数据的取值范围是从-4712/12/31到9999/12/31之间,并且年份不能为0。也就是说'0000/00/00'是一个非法数据,不为oracle所接受。 SQL> select to_date('0000-00-00', 'yyyy-mm-dd') from dual; select to_date('0000-00-00', 'yyyy-mm-dd') from dual ORA-01843: not a valid month SQL> select to_date('0000-01-01', 'yyyy-mm-dd') from dual; select to_date('0000-01-01', 'yyyy-mm-dd') from
利用statspack来获取生成环境中top SQL及其执行计划
在一些特殊情况下,生产环境中top SQL会让DBA捉摸不定。比如一个由复杂分支条件所生成的动态语句;第三方软件或者代码本身对会话环境进行了修改,导致无法正确重现问题语句的查询计划;语句过长导致无法获取正确的全部语句,等等。这时,我们可以考虑设置statspack为更高级别(默认级别为5),以获取相关语句的详细信息。具体过程如下: 获取级别6的statspack的快照: SQL> exec statspack.SNAP(i_snap_level => 6); N分钟后…. SQL> exec statspack.SNAP(i_snap_level => 6); 获取statspack报告 SQL&
两个触发器的例子
为测试建立两张表:表db1与表db2;触发器newjd所完成的功能是,只要向表db1插入一条数据就向表db2复制一条记录;触发器trg所完成的功能是,当表bd2最大日期与最小日期相差40天时,清除较早的30天的记录;代码如下 -----表1的触发器CREATE TRIGGER newjd ON db1 FOR INSERT AS Declare @time1 datetime , @a char(10) , @b char(10) Select @time1 = inserted.timetest , @a = inserted.a , @b = inserted.b from db1,inserted where db1.timetest = inserted.timetestinsert into db2 values(@time1,@a,@b)go-----表2的
PC保养秘诀
PC保养秘诀 - 日常保养不能松懈 PC保养秘诀 - 环境对PC寿命的影响不能忽视,这是PC保养的外部因素。PC理想工作温度在10℃-30℃,太高、太低均会影响计算机配件寿命。相对湿度在30%-80%,太高会影响CPU、显卡等部件的性能发挥,或引起短路。 PC保养秘诀 - 太低容易产生静电,对配件使用也不利。另外,空气的灰尘含量对PC的影响也很大。灰尘很多,时间长了便会腐蚀各种部件;含量过少,就会产生静电反应。所以PC的房间最好保持干净整洁。 有可能认为使用PC的次数越少,就越能延长PC的寿命,这是片面的观点;相
Java + XML = JDOM
这就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML,你就会知道为 什么要有JDOM或者是JAXB。在今年(2002)的JavaOne会议上JDOM的主要创始人Jason Hunter有一篇精彩的演讲介绍了 JDOM技术,题目就是JDOM Makes XML Easy。 获得并安装JDOM 在http://jdom.org可 以下载JDOM的最新版本。以JDOM beta8的2进制版本为例。下载后解压缩,JDOM的jar文件就是build目录下的文件jdom.jar, 将之加入类路径。另外 JDOM还需要lib目录下那些jar文件如xerces.jar,jaxp.jar的支持。如果在使用中出现以下错误: java.lang.NoSuch
PHP5中的类与对象
PHP5中对类的属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。对类成员的访问控制类成员都必须使用关键字public、protected 或 private 进行定义 声明类成员 <?php/** Define MyClass */class MyClass{ public $public = 'Public'; protected $protected = 'Protected'; pri
更改文件夹和分区图标
打开记事本,输入下面几行内容: [.ShellClassInfo] InfoTip=我的WORD文件夹 IconIndex=0 IconFile=C:Program FilesMicrosoft Office2000OfficeWinWord.exe 其中InfoTip后面输入的是这个文件夹的说明文字,如果这个文件夹 是创建在桌面上的,把鼠标移到这个文件夹上,你输入的说明文字就会做 为提示文字显示出来,就像“我的电脑”一样。 IconFile后面输入的是文件夹图标的名字,可以把图标放在这个文件 夹中,然后就像我上面输入的一样,也可以输入完整的路径。文件名可以 是exe,dll,ico,icl,ani等等包含图标的文件。 Icon
关于游标的一点发现
创建显性游标:create or replace procedure test is cursor test1 is select name from devp;test2 devp.name%type;beginopen test1;loopfetch test1 into test2;dbms_output.put_line(test2); --注意,此处用的是test2变量exit when test1%notfound;end loop; close test1;end;/create or replace procedure test is cursor test1 is select name from devp;test2 test1%rowtype;beginopen test1;loopfetch test1 into test2;dbms_output.put_line(test2.name); --注意,此处用的是test2.nameexit when test1%notfound;en