Linux下硬盘分区的最x?/B> |
oracle的体pd庞大了,对于初学者来_(d)隑օ?x)有些无从下手的感觉Q什么都惛_Q结果什么都学不好,所以把学习(fn)l验׃n一下,希望让刚刚入门的人对oracle有一个M的认识,走一些弯路?
一、定?
oracle分两大块Q一块是开发,一块是理。开发主要是写写存储q程、触发器什么的Q还有就是用Oracle的Develop工具做form。有点类gE序员,需要有较强的逻辑思维和创造能力,个h觉得?x)比较辛苦,是青春饭JQ管理则需要对oracle数据库的原理有深ȝ认识Q有全局操纵的能力和紧密的思维Q责任较大,因ؓ(f)一个小的失误就?x)down掉整个数据库Q相对前者来_(d)后者更看重l验?
因ؓ(f)数据库管理的责Q重大Q很公司愿意请一个刚刚接触oracle的hȝ理数据库。对于刚刚毕业的q轻人来_(d)可以先选择做开发,有一定经验后转型Q去做数据库的管理。当?dng)q个q是要看Z的实际情冉|定?/P>
二、学?fn)方?nbsp;
我的Ҏ(gu)很简单,是Q看书、思考、写W记、做实验、再思考、再写笔?
看完理论的东西,自己静下心来xQ多问自己几个ؓ(f)什么,然后把所学和所想的知识点做个笔讎ͼ在想不通或有疑问的时候,做做实验,x怎么?x)这P同样的,把实验的l果C来。思考和做实验是Z深入的了解这个知识点。而做W记的过E,也是理清自己思\的过E?
学习(fn)的过E是使一个问题由模糊到清晎ͼ再由清晰到模p的q程。而每ơ的改变都代表着你又学到了一个新的知识点?
学习(fn)的过E也是从点到U,从线到网Q从|到面的q程。当点变成线的时候,你会(x)有总豁然开朗的感觉。当|到面的时候,你就是高手了
很多|友Q特别是初学的hQ一到问题拿到论坛上来问Q在问前Q你有没有查q书Q自己有没有研究q,有没有搜索一下论坛?q就叫思维惰性。由别h来回{你的问题,?x)让你在短时间内不费劲地弄懂q个知识点,然而通过自己的努力去研究它,不但?x)更深入的了解这个知识点Q更重要的是在研I的q程?x)提高你解决问题和分析问题的能力。ȝ来说Q没有钻研的学习(fn)态度Q不学什么东西,都不?x)成功的?
当然Q初学的人很多时候是因ؓ(f)遇到问题Ӟ无从下手Q也不知道去哪里找资料,才会(x)到论坛上提问题的。但我认为,在提问的时候,是不是可以问别h是如何分析这个问题?从哪里可以找到相关的资料Q而不是这个问题的{案是什么?授h以鱼不如授h以渔?/P>
下面我讲下我处理问题的过E?/P>
首先要知道oracle的官方网站:(x)www.oracle.com q里有oracle的各U版本的数据库、应用工具和权威的官Ҏ(gu)档。其ơ,q要知道http://metalink.oracle.com/q里是买了oracle服务或是oracle的合作伙伴才可以q去的,里面有很多权威的解决Ҏ(gu)和补丁。然后就是一些著名网站:(x)asktom.oracle.com www.orafaq.net, www.dbazine.com。这里有很多l验之谈?/P>
遇到问题了。如果是概念上的问题Q第一旉可以找tahiti.oracle.comQ这里会(x)l你最详细的解释。如果在q行的过E中Z什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当然。这里只是相对而言?/P>
三、oracle的体p?
oracle的体pd庞大Q要学习(fn)它,首先要了解oracle的框架。在q里Q简要的讲一下oracle的架构,让初学者对oracle有一个整体的认识?
1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成)(j)
控制文gQ包含维护和验证数据库完整性的必要信息、例如,控制文g用于识别数据文g和重做日志文Ӟ一个数据库臛_需要一个控制文?
数据文gQ存储数据的文g
重做日志文gQ含Ҏ(gu)据库所做的更改记录Q这样万一出现故障可以启用数据恢复。一个数据库臛_需要两个重做日志文?
参数文gQ定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大的参数
归档文gQ是重做日志文g的脱机副本,q些副本可能对于从介质失败中q行恢复很必要?
密码文gQ认证哪些用h权限启动和关闭Oracle例程
2、逻辑l构Q表I间、段、区、块Q?
表空_(d)(x)是数据库中的基本逻辑l构Q一pd数据文g的集合?
D:(x)是对象在数据库中占用的空?
区:(x)是ؓ(f)数据一ơ性预留的一个较大的存储I间
块:(x)ORACLE最基本的存储单位,在徏立数据库的时候指?
3、内存分配(SGA和PGAQ?
SGAQ是用于存储数据库信息的内存区,该信息ؓ(f)数据库进E所׃n。它包含Oracle 服务器的数据和控制信? 它是在Oracle 服务器所ȝ的计机的实际内存中得以分配Q如果实际内存不够再往虚拟内存中写?
PGAQ包含单个服务器q程或单个后台进E的数据和控制信息,与几个进E共享的SGA 正相反PGA 是只被一个进E用的区域QPGA 在创E时分配在终止进E时回收
4、后台进E(数据写进E、日志写q程、系l监控、进E监控、检查点q程、归档进E、服务进E、用戯E)(j)
数据写进E:(x)负责更改的数据从数据库~冲区高速缓存写入数据文?
日志写进E:(x)重做日志缓冲区中的更改写入在线重做日志文g
pȝ监控Q检查数据库的一致性如有必要还?x)在数据库打开时启动数据库的恢?
q程监控Q负责在一个Oracle q程p|时清理资?
(g)查点q程Q负责在每当~冲区高速缓存中的更Ҏ(gu)久地记录在数据库中时,更新控制文g和数据文件中的数据库状态信息?
归档q程Q在每次日志切换时把已满的日志组q行备䆾或归?
服务q程Q用戯E服务?
用户q程Q在客户端,负责用L(fng)SQL 语句传递给服务q程Qƈ从服务器D|回查询数据?
5、oracle例程QOracle 例程由SGA 内存l构和用于管理数据库的后台进E组成。例E一ơ只能打开和用一个数据库?
6、SCN(System Change Number)Q系l改变号Q一个由pȝ内部l护的序列号。当pȝ需要更新的时候自动增加,他是pȝ中维持数据的一致性和序恢复的重要标志?/P>
四、深入学?nbsp;
理Q可以考OCP证书Q对oracle先有一个系l的学习(fn)Q然后看Oracle Concepts、oracle online document,对oracle的原理会(x)有更深入的了解,同时可以开始进行一些专题的研究如:(x)RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&RECOVER{等?
开发:(x)对于惛_Oracle开发的Q在了解完Oracle基本的体pȝ构之后,可以重点xPL/SQL?qing)Oracle的开发工兯一部分?PL/SQL主要是包括怎么写SQL语句Q怎么使用Oracle本n的函敎ͼ怎么写存储过E、存储函数、触发器{?Oracle的开发工具主要就是Oracle自己的Developer SuiteQOracle Forms Developer and Reports Developerq些Q,学会(x)如何熟练使用q些工具?/P>
介绍几本oracle入门的好?/P>
oracle官方文档Q《concept》上面讲了oracle的体pd概念Q很适合初学者看?/P>
OCP的教学用书,也就是STUDY GUIDE(SG)?BR>Oracle8i 备䆾恢复手册
Oracle8高理与优?BR>Oracle8i PLSQLE序设计
Oracle8数据库管理员手册
以上书本都是机械工业出版Cև版?BR>
介绍几个|站
http://tahiti.oracle.com oracle的官Ҏ(gu)?
现在http://www.oracle.com.cn/onlinedoc/index.htm也有官方文档Q速度奇快
http://metalink.oracle.com/ oracle的技术支持网站。需要购买Oracle服务才能有一个帐P才能登陆Q有大量的Knowledge BaseQ大量问题解决经验?
http://www.oracle.com oracle的官方网站,可以在这里down oracle的Y件、官Ҏ(gu)档和获得最新的消息
http://www.dbazine.com/ Oracle的杂?
http://asktom.oracle.com
http://www.orafaq.net/
http://www.ixora.com.au/
http://www.oracle-base.com
http://www.dba-oracle.com/oracle_links.htm
一个表I间只能属于一个数据库
每个数据库最有一个控制文Ӟ3个,分别攑֜不同的磁盘上Q?
每个数据库最有一个表I间QSYSTEM表空_(d)(j)
建立SYSTEM表空间的目的是尽量将目的相同的表存放在一P以提高用效率,只应存放数据字典
每个数据库最有两个联机日志l,每组最一个联机日志文?
一个数据文件只能属于一个表I间
一个数据文件一旦被加入C个表I间中,׃能再从这个表I间中移赎ͼ也不能再加入到其他表I间?
建立新的表空间需要徏立新的数据文?
数据文g被ORACLE格式化ؓ(f)ORACLE块,Oracle9i以前版本中,ORACLE块的大小是在W一ơ创建数据库时设定的Q?
q且以后不能改变Q要x变,只能重徏数据?
一个段segment只能属于一个表I间Q但可以属于多个数据文g
一个区extent只能属于一个数据文Ӟ卛__(d)extentQ不能跨数据文?
PCTFREE和PCTUSEDd不能大于{于100
单独一个事务不能跨多个回滚段
索引表不含ROWID?
拥有不同大小的回滚段没有M益处
COMMIT后,数据不一定立卛_盘(数据文gQ?
一个事务即使不被提交,也会(x)被写入到重做日志中?
Oracle 8.0.4中,在初始安装时建立的缺省数据库Q实例名为ORCL
一个块的最大长度ؓ(f)16KB(?K?K?K?6K)
每个数据库最大文件数Q按块大)(j)
2K块 20000个文?BR> 4K块 40000个文?BR> 8K块或以上 65536个文?BR>
oracle server可以同时启动多个数据?
一套操作系l上可以安装多个版本的ORACLE数据库系l(UNIX可以QNT不可以)(j)
一套ORACLE数据库系l中可以有多个ORACLE数据库及(qing)其相对应的实?
每个ORACLE数据库拥有一个数据库实例QINSTANCEQ(OPS除外Q?
所以,一套操作系l上同时可以有多个oracle数据库实例启?
【点击:(x) ?阿木??/A> |
配置Q? Windows NT 4.0 中文? 5?0.2GB SCSI盘 分:(x)C:盘、D:盘、E:盘、F:盘、G:? Oracle 8.0.4 for Windows NT NT安装在C:\WINNTQOracle安装在C:\ORANT 目标Q? 因系l的回滚D太,现打生成新的回滚段Q? 建立大的、新的表I间Q数据表I间、烦(ch)引表I间、回滚表I间、(f)时表I间、)(j) Z个数据表I间、两个烦(ch)引表I间Q这样徏的目的是Ҏ(gu)实际应用Q? 如:(x)现有10个应用用P每个用户是一个独立子pȝQ如Q商业进销存MISpȝ中的财务、收ƾ、库存、h事、ȝ理等Q? 其大型商场中收ƾ机众多Q同时访问进E很多,l常辑ֈ50-100个进E同时访问, q样Q通过建立多个用户表空间、烦(ch)引表I间Q把各个用户分别建在不同的表I间里(多个用户表空间放在不同的物理盘上)(j)Q? 减少了用户之间的I/O竞争、读写数据与写读索引的竞争(用户表空间、烦(ch)引表I间也分别放在不同的物理盘上)(j) 规划Q? C:盘、NTpȝQOraclepȝ D:盘、数据表I间1Q?GB、自动扩展)(j)、回滚表I间1Q?GB、自动扩展)(j) E:盘、数据表I间2Q?GB、自动扩展)(j)、回滚表I间2Q?GB、自动扩展)(j) F:盘、烦(ch)引表I间1Q?GB、自动扩展)(j)、(f)时表I间1Q?.5GB、不自动扩展Q? G:盘、烦(ch)引表I间2Q?GB、自动扩展)(j)、(f)时表I间2Q?.5GB、不自动扩展Q? 注:(x)q只是一个简单的规划Q实际规划要依系l需求来定,量减少I/O竞争 实现Q? 1、首先查看系l有哪些回滚D及(qing)其状态? SQL> col owner format a20 SQL> col status format a10 SQL> col segment_name format a20 SQL> col tablespace_name format a20 SQL> SELECT OWNER,SEGMENT_NAME,TABLESPACE_NAME,SUM(BYTES)/1024/1024 M 2 FROM DBA_SEGMENTS 3 WHERE SEGMENT_TYPE='ROLLBACK' 4 GROUP BY OWNER,SEGMENT_NAME,TABLESPACE_NAME 5 / OWNER SEGMENT_NAME TABLESPACE_NAME M -------------------- -------------------- -------------------- --------- SYS RB1 ROLLBACK_DATA .09765625 SYS RB10 ROLLBACK_DATA .09765625 SYS RB11 ROLLBACK_DATA .09765625 SYS RB12 ROLLBACK_DATA .09765625 SYS RB13 ROLLBACK_DATA .09765625 SYS RB14 ROLLBACK_DATA .09765625 SYS RB15 ROLLBACK_DATA .09765625 SYS RB16 ROLLBACK_DATA .09765625 SYS RB2 ROLLBACK_DATA .09765625 SYS RB3 ROLLBACK_DATA .09765625 SYS RB4 ROLLBACK_DATA .09765625 SYS RB5 ROLLBACK_DATA .09765625 SYS RB6 ROLLBACK_DATA .09765625 SYS RB7 ROLLBACK_DATA .09765625 SYS RB8 ROLLBACK_DATA .09765625 SYS RB9 ROLLBACK_DATA .09765625 SYS RB_TEMP SYSTEM .24414063 SYS SYSTEM SYSTEM .1953125 查询?8记录. SQL> SELECT SEGMENT_NAME,OWNER, 2 TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS 3 FROM DBA_ROLLBACK_SEGS 4 / SEGMENT_NAME OWNER TABLESPACE_NAME SEGMENT_ID FILE_ID STATUS -------------------- -------------------- -------------------- ---------- --------- ---------- SYSTEM SYS SYSTEM 0 1 ONLINE RB_TEMP SYS SYSTEM 1 1 OFFLINE RB1 PUBLIC ROLLBACK_DATA 2 3 ONLINE RB2 PUBLIC ROLLBACK_DATA 3 3 ONLINE RB3 PUBLIC ROLLBACK_DATA 4 3 ONLINE RB4 PUBLIC ROLLBACK_DATA 5 3 ONLINE RB5 PUBLIC ROLLBACK_DATA 6 3 ONLINE RB6 PUBLIC ROLLBACK_DATA 7 3 OFFLINE RB7 PUBLIC ROLLBACK_DATA 8 3 OFFLINE RB8 PUBLIC ROLLBACK_DATA 9 3 OFFLINE RB9 PUBLIC ROLLBACK_DATA 10 3 OFFLINE RB10 PUBLIC ROLLBACK_DATA 11 3 OFFLINE RB11 PUBLIC ROLLBACK_DATA 12 3 OFFLINE RB12 PUBLIC ROLLBACK_DATA 13 3 OFFLINE RB13 PUBLIC ROLLBACK_DATA 14 3 OFFLINE RB14 PUBLIC ROLLBACK_DATA 15 3 OFFLINE RB15 PUBLIC ROLLBACK_DATA 16 3 OFFLINE RB16 PUBLIC ROLLBACK_DATA 17 3 OFFLINE 查询?8记录. 2、修改代码如下,可把以下代码存入一.sql文gQ如cg_sys.sqlQ然后以SQL> @cg_sys.sql调用执行? --注意Q各个硬盘上要事先徏好oradata目录 --修改现有回滚D,使之失效Q下U? alter rollback segment rb1 offline; alter rollback segment rb2 offline; alter rollback segment rb3 offline; alter rollback segment rb4 offline; alter rollback segment rb5 offline; alter rollback segment rb6 offline; alter rollback segment rb7 offline; alter rollback segment rb8 offline; alter rollback segment rb9 offline; alter rollback segment rb10 offline; alter rollback segment rb11 offline; alter rollback segment rb12 offline; alter rollback segment rb13 offline; alter rollback segment rb14 offline; alter rollback segment rb15 offline; alter rollback segment rb16 offline; --删除原有回滚D? drop rollback segment rb1; drop rollback segment rb2; drop rollback segment rb3; drop rollback segment rb4; drop rollback segment rb5; drop rollback segment rb6; drop rollback segment rb7; drop rollback segment rb8; drop rollback segment rb9; drop rollback segment rb10; drop rollback segment rb11; drop rollback segment rb12; drop rollback segment rb13; drop rollback segment rb14; drop rollback segment rb15; drop rollback segment rb16; --建数据表I间1 --收款、库存、订货、远E通信 create tablespace USER_DATA1 datafile 'd:\oradata\user1_1.ora' size 512M, 'd:\oradata\user1_2.ora' size 512M, 'd:\oradata\user1_3.ora' size 512M, 'd:\oradata\user1_4.ora' size 512M, 'd:\oradata\user1_5.ora' size 512M, 'd:\oradata\user1_6.ora' size 512M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED default storage (initial 128K next 2M pctincrease 0); --initial 128KQ因为,用户建在表空间上Q而表建在用户里,为用h拥有Q? --用户l承数据表空间的存储参数Q表l承用户的存储参? --如果initial讄q大Q如Q?MQ则每徏一个空表就要占?M的空_(d)即一条记录也没有 --AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITEDQ设|数据文件自动扩展,每一ơ扩展增?MQ最大空间不受限 --建数据表I间2 --物h(hun)、h事、结、胦(ch)务、ȝ理、合同、统? create tablespace USER_DATA2 datafile 'e:\oradata\user2_1.ora' size 512M, 'e:\oradata\user2_2.ora' size 512M, 'e:\oradata\user2_3.ora' size 512M, 'e:\oradata\user2_4.ora' size 512M, 'e:\oradata\user2_5.ora' size 512M, 'e:\oradata\user2_6.ora' size 512M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED default storage (initial 128K next 2M pctincrease 0); --建烦(ch)引表I间1 create tablespace INDEX_DATA1 datafile 'f:\oradata\index1_1.ora' size 512M, 'f:\oradata\index1_2.ora' size 512M, 'f:\oradata\index1_3.ora' size 512M, 'f:\oradata\index1_4.ora' size 512M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED default storage (initial 128K next 2M pctincrease 0); --建烦(ch)引表I间2 create tablespace INDEX_DATA2 datafile 'g:\oradata\index2_1.ora' size 512M, 'g:\oradata\index2_2.ora' size 512M, 'g:\oradata\index2_3.ora' size 512M, 'g:\oradata\index2_4.ora' size 512M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED default storage (initial 128K next 2M pctincrease 0); --建回滚表I间1 --讄初始?0MQinitial 40MQ,则每在这个表I间中徏一个回滚段Q? --此回滚段自动l承此回滚表I间的存储参敎ͼ也即默认文g?0M create tablespace ROLLBACK_DATA1 datafile 'd:\oradata\roll1_1.ora' size 512MQ? 'd:\oradata\roll1_2.ora' size 512M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED default storage (initial 40M next 5M pctincrease 0); --建回滚表I间2 create tablespace ROLLBACK_DATA2 datafile 'e:\oradata\roll2_1.ora' size 512M, 'e:\oradata\roll2_2.ora' size 512M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED default storage (initial 40M next 5M pctincrease 0); --Z(f)时表I间1 create tablespace TEMPORARY_DATA1 datafile 'f:\oradata\temp1_1.ora' size 512M default storage (initial 10M next 3M pctincrease 0); --Z(f)时表I间2 create tablespace TEMPORARY_DATA2 datafile 'g:\oradata\temp2_1.ora' size 512M default storage (initial 10M next 3M pctincrease 0); --使其真正成ؓ(f)临时? alter tablespace TEMPORARY_DATA1 temporary; alter tablespace TEMPORARY_DATA2 temporary; --建立新的回滚D,每个都一样大Q不同大的回滚D|有什么意义,pȝ是随机选择的? --建多个Q根据ƈ发访问用L(fng)多少Q? --如果你们公司每天?0-100个h员用Oraclepȝ开发的理软gQ应?0个以? create public rollback segment rb01 tablespace rollback_data1; create public rollback segment rb02 tablespace rollback_data1; create public rollback segment rb03 tablespace rollback_data1; create public rollback segment rb04 tablespace rollback_data1; create public rollback segment rb05 tablespace rollback_data1; create public rollback segment rb06 tablespace rollback_data1; create public rollback segment rb07 tablespace rollback_data1; create public rollback segment rb08 tablespace rollback_data1; create public rollback segment rb09 tablespace rollback_data2; create public rollback segment rb10 tablespace rollback_data2; --?个徏在回滚表I间1中,?个在回滚表空? create public rollback segment rb11 tablespace rollback_data2; create public rollback segment rb12 tablespace rollback_data2; create public rollback segment rb13 tablespace rollback_data2; create public rollback segment rb14 tablespace rollback_data2; create public rollback segment rb15 tablespace rollback_data2; create public rollback segment rb16 tablespace rollback_data2; create public rollback segment rb17 tablespace rollback_data2; create public rollback segment rb18 tablespace rollback_data2; create public rollback segment rb19 tablespace rollback_data2; create public rollback segment rb20 tablespace rollback_data2; --使回滚段onlineQ即有效 alter rollback segment rb01 online; alter rollback segment rb02 online; alter rollback segment rb03 online; alter rollback segment rb04 online; alter rollback segment rb05 online; alter rollback segment rb06 online; alter rollback segment rb07 online; alter rollback segment rb08 online; alter rollback segment rb09 online; alter rollback segment rb10 online; alter rollback segment rb11 online; alter rollback segment rb12 online; alter rollback segment rb13 online; alter rollback segment rb14 online; alter rollback segment rb15 online; alter rollback segment rb16 online; alter rollback segment rb17 online; alter rollback segment rb18 online; alter rollback segment rb19 online; alter rollback segment rb20 online; --查看现有回滚D及(qing)其状? col segment format a30 SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS; --查看数据文g?qing)其所在表I间、大、状? col file_name format a40 col tablespace_name format a20 select file_name,file_id,tablespace_name,bytes,status from dba_data_files; xQ表I间重新规划完毕Q这里讲的比较通俗Q还有好多参数值得讄Q能够把Oracle讄到最优的境界Q? 表空间设|完了,下面Q就该好好的整理一下Oracle的内存区了, Oracle很有意思,内存大Q效果越明显Q所以有必要好好调整一下SGA区,也就是主要配|ininorcl.ora参数文g? |
Toad 使用快速入门(转蝲Q?/TD> |
文章作者:(x) |
Toad 使用快速入?nbsp; 目录 一QToad功能lD 一?Toad功能lD 在Oracle 应用E序的开发过E中Q访问数据库对象和编写SQLE序是一件乏味且耗费旉的工作,Ҏ(gu)据库q行日常理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工?ToadQTools of Oracle Application DevelopersQ。在Toad的新版本中,q加入了DBA模块Q可以帮助DBA完成许多日常理工作。它最大的特点是单易用,讉K速度快。?ToadQ我们可以通过一个图形化的用L(fng)面快速访问数据库Q完成复杂的SQL和PL/SQL代码~辑和测试工作。Toad由O(jin)racle开发专家专门ؓ(f)开发h员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境?BR>Toad 主要h如下特点Q?BR>模式览Q?BR>模式览功能可以让我们快速访问数据字典,览数据库中的表、烦(ch)引、存储过E。Toad 提供Ҏ(gu)据库的快速访问,使用极ؓ(f)方便Q用L(fng)面简z,l构安排合理。当我们点击一个单独的数据库对象,Toad立即昄此对象的详细信息。例如,当我们点一个数据库的表Q所有和此表相关的烦(ch)引、约束、存储过E、SQL语句以及(qing)和其他表的相互引用关p都在同一界面昄出来。ؓ(f)了简化操作,用户可以在浏览窗口操作数据库对象?/P> SQL ~辑器:(x) 存储q程~辑器:(x) PL/SQL Debugger选项Q?BR>Toad 提供单易用的PL/SQL 调试功能Q可以节省开发h员在大型目中用于开发和试的宝贉|_(d)提高应用开发的质量。在存储q程开发的q程中,Toad可以逐行~辑、调试和q行代码。运行时可以Ҏ(gu)需要输入参敎ͼ观察相关参数的变化来(g)查存储过E的正确性。在调式q程中,Toad 可以通过H口昄所有的断点、参? 调用堆栈和输出参数。用ToadQ非常容易检到存储q程的错误,开发h员可以一步一步运行PL/SQL语句来识别问题。调试会(x)话可以和其他E序?x)话同时q行?/P> SQLab Xpert OptionQ?BR>帮助开发h员优化SQLQؓ(f)他们提供各种优化模式下SQL执行计划Qƈ且能够给Z化的Q能够比较各U模式下实际的SQLq行l果Q帮助开发h员真正高速地开发高效地代码?/P> Toad q可以外挂一些别的品,比如PL/Formatter, RevealNet Knowledge Base , SQL Impact{,q些都能够和Toad紧密集成Q共同提供了一个完的集成开发环境。新版本q新增加了DBA模块Q更加拓q了Toadq个产品的适用范围?/P>
服务器端Q?BR>ü Oracle 7.3 或者更高,在Q何硬件^C?BR>ü 需要一个DBA用户帐号 三.安装Q?BR>1Q?三种安装方式的选择Q?BR>a) TOAD and Personal Configuration Files to PC 四、Toad使用快速入?BR>1Q?Schema BrowserQ?BR>Schema browser是Toad的极为有特色的模块。在schema browser的帮助下Q可以方便的览数据库内部的各类数据库对象,比如表,索引Q序列,存储q程{,而且可以方便的倒出DDL语句和进行各U修改,重徏工作。定位到某一cd象上Q这列对象允许的操作都会(x)自动列出来?BR>特色Q? l 对于视图 |
l 表空_(d)(x)
i. Tablespace MapQ直观的昄数据物理的在表空间上的分?BR>ii. 直观的查看各个表I间的利用率、剩余空间、破情늭信息
iii. 可以q行各种alter操作Qonline, offline, 增加数据文gQ改变数据文件大,改变物理存储属性等
l 对其他数据库对象也有完备的操作支持?/P>
2Q?SQL Editor:
a) ȀzSQL Editor的三U方式:(x)
i. q接到数据库之后QToad自动打开SQL Editorq个H口?BR>ii. 点击dh上最左边的那个按?BR>iii. 从菜单栏QDatabase -> SQL Editor
b) 特点Q?BR>l 允许同时打开多个~辑H口Q同时编辑多个SQL语句
l 支持同时q接到多个数据库Q同时对多个数据库进行操?BR>l 允许~辑SQLQPLSQLQJAVAQHTML和文?BR>l 使用书签功能Q可以在大量SQL语句里,快速定位某个语句所在位|?BR>l SQL Editor本nh强大的编辑功能,非常方便~辑SQL语句?BR>l 强大的快捷键支持和工h快速按钮的支持Q更加高效编?很多快捷键可以自己定义,在View ->options ->SQL Editor里面)
l 能够Ҏ(gu)前面的条Ӟ推测需要输入的代码Q可以做到某U程度的代码填充
l 把鼠标定位到?视图/存储q程名称之上Q按F4Q可以打开对象描述H口Q方便的查看表和视图的定义,存储q程的源代码Q?BR>l 非常Ҏ(gu)对SQL语句的分析其执行计划Q单dh上的 按钮可以看到Explain Plan的结?BR>l 支持部分SQL*Plus命o(h)Q可以方便的执行大量的ؓ(f)SQL*Plus~写的数据库脚本
l 可以通过SQLab xpert来对当前SQL语句q行全面的分析,l出各种合理的调优意见,只需要单dh上的Tuning按钮Q?BR>l 可以方便的保存,打开和运行SQL脚本
l 支持Ҏ(gu)询结果进行修改,
l 可以把查询结果以多种格式保存hQ可以保存ؓ(f)HTMLQ纯文本QXLS{多U格?BR>l 很容易的得到SQL函数的列表和用法描述QShow SQL help Window 按钮Q?BR>l 可以查看SQL语句的执行情况:(x)通过下方的AutoTraceH口 Q看到SQL语句的实际执行结果和执行效率?BR>l 支持历史SQL(F8) Q可以方便的查询以前执行q的SQLQ不用反复重新输入?BR>l 可以执行匿名块,存储q程Q从下方的窗口看到DBMS_OUTPUT的结果,如:(x)
3Q?Stored Procedure Editor
a) 打开存储q程~写器的几个途径Q?BR>l 单击总菜单栏上的W三个按钮:(x)
l 点击Database - > Procedure Editor Q?BR>l 可以通过Schema browser来调?BR>b) 一些特点和优点Q?BR>1Q?强大的自定义讄Q从保留字的昄方式Q到自动替换Q到各种快捷键的定义{等Q用得越熟越手?BR>2Q?
3Q?nbsp; 自动用不同颜色显CSQL和PL/SQL关键字,语法清晰明了Q可Ҏ(gu)自己的习(fn)惯来具体定制各类关键字的具体昄方式。可以自定义存储q程得模板,在新建存储过E的时候,自动生成E序的框架可以方便的调用Schema BrowserQ把鼠标定位于某个对象上QF4QSchema Browser打开该对象的详细描述Q帮助顺利快速开发程序。支持代码自动更正,如输入ndfQ自动替换成NO_DATA_FOUNDQ输入the自动替换成theQ类似的自动替换q可以自׃改和d?BR>7Q?方便的左边行hC,单击左边行号可以实现调试断点的增加/删除
8Q?对各U快捷键的支持,不但包括常见的编辑操作,q可以有自己定义的PLSQL块的支持Q自己定义快h式)(j)。如可以定义CTRL+SHIFT+D:弹出所有PLSQL Block的类型,可以自己选择?BR>9Q?可以在一个集成开发环境里面,一边编码,一边调试,不用多处切换
10Q?方便的同时打开多个存储q程Q通过面快速切?BR>11Q?快速编译存储过E,快速定位错误所在,自己选择是否同时~译依赖的存储过E?BR>12Q?内置对PL/FormatterQ可以用PL/Formatter对存储过E进行格式化Qƈ且可以提供存储过E的概要分析和修改徏?BR>PL/Formatter可以对现有的存储q程q行高速的格式化,使所有的存储q程都符合同L(fng)~写标准Q这h有利于提高程序的可读性,避免不同人写的模块的风格上的很差异?BR>PL/Formatter q有助于提高E序的模块化Q增强程序的l构清晰度,增强SQL的共用性?BR>PL/Formatter q可以帮助完成PL/SQL和Oracle版本之间的管理?/P>
13Q?内置RevealNet Knowledge BaseQ单击鼠标右键就可以打开Q快速得到技术上的支持,解决技术难?BR>nPL/SQL:
n包含整个开发过E中可能遇到问题的答?BR>nCode Library:大量的严谨的PL/SQL代码例子和现成过E,完全源代码提?BR>n各种错误处理模块可供参考,各类字符日期函数
n包含1400多个主题
nAdminQ?BR>n解答DBA日常工作?0%的常见问题,覆盖2400多个主题
n从网l到性能优化Q从备䆾恢复到Error message,一应俱?BR>例子Q遇到失效的存储q程怎么办?
4. 如何对存储过E进行DebugQ?BR>u 需要Toad单独的Debug Option(Standard Version 没有q个选项)
u 要用Toad对存储过E进行debugQ必d装Oracle的系l包Qdbms_debugQ而且必须安装Oracle Probe API v2.0 或者更高的版本?BR>u 集成在Stored Precedure Editor里面Q可以一边编写一边调试,大大提高开发效?BR>u 打开Procedure Editor后,Debug菜单Ȁz,可以开始进行Debug工作?BR>u 允许对存储过E进行逐行调试、断点调?也支持对触发器进行调试?BR>u 可以有断Ҏ(gu)持,支持Watch变量Q允许运行时改变变量的?BR>u 允许对多层调用的Debug支持
调试步骤具体举例Q?BR>1Q?点击菜单栏的W三个按钮:(x) Q打开Procedure Editor
2Q?点击Procedure Editor的菜单栏?按钮Q调出需要调试的存储q程
3Q?单击工具栏上的按?Q输入需要传入的参数Q如果不需要传入参敎ͼ可以直接单击工具栏上的按钮:(x) Q直接开始调试,如下图输入传入参敎ͼ(x)
4Q?单击菜单栏的按钮Q?Q可以单步跟t,也可以定义一个断点,直接q行到断点在单步执行Q在存储q程q行的过E中Q当前语句会(x)高亮度显C,q且把鼠标指针定位到变量上,Toad自动昄该变量的当前倹{?/P>
5Q?可以随时中止E序的执行,只要点Debug ->Halt ExecutionQ或者菜单栏上的按钮 Q就可以中止E序的执?BR>6Q?nbsp; 当碰C个存储过E调用另外一个存储过E的时候,可以选择跌(Step Over) Q这样就直接q行那个被调用的存储q程Q返回调用结果,l箋q个存储q程的调试,也可以选择Trace Into Q这样就打开被调用的存储q程Q进一步深入调试那个被调用的子存储q程。如果需要保持Debug信息Q在~译的时候应该选择Compile Dependencies with Debug InformationQ就是Procedure Editor工具栏最双的那个按??BR>7Q?支持对变量实时追t:(x)使用WatchQ?BR>可以在运行前Q或者运行过E中Ҏ(gu)个变量进行实时跟t:(x)Add WatchQ把鼠标定位到该变量上,然后点击Debug ->Add Watch At CursorQ该变量׃(x)出现在Debug状态窗口上Q而且实时反应该变量的当前倹{如上图中的变量v_empname。可以运行时M?BR>8Q?断点支持Q?BR>单击存储q程需要加断点的地方的行号Q该行颜色变U,输入参数Q单?yn)L行按?Q可以直接运行到断点处,可以不必逐行q踪Q更加高效率的进行调试?BR>Debug Optionq支持条件断点,只有当满x件的时候才?x)在那个地方停止Q否则就好像不存在这个断点一L(fng)l运行?BR>
?? 注意DBMS_OUTPUT.PUT_LINE的结果只有当E序执行完成以后才会(x)出现Q在E序执行q程中是没有l果的?/P>
4Q?如何用SQLab Xpert对存储过E进行调优?
我们知道QOralce数据库的优化Q最主要的步骤就在于SQL的优化。而在没有专门的工P如ToadQ的帮助下,q行SQL优化是一仉常困隑֒乏味的事情,q且需要对Oracle的深入理解和高超的Oracle调优技巧。用Toad的SQLab Xpert Tuning模块Q可以我们普通开发h员也能够非常快速,_的对SQLq行专家U的分析
在SQL Editor和Procedure Editor里面Q选中需要调试的SQL语句QSQLab Xpert只能调试Select,Insert, Update,Delete语句Q,复制到SQL Editor里面Q然后点dh上的调优按钮 QToad?x)自动打开SQLab xpert H口Q捕获当前的SQL语句Qƈ且把它{化ؓ(f)W合explain plan格式的语句?BR>W一ơ打开Xpert的时候,Toad?x)提CZQ需要安装一些Server端的表、视囑֒包等对象Q可以把表存储到某个指定的表I间(如Tools)里面。可以简单的按照提示一步一步做可以了。如果系l设定不允许Job的话QJob_queue_process=0Q?Toad提示有些部g不会(x)现在安装Q可以忽略。安装完成以后,可以选择让某些非DBA用户也可以用Toad的SQLab Xpert调优功能?BR>安装完成以后QToad?x)提CZ一些关于优化目标方面的问题Q你可以选择每次优化都可以重新设定,或者一ơ设定,以后一直用这个设定。当然如果需要,q是可以更改的,在SQLab Option xpert的窗口的Administration和Preference下面重新讑֮?BR>例子Q?BR>下面q个SQL语句涉及(qing)到多表之间的兌Q有一定的复杂性,我们可以借助Toad的SQLab Xpert Option来帮助分析:(x)
select a.name. b.name, c.emp_name
from dep a, manager b,emp c
where a.dep_no=c.DEP_NO
and b.manag_id=c.manag_id
and c.emp_no=3
我们把这个SQL复制到SQL Editor里面Q单M面的调优按钮QToad打开SQLab Xpert OptionH口?BR>如下图:(x)
从上面的图中我们可以斚w的看刎ͼ(x)在各U优化模式下Q该SQL语句的执行计划分别是什么样的,Toadl出了每一U执行计划的具体每一个步骤,每个步骤的成本,该表涉及(qing)的相关的数据{,如果SQL存取的表q没有经q分析,Toad?x)以U色警告昄Qƈ且很方便的帮助你对该表进行分析,攉l计数据Q重建烦(ch)引等Q以有助于优化器作出最好的选择。可以把当前的分析结果保存到它的资料库里边,以备以后再次调用之需?BR> 我们q可以求助与SQLab 的自动优化功能:(x)点击Original SQL下面的auto tune按钮QToad?x)对执行l果按照tkprofq行分析Q当?dng)q需要你在initsid.ora里面讄好utl_file_dirQ如果服务器是在Unix机器上的话,q需要通过FTP方式得到Trace文gQ有一些小的讄Q?BR> 自动优化非常高效的对所有执行计划进行实际运行比较,q且l出实际执行的时间的Ҏ(gu)Q如下图Q?/P>
我们q可以让Toadl出实际的优化徏议:(x)点击Original SQL,单击下面的Advice按钮QToadҎ(gu)对SQL的分析和执行l果l出合理的徏议:(x)
如:(x)
1Q?把表和烦(ch)引分别放C个不同的表空_(d)因ؓ(f)我们在创Q加上约束的时候没有指定USING INDEX子句Q所以表和烦(ch)引都建立在了用户的默认表I间上了?BR>2Q?对表EMPQDEP和MANAGERq行分析Q收集最新的l计数据Q有利于CBO得到最优的执行计划
3Q?在合适的列上创徏索引QEMP的manag_id和dep_no。当表中存在大量的数据的时候,q样可以大大减少׃全表扫描带来的成本?/P>
5Q?SQL ModelerQ?BR>SQL Modeler可以帮助开发h员很Ҏ(gu)的写出各U复杂的SQL语句Q只需通过单的拖动鼠标Q就能够写出复杂的SQL语句来?BR>打开SQL Modeler的几个途径Q?BR>i. 菜单?Database -> SQL Modeler Q打开H口
ii. 单击工具栏第四个按钮 Q打开SQL ModelerH口
H口׃个主要部分组成:(x)
n 表选择区域Q最双的那个部分,用来选择From子句中用到的表。拖动到左边的区域或者双d选择了该表?BR>n 表模型区域:(x)用来囑Ş化的昄选择的表和表之间的关联关pR?BR>n 生成SQL区域Q这里显C用囑Ş化方式创建的查询对应的SQL语句Q?/P>
在SQL Modeler里面Q还支持对生成的SQLq行Explain PlanQ调试SQL的性能Q运行SQLQ看是否得到了希望的l果Q保存生成的语句Q或者把语句_脓(chung)到SQL Editor里面?/P>
有了SQL Modeler的帮助,即是初U的E序员也能编写出复杂而又高效的SQL查询来?BR>比如下面的例子;
生成步骤Q?BR>1Q?选出表emp, dep, manager
2Q?用鼠标拖住emp的emp_name和emp_no, dep的name,manager的name
3Q?双击criteriaH口的emp_no condition列,弹出H口Q输入查询条Ӟ比如emp_no=3
4Q?׃l果里面不希望emp_no出现Q双击emp_no列的visibleQ设|ؓ(f)false
5Q?q样出来了需要的查询Q现在可以运行查询得到结果,Ҏ(gu)询SQLq行分析Q或者在SQL Editor里面打开q个SQLQ或者保存ؓ(f)SQL Model文gQ或者再q一步处理,比如加排序, 汇ȝ?/P>
DBA斚w的功能:(x)
Toad在DBA日常理斚w的能力是非常强大的,可以帮助DBA安全快速地完成许多日常工作Q还有ToadҎ(gu)的一些小工具能完成一些普通方法很隑ց到的功能。下面大概讲qC各个常用模块的主要功能:(x)
a) Database Monitor
提供直观的Oracle数据库运行状况,包括下面q些详细信息Q?BR>可以看到逻辑IOQ物理IOQ各个状态的session数目QSGA的利用率Q共享池的用状况,各类事g的等待状况,以及(qing)各类事g随着旉的变化情?BR>b) Instance Monitor
i. 可以用来(g)查本地tnsnames.ora文g里面定义的所有节炏VListener和数据库的运行状态和版本{相关信息?BR>ii. 可以q程启动、关闭数据库Q如果设|了password验证方式Q?BR>c) Unix MonitorQ?BR>i. 可以监控Unix机器的运行状冉|如详l的机器启动旉QCPU利用率,主要的进E以?qing)这些进E占用的资源Q主要的盘I(y)O{?BR>d) Trace/Kill session
i. 方便的查看所有的q接用户相关信息Q比如终端,E序Q连接时间等
ii. Ҏ(gu)个用戯行跟t,查看用户执行的SQL语句Q查看语句的执行计划Q?BR>iii. 方便的查阅系l的Lock对象Q有没有什么等待别的事务释N的情况,q能够轻易查出等待什么用L(fng)什么事件结束,那个用户执行的是什么SQL?BR>iv. 查看回滚D늚使用状态,什么用P什么语句,使用的什么回滚段Q多读写量{?BR>e) Oracle Parameter
i. 可以方便的查看Oraclepȝ的参敎ͼ(x)是否默认|参数作用的简要描qͼ是否可以用alter session/alter system来动态改变,对于那些可以动态改变的参数Q可以双击鼠标来q行修改
f) NLS_PARAMETER:
i. 方便的查看sessionQinstanceQdatabase一U的NLS参数|
ii. 可以动态修改session的NLS参数?/P>
g) Extents
i. 可以查看某个用户下的表和索引的详l的存储情况Q?BR>ii. 发现那些占用大量I间的表和烦(ch)引,可以考虑使用相应的对{,比如分区
iii. 发现那些卛_辑ֈmax_extents的表和烦(ch)引ƈ可以?qing)时U正
iv. 发现那些索引和表处于同一个表I间的情况,q可以及(qing)时纠正?/P>
h) Tablespace
i. 直观的查看每个表I间的利用率Qȝ_(d)已用空_(d)剩余可是用空间以?qing)默认存储参敎ͼ和表I间是否需要整理等信息
ii. 查看每个表空间的状态,l成的数据文Ӟ 以及(qing)每个数据文g的详l信?BR>iii. 查看每个表空间里面存在的对象和这些对象的详细存储Ҏ(gu)?BR>i) Tablespace MapQ?BR>i. 囑Ş化的昄表空间里面各个表/索引所占用的空_(d)各个segment的大,segment是否q箋{信息,非常直观
ii.
j)
Server Statistics:
i. 可以非常直观的看到系lMq行情况Q迅速定位系l瓶颈所?BR>ii. 可以查看pȝ范围内各cȝ待事件的状况Q查看每个连接会(x)话的状况Q?BR>k) Pinned CodeQ?BR>i. 我们知道Q频J执行的大的存储q程最好PinhQ这样可以避免被Oracle在内存不的情况下换出内存,避免动态加载,也避免flush shared pool的时候被清出内存?BR>ii. Ҏ(gu)每个模块的大,执行ơ数Q决定是否要把某个存储过EPINh。一个按钮就搞定了?BR>l) Control Files:
可以查看当前pȝ有哪几个控制文gQ以?qing)控制文件内部记录的详细信息?BR>Q实际上是V$CONTROLFILE, V$CONTROLFILE_RECORD_SECTIONQ?BR>m) Redo Log Manager:
i. 可以方便的查看LOG的组Q当前日志,每个l里面的成员名字Q大,方便的增加、删除logl,切换当前日志Q对日志归档q行具体的控制?BR>ii. 可以在这个界面里完成几乎所有的对redo log的操作?BR>n) Repair chained rows:
i. Chained rows影响pȝ性能Q处于系l性能的考虑Q需要把chained rows修复成普通的表的行。用repaie chained rows,可以比较容易的做到q一炏V选择需要分析的表,然后分析一下,看有没有chained rowsQ如果有Q点击repairQToad帮你把那些chained rowsl修复了?BR>o) Identify Space Deficits
如果pȝ出现1659,1653错误Q就是一个不合格的DBA。但是要x预见q些错误Q还是有一定的隑ֺ的。有了Toad的这个小工具之后Q一Ҏ(gu)个表I间Q就知道q个表空间里面的剩余自由I间是否允许M表能够扩展到下一个extent。ƈ能够在发现问题之后,直接Ҏ(gu)问题?
p) Estimate Table/Index Size
i. 数据库的物理规划中,?索引的存储子句的定义是非帔R要的Q媄(jing)响系l。但是没有什么工L(fng)话,要ؓ(f)表定义合理的存储子句也不Ҏ(gu)?BR>ii. 在Toad里面Q专门有工具帮助你合理定义表/索引的存储情况:(x)
1. 自己可以定义来表中需要存储的数据的数?BR>2. 多种估计方式Q?BR>a) Ҏ(gu)对已有的数据的分析来定义表的大小Q最_Q但是比较慢Q?BR>b) Ҏ(gu)表定义数据类型来定义表的大小
c) Ҏ(gu)数据字典中以前分析过的数据来估计大小Q需要近期分析过该表Q?/P>
q) Analyze All Tables
i. ZCBO的SQL需要CBO提供最优化的执行\径来提高E序的执行效率,但是假如对表q行大量的DML操作之后Q不?qing)时更新表的l计数据Q这时候C(j)BO׃能选择最为有效的执行路径Q导致程序执行效率低?BR>ii. 手工分析表比较麻?ch),一个一个做?BR>iii. 用Toad的Analyze Alltablesq个工具Q可以一ơ分析整个模式下面的所有表Q有丰富的控刉项Q包括是采用估计q是完全Q是否同时分析烦(ch)引,估计的话Q采用多大的癑ֈ比等?BR>r) Rebuild Table
i. 当表中的数据被反复大量的DML之后Q而且PCTFREE和PCTUSED定义的不合理的情况下Q表可能?x)变得非常破,占用大量的extentQ烦(ch)引也?x)相当破,D效率相当低下?BR>ii. 传统的方式是通过exp/imp来解册个问题,但是步骤实在比较ȝ(ch)Q手工操作也有一定的危险性?BR>iii. 使用Rebuild Table工具Q轻松搞定,而且可以手工修改一些通过EXP/IMP无法修改的参敎ͼ比如freelists ,freelists group, tablespaceQinitial{,q能够更改列的名字?BR>s) Relocate Index
i. 我们知道Q表和烦(ch)引一般都需要分开存放C同的表空_(d)q样比较便于理Q性能上也?x)有一定的提高Q因为可以对表和索引同时存取?BR>ii. 但是实际上很多时候,׃q样那样的原因,常常忽略了烦(ch)引单独存放这个基本概念,比如建立主键U束的时候没有加USING INDEX子句Q后来disable/enable了主键约?唯一性约束等Q都?x)导致把索引直接存放到和表同一个表I间里面?BR>iii. 手工发现q些索引Q再逐个Ud非常ȝ(ch)Q容易出错,在Toad里面Q就很容易根据用?表空间来发现那些不恰当存攄索引Q可以批量移动这些烦(ch)引,q且允许重新定义索引的存储子句?BR>t) Generate Schema ScriptsQ?BR>i. 可以用来生成整个用户下所?部分对象的DDL语句。可以把l果保存为sql语句或者保存ؓ(f)TOAD的自定义格式?BR>ii. 可以用来复制表结构,QEXP/IMP有非怸重的~陷Q就是从一个大的数据库倒出的表l构Q无法导入到一个小的数据库里面Q因为里面包含了原来表的存储信息Q即佉K择rows=NQ也要在导入数据库里面占用相当大的空_(d)(j)
u) Compare SchemaQ?BR>i. 在开发的时候,有时候同时在几个开发库上开发,但是最后两个库的结构不完全一P很难比较
ii. 用TOAD的这个功能,可以对两个数据库的模式(用户Q下面的所有对象(包括存储q程Q进行比较,可以选择具体的比较内宏V?BR>iii. 可以通过直接打开两个到各自数据库的连接,或者根据Toad generate schame scripts生成的文件进行对比?BR>iv. 可以直接生成同步两个数据库的sql脚本Q给出汇ȝ区别要和详细报告{?BR>--------------------------------------------------------------------------------
几乎是学?fn)TOAD的唯一中文使用说明Q我再也找不到比q个更好的了Q特跟大家分享?BR>转蝲的,找不到出处了。如果原作者有意见的话Q我把q个删掉好了^_^