﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-空谷回音-随笔分类-Oracle</title><link>http://www.blogjava.net/cymao/category/7197.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:24:32 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:24:32 GMT</pubDate><ttl>60</ttl><item><title>DBA的职责和任务(转自oracle中文技术论坛)</title><link>http://www.blogjava.net/cymao/archive/2006/03/30/38289.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Thu, 30 Mar 2006 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2006/03/30/38289.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/38289.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2006/03/30/38289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/38289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/38289.html</trackback:ping><description><![CDATA[
		<font size="2">载自oracle中文技术论坛。从整体上介绍了一个dba的职责和任务等等。　　 <br />ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控：  <br />(1). 每天对ORACLE数据库的运行状态,日志文件,备份情况,数据  <br /><br />库的空间使用情况,系统资源的使用情况进行检查,发现并解决  <br /><br />问题。  <br /><br />(2). 每周对数据库对象的空间扩展情况,数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。  <br /><br />(3). 每月对表和索引等进行Analyze,检查表空间碎片,寻找数据库  <br /><br />性能调整的机会,进行数据库性能调整,提出下一步空间管理  <br /><br />计划。对ORACLE数据库状态进行一次全面检查。  <br /><br />每天的工作  <br /><br />(1).确认所有的INSTANCE状态正常  <br /><br />登陆到所有数据库或例程,检测ORACLE后台进程:  <br /><br />$ps –ef|grep ora  <br /><br />(2). 检查文件系统的使用（剩余空间）。如果文件系统的剩余空间小于20%，需删除不用的文件以释放空间。  <br /><br />$df –k  <br /><br />(3). 检查日志文件和trace文件记录alert和trace文件中的错误。  <br /><br />连接到每个需管理的系统  <br /><br />? 使用’telnet’  <br /><br />? 对每个数据库,cd 到bdump目录,通常是$ORACLE_BASE/&lt;SID&gt;;/bdump  <br /><br />? 使用 Unix ‘tail’命令来查看alert_&lt;SID&gt;;.log文件  <br /><br />? 如果发现任何新的ORA- 错误,记录并解决  <br /><br />(4). 检查数据库当日备份的有效性。  <br /><br />对RMAN备份方式:  <br /><br />检查第三方备份工具的备份日志以确定备份是否成功  <br /><br />对EXPORT备份方式:  <br /><br />检查exp日志文件以确定备份是否成功  <br /><br />对其他备份方式:  <br /><br />检查相应的日志文件  <br /><br />(5). 检查数据文件的状态记录状态不是“online”的数据文件，并做恢复。  <br /><br />Select file_name from dba_data_files where status=’OFFLINE’  <br /><br />(6). 检查表空间的使用情况  <br /><br />SELECT tablespace_name, max_m, count_blocks free_blk_cnt, sum_free_m,to_char(100*sum_free_m/sum_m, '99.99') || '%' AS pct_free  <br /><br />FROM ( SELECT tablespace_name,sum(bytes)/1024/1024 AS sum_m FROM dba_data_files GROUP BY tablespace_name),  <br /><br />( SELECT tablespace_name AS fs_ts_name, max(bytes)/1024/1024 AS max_m, count(blocks) AS count_blocks, sum(bytes/1024/1024) AS sum_free_m FROM dba_free_space GROUP BY tablespace_name )  <br /><br />WHERE tablespace_name = fs_ts_name  <br /><br />(7). 检查剩余表空间  <br /><br />SELECT tablespace_name, sum ( blocks ) as free_blk ,  <br /><br />trunc ( sum ( bytes ) /(1024*1024) ) as free_m,  <br /><br />max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks  <br /><br />FROM dba_free_space GROUP BY tablespace_name;  <br /><br />(<img src="http://bbs.chinaunix.net/images/smilies/icon_cool.gif" align="absMiddle" border="0" />. 监控数据库性能  <br /><br />运行bstat/estat生成系统报告  <br /><br />或者使用statspack收集统计数据  <br /><br />(9). 检查数据库性能，记录数据库的cpu使用、IO、buffer命中率等等  <br /><br />使用vmstat,iostat,glance,top等命令  <br /><br />(10). 日常出现问题的处理。  <br /><br />每周的工作  <br /><br />(1). 控数据库对象的空间扩展情况  <br /><br />根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相  <br /><br />应的措施  <br /><br />-- 删除历史数据  <br /><br />--- 扩表空间  <br /><br />alter tablespace &lt;name&gt;; add datafile ‘&lt;file&gt;;’ size &lt;size&gt;;  <br /><br />--- 调整数据对象的存储参数  <br /><br />next extent  <br /><br />pct_increase  <br /><br />(2). 监控数据量的增长情况  <br /><br />根据本周每天的检查情况找到记录数量增长很快的数据库对象,并采  <br /><br />取相应的措施  <br /><br />-- 删除历史数据  <br /><br />--- 扩表空间  <br /><br />alter tablespace &lt;name&gt;; add datafile ‘&lt;file&gt;;’ size &lt;size&gt;;  <br /><br />(3). 系统健康检查  <br /><br />检查以下内容:  <br /><br />init&lt;sid&gt;;.ora  <br /><br />controlfile  <br /><br />redo log file  <br /><br />archiving  <br /><br />sort area size  <br /><br />tablespace(system,temporary,tablespace fragment)  <br /><br />datafiles(autoextend,location)  <br /><br />object(number of extent,next extent,index)  <br /><br />rollback segment  <br /><br />logging &amp;tracing(alert.log,max_dump_file_size,sqlnet)  <br /><br />(4). 检查无效的数据库对象  <br /><br />SELECT owner, object_name, object_type FROM dba_objects  <br /><br />WHERE status=’INVALID’。  <br /><br />(5). 检查不起作用的约束  <br /><br />SELECT owner, constraint_name, table_name,  <br /><br />constraint_type, status  <br /><br />FROM dba_constraints  <br /><br />WHERE status = 'DISABLED’ AND constraint_type = 'P'  <br /><br />(6). 检查无效的trigger  <br /><br />SELECT owner, trigger_name, table_name, status  <br /><br />FROM dba_triggers  <br /><br />WHERE status = 'DISABLED’  <br /><br />每月的工作  <br /><br />(1). Analyze Tables/Indexes/Cluster  <br /><br />analyze table &lt;name&gt;; estimate statistics sample 50 percent;  <br /><br />(2). 检查表空间碎片  <br /><br />根据本月每周的检查分析数据库碎片情况,找到相应的解决方法  <br /><br />(3). 寻找数据库性能调整的机会  <br /><br />比较每天对数据库性能的监控报告,确定是否有必要对数据库性能进 行调整  <br /><br />(4). 数据库性能调整  <br /><br />如有必要,进行性能调整  <br /><br />(5). 提出下一步空间管理计划  <br /><br />根据每周的监控,提出空间管理的改进方法  <br /><br />Oracle DBA 日常管理  <br /><br />目的：这篇文档有很详细的资料记录着对一个甚至更多的ORACLE 数据库每天的，每月的，  <br /><br />每年的运行的状态的结果及检查的结果，在文档的附录中你将会看到所有检查，修改的SQL  <br /><br />和PL/SQL 代码。  <br /><br />目录  <br /><br />1.日常维护程序  <br /><br />A． 检查已起的所有实例  <br /><br />B． 查找一些新的警告日志  <br /><br />C． 检查DBSNMP 是否在运行  <br /><br />D． 检查数据库备份是否正确  <br /><br />E． 检查备份到磁带中的文件是否正确  <br /><br />F． 检查数据库的性能是否正常合理，是否有足够的空间和资源  <br /><br />G． 将文档日志复制到备份的数据库中  <br /><br />H． 要常看DBA 用户手册  <br /><br />2.晚间维护程序  <br /><br />A．收集VOLUMETRIC 的数据  <br /><br />3.每周维护工作  <br /><br />A． 查找那些破坏规则的OBJECT  <br /><br />B． 查找是否有违反安全策略的问题  <br /><br />C． 查看错误地方的SQL*NET 日志  <br /><br />D． 将所有的警告日志存档  <br /><br />E． 经常访问供应商的主页  <br /><br />4.月维护程序  <br /><br />A． 查看对数据库会产生危害的增长速度  <br /><br />B． 回顾以前数据库优化性能的调整  <br /><br />C． 查看I/O 的屏颈问题  <br /><br />D． 回顾FRAGMENTATION  <br /><br />E． 将来的执行计划  <br /><br />F． 查看调整点和维护  <br /><br />5.附录  <br /><br />A． 月维护过程  <br /><br />B． 晚间维护过程  <br /><br />C． 周维护过程  <br /><br />6.参考文献  <br /><br />----------------------------------------------------------------  <br /><br />一．日维护过程  <br /><br />A．查看所有的实例是否已起  <br /><br />确定数据库是可用的，把每个实例写入日志并且运行日报告或是运行测试  <br /><br />文件。当然有一些操作我们是希望它能自动运行的。  <br /><br />可选择执行：用ORACLE 管理器中的‘PROBE’事件来查看  <br /><br />B．查找新的警告日志文件  <br /><br />1. 联接每一个操作管理系统  <br /><br />2. 使用‘TELNET’或是可比较程序  <br /><br />3. 对每一个管理实例，经常的执行$ORACLE_BASE/&lt;SID&gt;;/bdump 操  <br /><br />作，并使其能回退到控制数据库的SID。  <br /><br />4. 在提示下，使用UNIX 中的‘TAIL’命令查看alert_&lt;SID&gt;;.log，或是  <br /><br />用其他方式检查文件中最近时期的警告日志  <br /><br />5. 如果以前出现过的一些ORA_ERRORS 又出现，将它记录到数据库  <br /><br />恢复日志中并且仔细的研究它们，这个数据库恢复日志在〈FILE〉中  <br /><br />C．查看DBSNMP 的运行情况  <br /><br />检查每个被管理机器的‘DBSNMP’进程并将它们记录到日志中。  <br /><br />在UNIX 中，在命令行中，键入ps –ef | grep dbsnmp,将回看到2 个  <br /><br />DBSNMP 进程在运行。如果没有，重启DBSNMP。  <br /><br />D．查数据库备份是否成功  <br /><br />E．检查备份的磁带文档是否成功  <br /><br />F．检查对合理的性能来说是否有足够的资源  <br /><br />1. 检查在表空间中有没有剩余空间。  <br /><br />对每一个实例来说，检查在表空间中是否存在有剩余空间来满足当天  <br /><br />的预期的需要。当数据库中已有的数据是稳定的，数据日增长的平均  <br /><br />数也是可以计算出来，最小的剩余空间至少要能满足每天数据的增 长。  <br /><br />A） 运行‘FREE.SQL’来检查表空间的剩余空间。  <br /><br />B） 运行‘SPACE.SQL’来检查表空间中的剩余空间百分率  <br /><br />2. 检查回滚段  <br /><br />回滚段的状态一般是在线的，除了一些为复杂工作准备的专用 段，它一般状态是离线的。  <br /><br />a) 每个数据库都有一个回滚段名字的列表。  <br /><br />b) 你可以用V$ROLLSTAT 来查询在线或是离线的回滚段的现在状 态.  <br /><br />c) 对于所有回滚段的存储参数及名字， 可用  <br /><br />DBA_ROLLBACK_SEGS 来查询。但是它不如V$ROLLSTAT 准确。  <br /><br />3. 识别出一些过分的增长  <br /><br />查看数据库中超出资源或是增长速度过大的段，这些段的存储参 数需要调整。  <br /><br />a） 收集日数据大小的信息， 可以用  <br /><br />‘ANALYZE5PCT.SQL’。如果你收集的是每晚的信息， 则可跳过这一步。  <br /><br />b） 检查当前的范围，可用‘NR.EXTENTS.SQL’。  <br /><br />c） 查询当前表的大小信息。  <br /><br />d） 查询当前索引大小的信息。  <br /><br />e） 查询增长趋势。  <br /><br />4. 确定空间的范围。  <br /><br />如果范围空间对象的NEXT_EXTENT 比表空间所能提供的最大范  <br /><br />围还要大，那么这将影响数据库的运行。如果我们找到了这个目标，可  <br /><br />以用‘ALTER TABLESPACE COALESCE’调查它的位置，或加另外 的数据文件。  <br /><br />A）运行‘SPACEBOUND.SQL’。如果都是正常的，将不返回任何行。  <br /><br />5. 回顾CPU，内存，网络，硬件资源论点的过程  <br /><br />A）检查CPU的利用情况，进到x:.htm =&gt;;system  <br /><br />metrics=&gt;;CPU 利用页，CPU 的最大限度为400，当CPU 的占用保持  <br /><br />在350 以上有一段时间的话，我们就需要查看及研究出现的问题。  <br /><br />G．将存档日志复制到备用数据库中  <br /><br />如果有一个备用数据库，将适当的存档日志复制到备用数据库的期望  <br /><br />位置，备用数据库中保存最近期的数据。  <br /><br />H. 经常查阅DBA 用户手册  <br /><br />如果有可能的话，要广泛的阅读，包括DBA 手册，行业杂志，新闻 组或是邮件列表。  <br /><br />-------------------------------------------------------------  <br /><br />二．晚间维护过程  <br /><br />大部分的数据库产品将受益于每晚确定的检查进程的运行。  <br /><br />A. 收集VOLUMETRIC 数据  <br /><br />1. 分析计划和收集数据  <br /><br />更准确的分析计算并保存结果。  <br /><br />a） 如果你现在没有作这些的话，用‘MK VOLFACT.SQL’来创建测定体积的 表。  <br /><br />b） 收集晚间数据大小的信息，用‘ANALYZE COMP.SQL’。  <br /><br />c） 收集统计结果，用‘POP VOL.SQL’。  <br /><br />d） 在空闲的时候检查数据，可能的话，每周或每个月进行。  <br /><br />我是用MS EXCEL 和ODBC 的联接来检查数据和图表的增长  <br /><br />-------------------------------------------------------------  <br /><br />三．每周维护过程  <br /><br />A． 查找被破坏的目标  <br /><br />1. 对于每个给定表空间的对象来说，NEXT_EXTENT 的大小是相同的，如  <br /><br />12/14/98，缺省的NEXT_EXTENT 的DATAHI 为1G，DATALO 为500MB，  <br /><br />INDEXES 为256MB。  <br /><br />A） 检查NEXT_EXTENT 的设置，可用‘NEXTEXT。SQL’。  <br /><br />B） 检查已有的EXTENTS，可用‘EXISTEXT。SQL’。  <br /><br />2. 所有的表都应该有唯一的主键  <br /><br />a） 查看那些表没有主键，可用‘NO_PK.SQL’。  <br /><br />b） 查找那些主键是没有发挥作用的，可用‘DIS_PK.SQL’。  <br /><br />c） 所有作索引的主键都要是唯一的，可用‘ NONUPK。SQL’来检 查。  <br /><br />3. 所有的索引都要放到索引表空间中。运行‘MKREBUILD_IDX。SQL’  <br /><br />4. 不同的环境之间的计划应该是同样的，特别是测试环境和成品环境之间的 计划应该相同。  <br /><br />a） 检查不同的2 个运行环境中的数据类型是否一致，可用  <br /><br />‘DATATYPE.SQL’。  <br /><br />b） 在2 个不同的实例中寻找对象的不同点， 可用  <br /><br />‘OBJ_COORD.SQL’。  <br /><br />c） 更好的做法是，使用一种工具，象寻求软件的计划管理器那样的 工具。  <br /><br />B． 查看是否有危害到安全策略的问题。  <br /><br />C． 查看报错的SQL*NET 日志。  <br /><br />1. 客户端的日志。  <br /><br />2. 服务器端的日志。  <br /><br />D．.将所有的警告日志存档  <br /><br />E．.供应商的主页  <br /><br />1. ORACLE 供应商  <br /><br />http://www.oracle.com  <br /><br />http://technet.oracle.com  <br /><br />http://www.oracle.com/support  <br /><br />http://www.oramag.com  <br /><br />2. Quest Software  <br /><br />http://www.quests.com  <br /><br />3. Sun Microsystems  <br /><br />http://www.sun.com  <br /><br />----------------------------------------------------------------  <br /><br />四．月维护过程  <br /><br />A．查看对数据库会产生危害的增长速度  <br /><br />1. 从以前的记录或报告中回顾段增长的变化以此来确定段增长带来危害  <br /><br />B． 回顾以前数据库优化性能的调整  <br /><br />1. 回顾一般ORACLE 数据库的调整点，比较以前的报告来确定有害的发展 趋势。  <br /><br />C． 查看I/O 的屏颈问题  <br /><br />1. 查看前期数据库文件的活动性，比较以前的输出来判断有可能导致屏颈 问题的趋势。  <br /><br />D． 回顾FRAGMENTATION  <br /><br />E． 计划数据库将来的性能  <br /><br />1. 比较ORACLE 和操作系统的CPU，内存，网络，及硬盘的利用率以此  <br /><br />来确定在近期将会有的一些资源争夺的趋势  <br /><br />2. 当系统将超出范围时要把性能趋势当作服务水平的协议来看  <br /><br />F． 完成调整和维护工作  <br /><br />1.使修改满足避免系统资源的争夺的需要，这里面包括增加新资源或使预期 的停工。  <br /><br />----------------------------------------------------------------  <br /><br />五．附录  <br /><br />A. 日常程序  <br /><br />-- free.sql  <br /><br />--To verify free space in tablespaces  <br /><br />--Minimum amount of free space  <br /><br />--document your thresholds:  <br /><br />--&lt;tablespace_name&gt;; = &lt;amount&gt;; m  <br /><br />SELECT tablespace_name, sum ( blocks ) as free_blk , trunc ( sum ( bytes ) /  <br /><br />(1024*1024) ) as free_m, max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks  <br /><br />FROM dba_free_space GROUP BY tablespace_name  <br /><br />1. Space.sql  <br /><br />-- space.sql  <br /><br />-- To check free, pct_free, and allocated space within a tablespace  <br /><br />-- 11/24/98  <br /><br />SELECT tablespace_name, largest_free_chunk  <br /><br />, nr_free_chunks, sum_alloc_blocks, sum_free_blocks  <br /><br />, to_char(100*sum_free_blocks/sum_alloc_blocks, '09.99') || '%'  <br /><br />AS pct_free  <br /><br />FROM ( SELECT tablespace_name , sum(blocks) AS sum_alloc_blocks  <br /><br />FROM dba_data_files GROUP BY tablespace_name )  <br /><br />, ( SELECT tablespace_name AS fs_ts_name  <br /><br />, max(blocks) AS largest_free_chunk  <br /><br />, count(blocks) AS nr_free_chunks  <br /><br />, sum(blocks) AS sum_free_blocks FROM dba_free_space  <br /><br />GROUP BY tablespace_name ) WHERE tablespace_name = fs_ts_name  <br /><br />2. analyze5pct.sql  <br /><br />-- analyze5pct.sql  <br /><br />-- To analyze tables and indexes quickly, using a 5% sample size  <br /><br />-- (do not use this script if you are performing the overnight  <br /><br />-- collection of volumetric data)  <br /><br />-- 11/30/98  <br /><br />BEGIN  <br /><br />dbms_utility.analyze_schema ( '&amp;OWNER', 'ESTIMATE', NULL, 5 ) ;  <br /><br />END ;  <br /><br />/  <br /><br />3. nr_extents.sql  <br /><br />-- nr_extents.sql  <br /><br />-- To find out any object reaching &lt;threshold&gt;;  <br /><br />-- extents, and manually upgrade it to allow unlimited  <br /><br />-- max_extents (thus only objects we *expect* to be big  <br /><br />-- are allowed to become big)  <br /><br />-- 11/30/98  <br /><br />SELECT e.owner, e.segment_type , e.segment_name , count(*) as nr_extents ,  <br /><br />s.max_extents  <br /><br />, to_char ( sum ( e.bytes ) / ( 1024 * 1024 ) , '999,999.90') as MB  <br /><br />FROM dba_extents e , dba_segments s  <br /><br />WHERE e.segment_name = s.segment_name  <br /><br />GROUP BY e.owner, e.segment_type , e.segment_name , s.max_extents  <br /><br />HAVING count(*) &gt;; &amp;THRESHOLD  <br /><br />OR ( ( s.max_extents - count(*) ) &lt; &amp;&amp;THRESHOLD )  <br /><br />ORDER BY count(*) desc  <br /><br />4. spacebound.sql  <br /><br />-- spacebound.sql  <br /><br />-- To identify space-bound objects. If all is well, no rows are returned.  <br /><br />-- If any space-bound objects are found, look at value of NEXT extent  <br /><br />-- size to figure out what happened.  <br /><br />-- Then use coalesce (alter tablespace &lt;foo&gt;; coalesce .  <br /><br />-- Lastly, add another datafile to the tablespace if needed.  <br /><br />-- 11/30/98  <br /><br />SELECT a.table_name, a.next_extent, a.tablespace_name  <br /><br />FROM all_tables a,  <br /><br />( SELECT tablespace_name, max(bytes) as big_chunk  <br /><br />FROM dba_free_space  <br /><br />GROUP BY tablespace_name ) f  <br /><br />WHERE f.tablespace_name = a.tablespace_name  <br /><br />AND a.next_extent &gt;; f.big_chunk  <br /><br />B. 每晚处理程序  <br /><br />1. mk_volfact.sql  <br /><br />-- mk_volfact.sql (only run this once to set it up; do not run it nightly!)  <br /><br />-- -- Table UTL_VOL_FACTS  <br /><br />CREATE TABLE utl_vol_facts (  <br /><br />table_name VARCHAR2(30),  <br /><br />num_rows NUMBER,  <br /><br />meas_dt DATE )  <br /><br />TABLESPACE platab  <br /><br />STORAGE (  <br /><br />INITIAL 128k  <br /><br />NEXT 128k  <br /><br />PCTINCREASE 0  <br /><br />MINEXTENTS 1  <br /><br />MAXEXTENTS unlimited  <br /><br />)  <br /><br />/  <br /><br />-- Public Synonym  <br /><br />CREATE PUBLIC SYNONYM utl_vol_facts FOR &amp;OWNER..utl_vol_facts  <br /><br />/  <br /><br />-- Grants for UTL_VOL_FACTS  <br /><br />GRANT SELECT ON utl_vol_facts TO public  <br /><br />/  <br /><br />2. analyze_comp.sql  <br /><br />--  <br /><br />-- analyze_comp.sql  <br /><br />--  <br /><br />BEGIN  <br /><br />sys.dbms_utility.analyze_schema ( '&amp;OWNER','COMPUTE');  <br /><br />END ;  <br /><br />/  <br /><br />3. pop_vol.sql  <br /><br />--  <br /><br />-- pop_vol.sql  <br /><br />--  <br /><br />insert into utl_vol_facts  <br /><br />select table_name  <br /><br />, NVL ( num_rows, 0) as num_rows  <br /><br />, trunc ( last_analyzed ) as meas_dt  <br /><br />from all_tables -- or just user_tables  <br /><br />where owner in ('&amp;OWNER') -- or a comma-separated list of owners  <br /><br />/  <br /><br />commit  <br /><br />/  <br /><br />　  <br /><br />C. 每周处理程序  <br /><br />1. nextext.sql  <br /><br />--  <br /><br />-- nextext.sql  <br /><br />--  <br /><br />-- To find tables that don't match the tablespace default for NEXT extent.  <br /><br />-- The implicit rule here is that every table in a given tablespace should  <br /><br />-- use the exact same value for NEXT, which should also be the tablespace's  <br /><br />-- default value for NEXT.  <br /><br />--  <br /><br />-- This tells us what the setting for NEXT is for these objects today.  <br /><br />--  <br /><br />-- 11/30/98  <br /><br />SELECT segment_name, segment_type, ds.next_extent as Actual_Next  <br /><br />, dt.tablespace_name, dt.next_extent as Default_Next  <br /><br />FROM dba_tablespaces dt, dba_segments ds  <br /><br />WHERE dt.tablespace_name = ds.tablespace_name  <br /><br />AND dt.next_extent !=ds.next_extent  <br /><br />AND ds.owner = UPPER ( '&amp;OWNER' )  <br /><br />ORDER BY tablespace_name, segment_type, segment_name  <br /><br />2. existext.sql  <br /><br />--  <br /><br />-- existext.sql  <br /><br />--  <br /><br />-- To check existing extents  <br /><br />--  <br /><br />-- This tells us how many of each object's extents differ in size from  <br /><br />-- the tablespace's default size. If this report shows a lot of different  <br /><br />-- sized extents, your free space is likely to become fragmented. If so,  <br /><br />-- this tablespace is a candidate for reorganizing.  <br /><br />--  <br /><br />-- 12/15/98  <br /><br />SELECT segment_name, segment_type  <br /><br />, count(*) as nr_exts  <br /><br />, sum ( DECODE ( dx.bytes,dt.next_extent,0,1) ) as nr_illsized_exts  <br /><br />, dt.tablespace_name, dt.next_extent as dflt_ext_size  <br /><br />FROM dba_tablespaces dt, dba_extents dx  <br /><br />WHERE dt.tablespace_name = dx.tablespace_name  <br /><br />AND dx.owner = '&amp;OWNER'  <br /><br />GROUP BY segment_name, segment_type, dt.tablespace_name, dt.next_extent  <br /><br />3. No_pk.sql  <br /><br />--  <br /><br />-- no_pk.sql  <br /><br />--  <br /><br />-- To find tables without PK constraint  <br /><br />--  <br /><br />-- 11/2/98  <br /><br />SELECT table_name  <br /><br />FROM all_tables  <br /><br />WHERE owner = '&amp;OWNER'  <br /><br />MINUS  <br /><br />SELECT table_name  <br /><br />FROM all_constraints  <br /><br />WHERE owner = '&amp;&amp;OWNER'  <br /><br />AND constraint_type = 'P'  <br /><br />4. disPK.sql  <br /><br />--  <br /><br />-- disPK.sql  <br /><br />--  <br /><br />-- To find out which primary keys are disabled  <br /><br />--  <br /><br />-- 11/30/98  <br /><br />SELECT owner, constraint_name, table_name, status  <br /><br />FROM all_constraints  <br /><br />WHERE owner = '&amp;OWNER' AND status = 'DISABLED’ AND constraint_type = 'P'  <br /><br />5. nonuPK.sql  <br /><br />--  <br /><br />-- nonuPK.sql  <br /><br />--  <br /><br />-- To find tables with nonunique PK indexes. Requires that PK names  <br /><br />-- follow a naming convention. An alternative query follows that  <br /><br />-- does not have this requirement, but runs more slowly.  <br /><br />--  <br /><br />-- 11/2/98  <br /><br />SELECT index_name, table_name, uniqueness  <br /><br />FROM all_indexes  <br /><br />WHERE index_name like '&amp;<img src="http://bbs.chinaunix.net/images/smilies/titter.gif" align="absMiddle" border="0" />KNAME%'  <br /><br />AND owner = '&amp;OWNER' AND uniqueness = 'NONUNIQUE'  <br /><br />SELECT c.constraint_name, i.tablespace_name, i.uniqueness  <br /><br />FROM all_constraints c , all_indexes i  <br /><br />WHERE c.owner = UPPER ( '&amp;OWNER' ) AND i.uniqueness = 'NONUNIQUE'  <br /><br />AND c.constraint_type = 'P' AND i.index_name = c.constraint_name  <br /><br />6. mkrebuild_idx.sql  <br /><br />--  <br /><br />-- mkrebuild_idx.sql  <br /><br />--  <br /><br />-- Rebuild indexes to have correct storage parameters  <br /><br />--  <br /><br />-- 11/2/98  <br /><br />SELECT 'alter index ' || index_name || ' rebuild '  <br /><br />, 'tablespace INDEXES storage '  <br /><br />|| ' ( initial 256 K next 256 K pctincrease 0 ) ; '  <br /><br />FROM all_indexes  <br /><br />WHERE ( tablespace_name != 'INDEXES'  <br /><br />OR next_extent != ( 256 * 1024 )  <br /><br />)  <br /><br />AND owner = '&amp;OWNER'  <br /><br />/  <br /><br />7. datatype.sql  <br /><br />--  <br /><br />-- datatype.sql  <br /><br />--  <br /><br />-- To check datatype consistency between two environments  <br /><br />--  <br /><br />-- 11/30/98  <br /><br />SELECT  <br /><br />table_name,  <br /><br />column_name,  <br /><br />data_type,  <br /><br />data_length,  <br /><br />data_precision,  <br /><br />data_scale,  <br /><br />nullable  <br /><br />FROM all_tab_columns -- first environment  <br /><br />WHERE owner = '&amp;OWNER'  <br /><br />MINUS  <br /><br />SELECT  <br /><br />table_name,  <br /><br />column_name,  <br /><br />data_type,  <br /><br />data_length,  <br /><br />data_precision,  <br /><br />data_scale,  <br /><br />nullable  <br /><br />FROM all_tab_columns@&amp;my_db_link -- second environment  <br /><br />WHERE owner = '&amp;OWNER2'  <br /><br />order by table_name, column_name  <br /><br />8. obj_coord.sql  <br /><br />--  <br /><br />-- obj_coord.sql  <br /><br />--  <br /><br />-- To find out any difference in objects between two instances  <br /><br />--  <br /><br />-- 12/08/98  <br /><br />SELECT object_name, object_type  <br /><br />FROM user_objects  <br /><br />MINUS  <br /><br />SELECT object_name, object_type  <br /><br />FROM user_objects@&amp;my_db_link  <br /><br />六. 参考文献  <br /><br />1. Loney, Kevin Oracle8 DBA Handbook  <br /><br />2. Cook, David Database Management from Crisis to Confidence  <br /><br />[http://www.orapub.com/]  <br /><br />3. Cox, Thomas B. The Database Administration Maturity Model</font>
		<br />
<img src ="http://www.blogjava.net/cymao/aggbug/38289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2006-03-30 17:19 <a href="http://www.blogjava.net/cymao/archive/2006/03/30/38289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）Oracle高手必读</title><link>http://www.blogjava.net/cymao/archive/2006/03/30/38280.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Thu, 30 Mar 2006 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2006/03/30/38280.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/38280.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2006/03/30/38280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/38280.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/38280.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 13px">1. 删除表的注意事项  <br />在删除一个表中的全部数据时，须使用TRUNCATE TABLE 表名;因为用DROP TABLE，DELETE * FROM 表名时，TABLESPACE表空间该表的占用空间并未释放，反复几次DROP，DELETE操作后，该TABLESPACE上百兆的空间就被耗光了。  <br /><br />2.having 子句的用法  <br />　　having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量,聚组函数或group by 子句中的列.  <br /><br />3.外部联接"+"的用法  <br />　　外部联接"+"按其在"="的左边或右边分左联接和右联接.若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.若二者均不带’+’,则二者中无法匹配的均被返回.利用外部联接"+",可以替代效率十分低下的 not in 运算,大大提高运行速度.例如,下面这条命令执行起来很慢  <br /><br />用外联接提高表连接的查询速度  <br />在作表连接(常用于视图)时，常使用以下方法来查询数据:  <br />SELECT PAY_NO, PROJECT_NAME  <br />FROM A  <br />WHERE A.PAY_NO NOT IN (SELECT PAY_  <br />NO FROM B WHERE VALUE &gt;;=120000);  <br />---- 但是若表A有10000条记录，表B有10000条记录，则要用掉30分钟才能查完，主要因为NOT IN要进行一条一条的比较，共需要10000*10000次比较后，才能得到结果。该用外联接后，可以缩短到1分左右的时间:  <br />SELECT PAY_NO,PROJECT_NAME  <br />FROM A,B  <br />WHERE A.PAY_NO=B.PAY_NO(+)  <br />AND B.PAY_NO IS NULL  <br />AND B.VALUE &gt;;=12000;  <br /><br /><br />4.set transaction 命令的用法  <br />在执行大事务时,有时oracle会报出如下的错误:  <br />ORA-01555:snapshot too old (rollback segment too small)  <br />　　这说明oracle给此事务随机分配的回滚段太小了,这时可以为它指定一个足够大的回滚段,以确保这个事务的成功执行.例如  <br /><br />set transaction use rollback segment roll_abc;  <br />delete from table_name where ...  <br />commit;  <br />　　回滚段roll_abc被指定给这个delete事务,commit命令则在事务结束之后取消了回滚段的指定.  <br /><br /><br />5.数据库重建应注意的问题  <br /><br />　　在利用import进行数据库重建过程中,有些视图可能会带来问题,因为结构输入的顺序可能造成视图的输入先于它低层次表的输入,这样建立视图就会失败.要解决这一问题,可采取分两步走的方法:首先输入结构,然后输入数据.命令举例如下 (uesrname:jfcl,password:hfjf,host sting<img src="http://bbs.chinaunix.net/images/smilies/icon_surprised.gif" align="absMiddle" border="0" />ra1,数据文件:expdata.dmp):  <br /><br />imp jfcl/hfjf@ora1 file=empdata.dmp rows=N  <br /><br />imp jfcl/hfjf@ora1 file=empdata.dmp full=Y buffer=64000  <br /><br />commit=Y ignore=Y  <br /><br />　　第一条命令输入所有数据库结构,但无记录.第二次输入结构和数据,64000字节提交一次.ignore=Y选项保证第二次输入既使对象存在的情况下也能成功.  <br /><br />select a.empno from emp a where a.empno not in  <br /><br />(select empno from emp1 where job=’SALE’);  <br /><br />　　倘若利用外部联接,改写命令如下:  <br /><br />select a.empno from emp a ,emp1 b  <br /><br />where a.empno=b.empno(+)  <br /><br />and b.empno is null  <br /><br />and b.job=’SALE’;  <br /><br />　　可以发现,运行速度明显提高.  <br /><br /><br />6.从已知表新建另一个表：  <br />CREATE TABLE b  <br />AS SELECT * (可以是表a中的几列)  <br />FROM a  <br />WHERE a.column = ...;  <br /><br /><br />7.查找、删除重复记录:  <br /><br />法一: 用Group by语句 此查找很快的  <br />select count(num), max(name) from student --查找表中num列重复的，列出重复的记录数，并列出他的name属性  <br />group by num  <br />having count(num) &gt;;1 --按num分组后找出表中num列重复，即出现次数大于一次  <br /><br />delete from student(上面Select的)  <br />这样的话就把所有重复的都删除了。-----慎重  <br /><br />法二:当表比较大(例如10万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法:  <br />---- 执行下面SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录  <br />SELECT * FROM EM5_PIPE_PREFAB  <br />WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D --D相当于First,Second  <br />WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND  <br />EM5_PIPE_PREFAB.DSNO=D.DSNO);  <br /><br />---- 执行下面SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录  <br />DELETE FROM EM5_PIPE_PREFAB  <br />WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D  <br />WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND  <br />EM5_PIPE_PREFAB.DSNO=D.DSNO);  <br /><br />8.返回表中[N，M]条记录：  <br /><br />取得某列中第N大的行  <br />select column_name from  <br />(select table_name.*,dense_rank() over (order by column desc) rank from table_name)  <br />where rank = &amp;N；  <br /><br />　假如要返回前5条记录：  <br />　　select * from tablename where rownum&lt;6;(或是rownum &lt;= 5 或是rownum != 6)  <br />假如要返回第5-9条记录：  <br />select * from tablename  <br />where …  <br />and rownum&lt;10  <br />minus  <br />select * from tablename  <br />where …  <br />and rownum&lt;５  <br />order by name  <br />　选出结果后用name排序显示结果。(先选再排序)  <br /><br />注意：只能用以上符号(&lt;、&lt;=、!=)。  <br />select * from tablename where rownum != 10;返回的是前９条记录。  <br />不能用：&gt;;,&gt;;=,=,Between...and。由于rownum是一个总是从1开始的伪列，Oracle 认为这种条件 不成立，查不到记录.  <br /><br />另外，这个方法更快：  <br />select * from (  <br />select rownum r,a from yourtable  <br />where rownum &lt;= 20  <br />order by name )  <br />where r &gt;; 10  <br />这样取出第11-20条记录!(先选再排序再选)  <br />要先排序再选则须用select嵌套：内层排序外层选。  <br /><br />rownum是随着结果集生成的，一旦生成，就不会变化了；同时,生成的结果是依次递加的，没有1就永远不会有2!  <br />rownum 是在 查询集合产生的过程中产生的伪列，并且如果where条件中存在 rownum 条件的话，则:  <br />1： 假如 判定条件是常量，则：  <br />只能 rownum = 1, &lt;= 大于1 的自然数， = 大于1 的数是没有结果的， 大于一个数也是没有结果的  <br />即 当出现一个 rownum 不满足条件的时候则 查询结束 　　this is stop key!  <br />2: 当判定值不是常量的时候  <br />若条件是 = var , 则只有当 var 为1 的时候才满足条件，这个时候不存在 stop key ,必须进行 full scan ,对每个满足其他where条件的数据进行判定  <br />选出一行后才能去选rownum=2的行……  <br /><br /><br />9.快速编译所有视图  <br /><br />---- 当在把数据库倒入到新的服务器上后(数据库重建)，需要将视图重新编译一遍，因为该表空间视图到其它表空间的表的连接会出现问题，可以利用PL/SQL的语言特性，快速编译。  <br />SQL &gt;;SPOOL ON.SQL  <br />SQL &gt;;SELECT ‘ALTER VIEW ‘||TNAME||’  <br />COMPILE;’ FROM TAB;  <br />SQL &gt;;SPOOL OFF  <br />然后执行ON.SQL即可。  <br />SQL &gt;;@ON.SQL  <br />当然，授权和创建同义词也可以快速进行，如：  <br />SQL &gt;;SELECT ‘GRANT SELECT ON ’  <br />||TNAME||’ TO USERNAME;’ FROM TAB;  <br />SQL &gt;;SELECT ‘CREATE SYNONYM  <br />‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;  <br /><br /><br />10.读写文本型操作系统文件  <br />---- 在PL/SQL 3.3以上的版本中，UTL_FILE包允许用户通过PL/SQL读写操作系统文件。如下：  <br /><br />DECALRE  <br />FILE_HANDLE UTL_FILE.FILE_TYPE;  <br />BEGIN  <br />FILE_HANDLE:=UTL_FILE.FOPEN(  <br />‘C:\’,’TEST.TXT’,’A’);  <br />UTL_FILE.PUT_LINE(FILE_HANDLE,’  <br />HELLO,IT’S A TEST TXT FILE’);  <br />UTL_FILE.FCLOSE(FILE_HANDLE);  <br />END;  <br /><br /><br />11.在数据库触发器中使用列的新值与旧值  <br />---- 在数据库触发器中几乎总是要使用触发器基表的列值，如果某条语句需要某列修改前的值，使用:OLD就可以了，使用某列修改后的新值，用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。  <br /><br /><br />12.数据库文件的移动方法  <br />当想将数据库文件移动到另外一个目录下时，可以用ALTER DATABASE命令来移动(比ALTER TABLESPACE适用性强)：  <br />1. 使用SERVER MANAGER关闭实例.  <br />SVRMGR &gt;; connect internal;  <br />SVRMGR &gt;; shutdown;  <br />SVRMGR &gt;;exit;  <br />2. 使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS 2.6). 在UNIX中用 mv命令可以把文件移动到新的位置，  <br />#mv /ora13/orarun/document.dbf /ora12/orarun  <br />3. 装载数据库并用alter database命令来改变数据库中的文件名.  <br />SVRMGR &gt;; connect internal;  <br />SVRMGR &gt;; startup mount RUN73;  <br />SVRMGR &gt;; alter database rename file  <br />&gt;; ‘/ ora13/orarun/document.dbf’  <br />&gt;; ‘/ ora12/orarun/document.dbf’;  <br />4. 启动实例.  <br />SVRMGR &gt;; alter database open;  <br /><br /><br />13.连接查询结果：  <br />表a 列 a1 a2  <br />记录 1 a  <br />1 b  <br />2 x  <br />2 y  <br />2 z  <br />用select能选成以下结果:  <br />1 ab  <br />2 xyz  <br /><br />下面有两个例子：  <br />1.使用pl/sql代码实现，但要求你组合后的长度不能超出oracle varchar2长度的限制  <br />create or replace type strings_table is table of varchar2(20);  <br />/  <br />create or replace function merge (pv in strings_table) return varchar2  <br />is  <br />ls varchar2(4000);  <br />begin  <br />for i in 1..pv.count loop  <br />ls := ls || pv(i);  <br />end loop;  <br />return ls;  <br />end;  <br />/  <br />create table t (id number,name varchar2(10));  <br />insert into t values(1,'Joan');  <br />insert into t values(1,'Jack');  <br />insert into t values(1,'Tom');  <br />insert into t values(2,'Rose');  <br />insert into t values(2,'Jenny');  <br /><br />column names format a80;  <br />select t0.id,merge(cast(multiset(select name from t where t.id = t0.id) as strings_table)) names  <br />from (select distinct id from t) t0;  <br /><br />drop type strings_table;  <br />drop function merge;  <br />drop table t;  <br /><br /><br />2.纯粹用sql：  <br />表dept, emp  <br />要得到如下结果  <br />deptno, dname, employees  <br />---------------------------------  <br />10, accounting, clark;king;miller  <br />20, research, smith;adams;ford;scott;jones  <br />30, sales, allen;blake;martin;james;turners  <br />每个dept的employee串起来作为一条记录返回  <br /><br />This example uses a max of 6, and would need more cut n pasting to do more than that：  <br /><br />SQL&gt;; select deptno, dname, emps  <br />2 from (  <br />3 select d.deptno, d.dname, rtrim(e.ename ||', '||  <br />4 lead(e.ename,1) over (partition by d.deptno  <br />5 order by e.ename) ||', '||  <br />6 lead(e.ename,2) over (partition by d.deptno  <br />7 order by e.ename) ||', '||  <br />8 lead(e.ename,3) over (partition by d.deptno  <br />9 order by e.ename) ||', '||  <br />10 lead(e.ename,4) over (partition by d.deptno  <br />11 order by e.ename) ||', '||  <br />12 lead(e.ename,5) over (partition by d.deptno  <br />13 order by e.ename),', ') emps,  <br />14 row_number () over (partition by d.deptno  <br />15 order by e.ename) x  <br />16 from emp e, dept d  <br />17 where d.deptno = e.deptno  <br />18 )  <br />19 where x = 1  <br />20 /  <br /><br />DEPTNO DNAME EMPS  <br />------- ----------- ------------------------------------------  <br />10 ACCOUNTING CLARK, KING, MILLER  <br />20 RESEARCH ADAMS, FORD, JONES, ROONEY, SCOTT, SMITH  <br />30 SALES ALLEN, BLAKE, JAMES, MARTIN, TURNER, WARD  <br /><br /><br /><br />14.在Oracle中建一个编号会自动增加的字段,以利于查询  <br /><br />1、建立序列：  <br />CREATE SEQUENCE checkup_no_seq  <br />NOCYCLE  <br />MAXVALUE 9999999999  <br />START WITH 2;  <br /><br />2、建立触发器：  <br />CREATE OR REPLACE TRIGGER set_checkup_no  <br />BEFORE INSERT ON checkup_history  <br />FOR EACH ROW  <br />DECLARE  <br />next_checkup_no NUMBER;  <br />BEGIN  <br />--Get the next checkup number from the sequence  <br />SELECT checkup_no_seq.NEXTVAL  <br />INTO next_checkup_no  <br />FROM dual;  <br /><br />--use the sequence number as the primary key  <br />--for the record being inserted  <br />:new.checkup_no := next_checkup_no;  <br />END;  <br /><br /><br />15.查看对象的依赖关系(比如视图与表的引用)  <br /><br />查看视图：dba_dependencies 记录了相关的依赖关系  <br />查东西不知道要查看哪个视图时，可以在DBA_Objects里看，  <br />select object_name from dba_objects where object_name like '%ROLE%'(假如查看ROLE相关)  <br />然后DESC一下就大体上知道了。  <br /><br /><br />16.要找到某月中所有周五的具体日期  <br />select to_char(t.d,'YY-MM-DD') from (  <br />select trunc(sysdate, 'MM')+rownum-1 as d  <br />from dba_objects  <br />where rownum &lt; 32) t  <br />where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期  <br />and trim(to_char(t.d, 'Day')) = '星期五'  </span>
<img src ="http://www.blogjava.net/cymao/aggbug/38280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2006-03-30 16:58 <a href="http://www.blogjava.net/cymao/archive/2006/03/30/38280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下硬盘分区的最佳方案</title><link>http://www.blogjava.net/cymao/archive/2006/01/24/29100.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Tue, 24 Jan 2006 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2006/01/24/29100.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/29100.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2006/01/24/29100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/29100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/29100.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=1 cellPadding=4 width="100%" bgColor=#cccccc border=0>
<TBODY>
<TR vAlign=top bgColor=#eeeeee>
<TD style="WORD-BREAK: break-all" width="96%">
<TABLE cellSpacing=0 cellPadding=2 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top width="90%"><FONT face=arial,sans-serif color=#000000 size=-1><B>Linux下硬盘分区的最佳方案</B></FONT></TD>
<TD noWrap width="10%"><FONT face=arial,sans-serif color=#000000 size=-1></FONT></TD></TR></TBODY></TABLE></TD>
<TD style="WORD-BREAK: break-all" vAlign=top noWrap align=middle width="1%">
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD><A title=回复此消息 href="http://www.g-nb.com/forums/post.jsp?forum=18&amp;thread=205&amp;message=410&amp;reply=true"></A></TD>
<TD><FONT face=arial,sans-serif size=-1></FONT></TD></TR></TBODY></TABLE></TD></TR>
<TR bgColor=#eeeeee>
<TD style="WORD-BREAK: break-all" vAlign=top width="99%" colSpan=2><FONT face=arial,sans-serif color=#000000 size=-1>在对硬盘进行分区前，应该先弄清楚计算机担负的工作及硬盘的容量有多大，还要考虑到以下几个问题。&nbsp;<BR><BR>　　第一点也是最重要的一点，要知道当前安装LILO的版本，因为LILO2.21及早期版本对硬盘大小有限制，如果安装LILO到1023磁道以外即8G的空间以外，LILO就无法启动。&nbsp;但一些BIOS较老的机器，LINUX仍然无法突破1024磁道的限制，因此这些BIOS无法认出大于1024的硬盘空间。&nbsp;<BR><BR>　　还需要考虑的问题有：&nbsp;<BR><BR>　　·&nbsp;是否限制用户可使用的磁盘空间大小？&nbsp;<BR><BR>　　·&nbsp;在系统中需要安装哪些软件？&nbsp;<BR><BR>　　·&nbsp;交换分区需要多大？&nbsp;<BR><BR>　　·&nbsp;系统是否有多个硬盘？&nbsp;<BR><BR>　　下面，我们按系统工作性质的不同对分区的划分提出了一些建议。当然，根据实际情况，在满足系统工作需求的前提下，下面的分区大小也可以灵活的变动。&nbsp;<BR><BR>基本工作站的分区方案&nbsp;<BR>　　假设系统的硬盘大小是10G。&nbsp;<BR><BR>　　/boot&nbsp;20M&nbsp;<BR><BR>　　Swap&nbsp;128M&nbsp;<BR><BR>　　/root&nbsp;9.85G&nbsp;<BR><BR>　　建立一个20M的/boot分区是为了避免将系统内核文件放到1024磁道以外，如果将/boot做为root分区的一个子目录，内核文件就会安装在root分区的任何地方，因为硬盘的大小超过了8G，所以在启动时就有可能出现问题。建议将交换分区的大小设置为内存的两倍，在这里我们假设系统的内存为64M。最后我们将硬盘的剩余空间全部分给了root分区。&nbsp;<BR><BR>Red&nbsp;Hat&nbsp;Linux&nbsp;6.2&nbsp;及其早期版本上的基本服务器硬盘分区方案&nbsp;<BR>　　这里的服务器我们假设只提供几种通用的服务，如WWW服务及FTP服务等几种服务，通过telnet登录的用户数很少。假设其硬盘大小为25G。&nbsp;<BR><BR>　　/boot&nbsp;20M&nbsp;<BR><BR>　　Swap&nbsp;128M&nbsp;<BR><BR>　　/&nbsp;10G&nbsp;<BR><BR>　　/home&nbsp;13G&nbsp;<BR><BR>　　/var&nbsp;2G&nbsp;<BR><BR>　　在硬盘的最前面创建20M大小的/boot分区，原因同上。交换分区的大小也是128M，因为内存的大小为64M。&nbsp;<BR><BR>　　/&nbsp;，即root分区设为10G这么大是因为其中有一个/usr目录，这个目录可能会占用很多硬盘空间，特别是在安装了X&nbsp;Server，运行图形界面的应用程序的时候。&nbsp;<BR><BR>　　/home分区是硬盘中最大的分区，这似乎与我们假设系统用户数不多有些矛盾。实际上在/home目录下确实没有几个用户目录，但在Red&nbsp;Hat6.2及更早的版本中，Apache服务器和wu-ftpd&nbsp;FTP服务器被放在了/home/httpd及/home/ftp目录中。所以这个分区这么大也是有原因的。&nbsp;<BR><BR>　　最后，/var目录独自占用了一个分区，因为系统的所有日志都写到了/var/log目录下，这将会占用很大的硬盘空间。如果系统日志记录得非常详细，整个目录很快会被写满，导致系统工作呆滞。当然，可以通过系统日志后台守护程序syslogd来修改日志配置，避免发生这种情况。&nbsp;<BR><BR>Red&nbsp;Hat&nbsp;7及以上版本的基本服务器分区方案&nbsp;<BR>　　这种情况同前一个方案的情况相同，不同的是LINUX版本为Red&nbsp;Hat&nbsp;7.0及其以上版本。&nbsp;<BR><BR>　　/boot&nbsp;20M&nbsp;<BR><BR>　　Swap&nbsp;128M&nbsp;<BR><BR>　　/&nbsp;10G&nbsp;<BR><BR>　　/var&nbsp;15G&nbsp;<BR><BR>　　与RedHat6不同，在RedHat7中HTTP服务和FTP服务的目录现在位于&nbsp;/var/www/&nbsp;和/var/ftp/，因此/var分区有15G之大也就不难理解了。&nbsp;<BR><BR>多用户服务器分区方案&nbsp;<BR>　　在这种服务器系统中，同时有多个用户通过telnet,&nbsp;ssh,&nbsp;rlogin或其方式在远程访问系统。系统中有三个35G的硬盘驱动器，总共有105G的磁盘空间&nbsp;。系统中用到了RAID&nbsp;5技术做数据冗余。这种情况下，管理员必须为每个用户分配磁盘空间。对RedHat&nbsp;6.2及更早的版本，分区如下：&nbsp;<BR><BR>　　Disk&nbsp;1:&nbsp;<BR><BR>　　/boot&nbsp;20M&nbsp;<BR><BR>　　/&nbsp;4G&nbsp;<BR><BR>　　/var&nbsp;3GB&nbsp;<BR><BR>　　/home&nbsp;27.98G&nbsp;<BR><BR>　　Disk&nbsp;2:&nbsp;<BR><BR>　　swap&nbsp;20MB&nbsp;<BR><BR>　　/&nbsp;4GB&nbsp;<BR><BR>　　/var&nbsp;3GB&nbsp;<BR><BR>　　/home&nbsp;27.98GB&nbsp;<BR><BR>　　Disk&nbsp;3:&nbsp;<BR><BR>　　swap&nbsp;20MB&nbsp;<BR><BR>　　/&nbsp;4GB&nbsp;<BR><BR>　　/var&nbsp;3GB&nbsp;<BR><BR>　　/home&nbsp;27.98GB&nbsp;<BR><BR>　　这样分区的原因：首先，Disk1上的20M&nbsp;/boot分区不属于任何RAID阵列，否则如果你将/boot放至RAID阵列中，以后就不能系统内核升级了。&nbsp;<BR><BR>　　为了方便管理，在其它两个硬盘中建立了20M的交换分区。这种服务器一般配有1G以上的内存，因此交换分区的大小不成问题。如果增大交换分区，就会减少RAID分区空间，所以20M是足够的。RAID分区的分组如下：&nbsp;<BR><BR>　　·&nbsp;1-A,&nbsp;2-A,&nbsp;and&nbsp;3-A&nbsp;一起组成一个8G的&nbsp;RAID&nbsp;5&nbsp;驱动器，做为/根目录打开。&nbsp;<BR><BR>　　·&nbsp;1-B,&nbsp;2-B,&nbsp;and&nbsp;3-B&nbsp;组成&nbsp;6GB的&nbsp;RAID&nbsp;5&nbsp;驱动器，做为&nbsp;/var目录。&nbsp;<BR><BR>　　·&nbsp;1-C,&nbsp;2-C,&nbsp;and&nbsp;3-C&nbsp;组成&nbsp;55.96GB&nbsp;RAID&nbsp;5&nbsp;驱动器,&nbsp;做为&nbsp;/home.目录。&nbsp;<BR><BR>　　这种分配方案总共有55.96G的空间分配给所有用户及Apache和FTP服务，在/var下用6G空间用做记录日志、邮件，这么大的空间是足够的。&nbsp;<BR><BR>　　如果安装Red&nbsp;Hat7或以上版本，应给/var分区更大的空间，因为它同时还存放着WEB和FTP服务的两个目录。&nbsp;</FONT></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/cymao/aggbug/29100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2006-01-24 14:37 <a href="http://www.blogjava.net/cymao/archive/2006/01/24/29100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 的入门心得(转)</title><link>http://www.blogjava.net/cymao/archive/2006/01/23/29008.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Mon, 23 Jan 2006 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2006/01/23/29008.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/29008.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2006/01/23/29008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/29008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/29008.html</trackback:ping><description><![CDATA[<P>Oracle 的入门心得</P>
<P>oracle的体系太庞大了，对于初学者来说，难免会有些无从下手的感觉，什么都想学，结果什么都学不好，所以把学习经验共享一下，希望让刚刚入门的人对oracle有一个总体的认识，少走一些弯路。 <BR>&nbsp; <BR>一、定位 <BR>oracle分两大块，一块是开发，一块是管理。开发主要是写写存储过程、触发器什么的，还有就是用Oracle的Develop工具做form。有点类似于程序员，需要有较强的逻辑思维和创造能力，个人觉得会比较辛苦，是青春饭J；管理则需要对oracle数据库的原理有深刻的认识，有全局操纵的能力和紧密的思维，责任较大，因为一个小的失误就会down掉整个数据库，相对前者来说，后者更看重经验。 <BR>&nbsp; <BR>因为数据库管理的责任重大，很少公司愿意请一个刚刚接触oracle的人去管理数据库。对于刚刚毕业的年轻人来说，可以先选择做开发，有一定经验后转型，去做数据库的管理。当然，这个还是要看人个的实际情况来定。</P>
<P>二、学习方法&nbsp; <BR>我的方法很简单，就是：看书、思考、写笔记、做实验、再思考、再写笔记 <BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 看完理论的东西，自己静下心来想想，多问自己几个为什么，然后把所学和所想的知识点做个笔记；在想不通或有疑问的时候，就做做实验，想想怎么会这样，同样的，把实验的结果记下来。思考和做实验是为了深入的了解这个知识点。而做笔记的过程，也是理清自己思路的过程。 <BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 学习的过程是使一个问题由模糊到清晰，再由清晰到模糊的过程。而每次的改变都代表着你又学到了一个新的知识点。 <BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 学习的过程也是从点到线，从线到网，从网到面的过程。当点变成线的时候，你会有总豁然开朗的感觉。当网到面的时候，你就是高手了 <BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 很多网友，特别是初学的人，一碰到问题就拿到论坛上来问，在问前，你有没有查过书，自己有没有研究过，有没有搜索一下论坛？这就叫思维惰性。由别人来回答你的问题，会让你在短时间内不费劲地弄懂这个知识点，然而通过自己的努力去研究它，不但会更深入的了解这个知识点，更重要的是在研究的过程会提高你解决问题和分析问题的能力。总的来说，没有钻研的学习态度，不管学什么东西，都不会成功的。 <BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 当然，初学的人很多时候是因为遇到问题时，无从下手，也不知道去哪里找资料，才会到论坛上提问题的。但我认为，在提问的时候，是不是可以问别人是如何分析这个问题？从哪里可以找到相关的资料？而不是这个问题的答案是什么？授人以鱼不如授人以渔。</P>
<P>&nbsp;&nbsp; 下面我讲下我处理问题的过程</P>
<P>&nbsp;&nbsp; 首先要知道oracle的官方网站：<A href="http://www.oracle.com">www.oracle.com</A> 这里有oracle的各种版本的数据库、应用工具和权威的官方文档。其次，还要知道<A href="http://metalink.oracle.com/">http://metalink.oracle.com/</A>这里是买了oracle服务或是oracle的合作伙伴才可以进去的，里面有很多权威的解决方案和补丁。然后就是一些著名网站：asktom.oracle.com <A href="http://www.orafaq.net">www.orafaq.net</A>, <A href="http://www.dbazine.com">www.dbazine.com</A>。这里有很多经验之谈。</P>
<P>&nbsp;&nbsp;&nbsp; 遇到问题了。如果是概念上的问题，第一时间可以找tahiti.oracle.com，这里会给你最详细的解释。如果在运行的过程中出了什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当然。这里只是相对而言。</P>
<P>三、oracle的体系 <BR>oracle的体系很庞大，要学习它，首先要了解oracle的框架。在这里，简要的讲一下oracle的架构，让初学者对oracle有一个整体的认识。 <BR>&nbsp; <BR>1、物理结构（由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成） <BR>控制文件：包含维护和验证数据库完整性的必要信息、例如，控制文件用于识别数据文件和重做日志文件，一个数据库至少需要一个控制文件 <BR>数据文件：存储数据的文件 <BR>重做日志文件：含对数据库所做的更改记录，这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件 <BR>参数文件：定义Oracle 例程的特性，例如它包含调整SGA 中一些内存结构大小的参数 <BR>归档文件：是重做日志文件的脱机副本，这些副本可能对于从介质失败中进行恢复很必要。 <BR>密码文件：认证哪些用户有权限启动和关闭Oracle例程 <BR>&nbsp; <BR>2、逻辑结构（表空间、段、区、块） <BR>表空间：是数据库中的基本逻辑结构，一系列数据文件的集合。 <BR>段：是对象在数据库中占用的空间 <BR>区：是为数据一次性预留的一个较大的存储空间 <BR>块：ORACLE最基本的存储单位，在建立数据库的时候指定 <BR>&nbsp; <BR>3、内存分配（SGA和PGA） <BR>SGA：是用于存储数据库信息的内存区，该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配，如果实际内存不够再往虚拟内存中写。 <BR>PGA：包含单个服务器进程或单个后台进程的数据和控制信息，与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域，PGA 在创建进程时分配在终止进程时回收 <BR>&nbsp; <BR>4、后台进程（数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程） <BR>数据写进程：负责将更改的数据从数据库缓冲区高速缓存写入数据文件 <BR>日志写进程：将重做日志缓冲区中的更改写入在线重做日志文件 <BR>系统监控：检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复 <BR>进程监控：负责在一个Oracle 进程失败时清理资源 <BR>检查点进程：负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。 <BR>归档进程：在每次日志切换时把已满的日志组进行备份或归档 <BR>服务进程：用户进程服务。 <BR>用户进程：在客户端，负责将用户的SQL 语句传递给服务进程，并从服务器段拿回查询数据。 <BR>&nbsp; <BR>5、oracle例程：Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。例程一次只能打开和使用一个数据库。 <BR>&nbsp; <BR>6、SCN(System Change Number)：系统改变号，一个由系统内部维护的序列号。当系统需要更新的时候自动增加，他是系统中维持数据的一致性和顺序恢复的重要标志。</P>
<P><BR>四、深入学习&nbsp; <BR>管理：可以考OCP证书，对oracle先有一个系统的学习，然后看Oracle Concepts、oracle online document,对oracle的原理会有更深入的了解，同时可以开始进行一些专题的研究如：RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&amp;RECOVER等等。 <BR>&nbsp; <BR>开发：对于想做Oracle开发的，在了解完Oracle基本的体系结构之后，可以重点关注PL/SQL及Oracle的开发工具这一部分。 PL/SQL主要是包括怎么写SQL语句，怎么使用Oracle本身的函数，怎么写存储过程、存储函数、触发器等。 Oracle的开发工具主要就是Oracle自己的Developer Suite（Oracle Forms Developer and Reports Developer这些），学会如何熟练使用这些工具。</P>
<P>介绍几本oracle入门的好书</P>
<P>oracle官方文档：《concept》上面讲了oracle的体系和概念，很适合初学者看。</P>
<P>OCP的教学用书，也就是STUDY GUIDE(SG)。<BR>Oracle8i 备份恢复手册<BR>Oracle8高级管理与优化<BR>Oracle8i PLSQL程序设计<BR>Oracle8数据库管理员手册<BR>以上书本都是机械工业出版社出版。<BR>&nbsp; <BR>介绍几个网站 <BR><A href="http://tahiti.oracle.com">http://tahiti.oracle.com</A> oracle的官方文档 <BR>现在<A href="http://www.oracle.com.cn/onlinedoc/index.htm">http://www.oracle.com.cn/onlinedoc/index.htm</A>也有官方文档，速度奇快<BR><A href="http://metalink.oracle.com/">http://metalink.oracle.com/</A> oracle的技术支持网站。需要购买Oracle服务才能有一个帐号，才能登陆，有大量的Knowledge Base，大量问题解决经验。 <BR><A href="http://www.oracle.com">http://www.oracle.com</A> oracle的官方网站，可以在这里down oracle的软件、官方文档和获得最新的消息 <BR><A href="http://www.dbazine.com/">http://www.dbazine.com/</A> Oracle的杂志 <BR><A href="http://asktom.oracle.com">http://asktom.oracle.com</A>&nbsp; <BR><A href="http://www.orafaq.net/">http://www.orafaq.net/</A>&nbsp; <BR><A href="http://www.ixora.com.au/">http://www.ixora.com.au/</A> <BR><A href="http://www.oracle-base.com">http://www.oracle-base.com</A> <BR><A href="http://www.dba-oracle.com/oracle_links.htm">http://www.dba-oracle.com/oracle_links.htm</A></P>
<P>&nbsp;</P>
<P>&nbsp;</P><img src ="http://www.blogjava.net/cymao/aggbug/29008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2006-01-23 13:53 <a href="http://www.blogjava.net/cymao/archive/2006/01/23/29008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 基本知识 </title><link>http://www.blogjava.net/cymao/archive/2006/01/23/28999.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Mon, 23 Jan 2006 04:21:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2006/01/23/28999.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/28999.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2006/01/23/28999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/28999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/28999.html</trackback:ping><description><![CDATA[<TABLE borderColor=#000000 cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width="97%" align=center borderColorLight=#000000 border=0>
<TBODY>
<TR align=middle bgColor=#e0efff>
<TD>Oracle 基本知识</TD></TR>
<TR>
<TD>
<P>　　一个表空间只能属于一个数据库 
<P>　　每个数据库最少有一个控制文件（建议3个，分别放在不同的磁盘上） 
<P>　　每个数据库最少有一个表空间（SYSTEM表空间） 
<P>　　建立SYSTEM表空间的目的是尽量将目的相同的表存放在一起，以提高使用效率，只应存放数据字典 
<P>　　每个数据库最少有两个联机日志组，每组最少一个联机日志文件 
<P>　　一个数据文件只能属于一个表空间 
<P>　　一个数据文件一旦被加入到一个表空间中，就不能再从这个表空间中移走，也不能再加入到其他表空间中 
<P>　　建立新的表空间需要建立新的数据文件 
<P>　　数据文件被ORACLE格式化为ORACLE块，Oracle9i以前版本中，ORACLE块的大小是在第一次创建数据库时设定的， 
<P>　　并且以后不能改变，要想改变，只能重建数据库 
<P>　　一个段segment只能属于一个表空间，但可以属于多个数据文件 
<P>　　一个区extent只能属于一个数据文件，即区间（extent）不能跨越数据文件 
<P>　　PCTFREE和PCTUSED总和不能大于等于100 
<P>　　单独一个事务不能跨越多个回滚段 
<P>　　索引表不含ROWID值 
<P>　　拥有不同大小的回滚段没有任何益处 
<P>　　COMMIT后，数据不一定立即写盘（数据文件） 
<P>　　一个事务即使不被提交，也会被写入到重做日志中。 
<P>　　Oracle 8.0.4中，在初始安装时建立的缺省数据库，实例名为ORCL 
<P>　　一个块的最大长度为16KB(有2K、4K、8K、16K)<BR>　　每个数据库最大文件数（按块大小）<BR>　　2K块　　　　　　　　20000个文件<BR>　　4K块　　　　　　　　40000个文件<BR>　　8K块或以上　　　　　65536个文件<BR>
<P>　　oracle server可以同时启动多个数据库 
<P>　　一套操作系统上可以安装多个版本的ORACLE数据库系统（UNIX可以，NT不可以） 
<P>　　一套ORACLE数据库系统中可以有多个ORACLE数据库及其相对应的实例 
<P>　　每个ORACLE数据库拥有一个数据库实例（INSTANCE）（OPS除外） 
<P>　　所以，一套操作系统上同时可以有多个oracle数据库实例启动 </P></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/cymao/aggbug/28999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2006-01-23 12:21 <a href="http://www.blogjava.net/cymao/archive/2006/01/23/28999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装Oracle后，经常使用的修改表空间的SQL代码(转)</title><link>http://www.blogjava.net/cymao/archive/2006/01/23/28998.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Mon, 23 Jan 2006 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2006/01/23/28998.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/28998.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2006/01/23/28998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/28998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/28998.html</trackback:ping><description><![CDATA[<CENTER>
<H2>安装Oracle后，经常使用的修改表空间的SQL代码</H2></CENTER>
<TABLE width="90%" align=center>
<TBODY>
<TR align=right>
<TD>【点击：<FONT color=blue>
<SCRIPT src="view_count.asp?hitpath=newuser&amp;hitfilename=cg_sys_count"></SCRIPT>
 </FONT>】 <A href="mailto:oradb@126.com">阿木伯 著</A> </TD></TR>
<TR>
<TD width="100%"><PRE>配置：
Windows NT 4.0 中文版
5块10.2GB SCSI硬盘
分：C:盘、D:盘、E:盘、F:盘、G:盘
Oracle 8.0.4 for Windows NT
NT安装在C:\WINNT，Oracle安装在C:\ORANT

目标：
因系统的回滚段太小，现打算生成新的回滚段，
建立大的、新的表空间（数据表空间、索引表空间、回滚表空间、临时表空间、）
建两个数据表空间、两个索引表空间，这样建的目的是根据实际应用，
如：现有10个应用用户，每个用户是一个独立子系统（如：商业进销存MIS系统中的财务、收款、库存、人事、总经理等）
尤其大型商场中收款机众多，同时访问进程很多，经常达到50-100个进程同时访问，
这样，通过建立多个用户表空间、索引表空间，把各个用户分别建在不同的表空间里（多个用户表空间放在不同的物理磁盘上），
减少了用户之间的I/O竞争、读写数据与写读索引的竞争（用户表空间、索引表空间也分别放在不同的物理磁盘上）

规划：
C:盘、NT系统，Oracle系统
D:盘、数据表空间1（3GB、自动扩展）、回滚表空间1（1GB、自动扩展）
E:盘、数据表空间2（3GB、自动扩展）、回滚表空间2（1GB、自动扩展）
F:盘、索引表空间1（2GB、自动扩展）、临时表空间1（0.5GB、不自动扩展）
G:盘、索引表空间2（2GB、自动扩展）、临时表空间2（0.5GB、不自动扩展）

注：这只是一个简单的规划，实际规划要依系统需求来定，尽量减少I/O竞争

实现：
1、首先查看系统有哪些回滚段及其状态。

SQL&gt; col owner format a20
SQL&gt; col status format a10
SQL&gt; col segment_name format a20
SQL&gt; col tablespace_name format a20

SQL&gt; 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

查询到18记录.

SQL&gt; 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

查询到18记录.

2、修改代码如下，可把以下代码存入一.sql文件，如cg_sys.sql，然后以SQL&gt; @cg_sys.sql调用执行。

--注意：各个硬盘上要事先建好oradata目录

--修改现有回滚段，使之失效，下线
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;

--删除原有回滚段
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;

--建数据表空间1
--收款、库存、订货、远程通信
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 128K，因为，用户建在表空间上，而表建在用户里，为用户所拥有，
--用户继承数据表空间的存储参数，表继承用户的存储参数
--如果initial设的过大，如：5M，则每建一个空表就要占用5M的空间，即使一条记录也没有
--AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED，设置数据文件自动扩展，每一次扩展增加5M，最大空间不受限

--建数据表空间2
--物价、人事、结算、财务、总经理、合同、统计
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);

--建索引表空间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);

--建索引表空间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);

--建回滚表空间1
--设置初始值40M（initial 40M），则每在这个表空间中建一个回滚段，
--此回滚段自动继承此回滚表空间的存储参数，也即默认文件为40M
create tablespace ROLLBACK_DATA1 datafile 
'd:\oradata\roll1_1.ora' size 512M，
'd:\oradata\roll1_2.ora' size 512M 
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 40M next 5M pctincrease 0);

--建回滚表空间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);

--建临时表空间1
create tablespace TEMPORARY_DATA1 datafile 
'f:\oradata\temp1_1.ora' size 512M 
default storage (initial 10M next 3M pctincrease 0);

--建临时表空间2
create tablespace TEMPORARY_DATA2 datafile 
'g:\oradata\temp2_1.ora' size 512M 
default storage (initial 10M next 3M pctincrease 0);

--使其真正成为临时的
alter tablespace TEMPORARY_DATA1 temporary;
alter tablespace TEMPORARY_DATA2 temporary;

--建立新的回滚段，每个都一样大，不同大小的回滚段没有什么意义，系统是随机选择的。
--建多少个，根据并发访问用户的多少，
--如果你们公司每天有50-100个人员使用Oracle系统开发的管理软件，应该20个以上

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;
--前8个建在回滚表空间1中，后8个在回滚表空间2
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;

--使回滚段online，即有效
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;

--查看现有回滚段及其状态
col segment format a30
SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;

--查看数据文件及其所在表空间、大小、状态
col file_name format a40
col tablespace_name format a20
select file_name,file_id,tablespace_name,bytes,status from dba_data_files;


至此，表空间重新规划完毕，这里讲的比较通俗，还有好多参数值得设置，能够把Oracle设置到最优的境界，
表空间设置完了，下面，就该好好的整理一下Oracle的内存区了，
Oracle很有意思，内存越大，效果越明显，所以有必要好好调整一下SGA区，也就是主要配置ininorcl.ora参数文件。
</PRE></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/cymao/aggbug/28998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2006-01-23 12:19 <a href="http://www.blogjava.net/cymao/archive/2006/01/23/28998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 8.1.6 for Win2000 系统文件解释 </title><link>http://www.blogjava.net/cymao/archive/2006/01/23/28996.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Mon, 23 Jan 2006 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2006/01/23/28996.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/28996.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2006/01/23/28996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/28996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/28996.html</trackback:ping><description><![CDATA[<TABLE borderColor=#000000 cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width="100%" align=center borderColorLight=#000000 border=0>
<TBODY>
<TR align=middle>
<TD bgColor=#efffe0>Oracle 8.1.6 for Win2000 系统文件解释</TD></TR>
<TR>
<TD><BR></TD></TR>
<TR>
<TD>
<UL>
<LI>系统环境： 
<UL>1、操作系统：Windows 2000<BR>2、数据库：　Oracle 8i R2 (8.1.6) for NT 企业版<BR>3、安装路径：C:\ORACLE<BR></UL></LI></UL>
<UL>
<LI>解释： <PRE><UL>
Oracle 8i R2 (8.1.6) for NT 企业版默认安装完毕后会在所在盘符创建以下三个目录

admin：  记录Oracle实例的配置、运行日志等文件，每个实例一个目录
Ora81：  Oracle系统文件
oradata：Oracle实例运行所需的所有具体文件（数据文件、日志文件、控制文件），每个实例一个目录



一般来讲，Oracle文件分以下几个类型：

数据文件：　　　　　　真实数据
重做日志文件：　　　　联机日志、归档日志
控制文件：　　　　　　包含物理文件到数据字典中的逻辑表空间之间的映射
初始化参数文件：　　　控制内存
警告和追踪日志文件：
备份文件：



C:\Oracle\admin\oradb\pfile\init.ora　　　　　　　　　--初始化参数文件
C:\Oracle\admin\oradb\bdump\oradbALRT.LOG　　　　　　 --警告日志文件
C:\Oracle\admin\oradb\udump\ORA00960.TRC

C:\Oracle\oradata\oradb\SYSTEM01.DBF　　　　　　　　　--表空间数据文件
C:\Oracle\oradata\oradb\USERS01.DBF
C:\Oracle\oradata\oradb\INDX01.DBF
C:\Oracle\oradata\oradb\RBS01.DBF
C:\Oracle\oradata\oradb\TEMP01.DBF
C:\Oracle\oradata\oradb\TOOLS01.DBF
C:\Oracle\oradata\oradb\DR01.DBF
C:\Oracle\oradata\oradb\OEM_REPOSITORY.ORA


C:\Oracle\oradata\oradb\CONTROL01.CTL　　　　　　　　 --控制文件
C:\Oracle\oradata\oradb\CONTROL02.CTL
C:\Oracle\oradata\oradb\CONTROL03.CTL

C:\Oracle\oradata\oradb\REDO01.LOG　　　　　　　　　　--联机日志文件
C:\Oracle\oradata\oradb\REDO02.LOG
C:\Oracle\oradata\oradb\REDO03.LOG

C:\Oracle\oradata\oradb\archive\ORADB2T001S01100.ARC　--归档日志文件
...
C:\Oracle\oradata\oradb\archive\ORADB2T001S01199.ARC


C:\Oracle\Ora81\BIN\afiedt.buf　　　　　　　　　--SQL*Plus默认编辑文件
C:\Oracle\Ora81\BIN\oradc.ocx　　　　　　　　　 --Oracle ActiveX控件（可用于VB中）

C:\Oracle\Ora81\DATABASE\PWDoradb.ora　　　　　 --internal密码文件
C:\Oracle\Ora81\DATABASE\initoradb.ora　　　　　--启动参数文件
C:\Oracle\Ora81\DATABASE\oradim.log　　　　　　 --SVRMGRL管理器出错日志

C:\Oracle\Ora81\network\log\listener.log　　　　--监听器日志文件
C:\Oracle\Ora81\network\log\sqlnet.log　　　　　--Sql*Net 日志文件
C:\Oracle\Ora81\network\ADMIN\tnsnames.ora　　　--TNS 连接文件（数据库别名）
C:\Oracle\Ora81\network\ADMIN\sqlnet.ora　　　　--Sql*Net 环境文件
C:\Oracle\Ora81\network\ADMIN\listener.ora　　　--监听器参数文件

C:\Oracle\Ora81\sqlplus\admin\glogin.sql　　　　--Sql*Plus登录自动执行脚本
C:\Oracle\Ora81\sqlplus\admin\sqlplus.ini　　　 --Sql*Plus环境初始化文件

C:\Oracle\Ora81\precomp\demo\proc　　　　　　　 --Pro*C目录

C:\Oracle\Ora81\RDBMS\ADMIN\BUILDALL.SQL　　　　--生成所有对象脚本
C:\Oracle\Ora81\RDBMS\ADMIN\standard.sql　　　　--建立数据库基本结构的包
C:\Oracle\Ora81\RDBMS\ADMIN\catalog.sql　　　　 --建立数据字典视图脚本，以SYS、INTERNAL连接
C:\Oracle\Ora81\RDBMS\ADMIN\catexp.sql　　　　　--建立EXP/IMP用数据字典视图
C:\Oracle\Ora81\RDBMS\ADMIN\catexp7.sql　　　　 --使v7版本的EXP文件可以导入到v8中
C:\Oracle\Ora81\RDBMS\ADMIN\catdbsyn.sql　　　　--建立DBA私有数据字典视图
C:\Oracle\Ora81\RDBMS\ADMIN\cataudit.sql　　　　--建立审计用数据字典视图
C:\Oracle\Ora81\RDBMS\ADMIN\catsnap.sql　　　　 --建立快照数据字典视图，以SYS、INTERNAL连接
C:\Oracle\Ora81\RDBMS\ADMIN\SCOTT.SQL　　　　　 --生成SCOTT用户及其用户数据

C:\Oracle\Ora81\dbs\pupbld.sql　　　　　　　　　--新建一个数据库之后需要执行的脚本
</UL></PRE></LI></UL></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/cymao/aggbug/28996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2006-01-23 11:45 <a href="http://www.blogjava.net/cymao/archive/2006/01/23/28996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Toad 使用快速入门（转载）</title><link>http://www.blogjava.net/cymao/archive/2005/12/21/24925.html</link><dc:creator>茂</dc:creator><author>茂</author><pubDate>Wed, 21 Dec 2005 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/cymao/archive/2005/12/21/24925.html</guid><wfw:comment>http://www.blogjava.net/cymao/comments/24925.html</wfw:comment><comments>http://www.blogjava.net/cymao/archive/2005/12/21/24925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cymao/comments/commentRss/24925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cymao/services/trackbacks/24925.html</trackback:ping><description><![CDATA[<TABLE class=pageSpaceNewsSeparator cellSpacing=0 cellPadding=1 width="100%" border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD class=titleNews>Toad 使用快速入门（转载）</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD class=titleNewsRemark height=72>
<P><FONT color=#f26c4f>文章作者：</FONT> <BR>责任编辑：<FONT color=#000000>蒙面超人</FONT>　录入时间：2004-10-12 19:58:10 来源：[csdn]<BR>频道声明：本频道的文章除部分特别声明禁止转载的专稿外，可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意.&nbsp;</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE height=117 cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=content id=fontzoom style="WORD-WRAP: break-word" height=40><SPAN id=ArticleContent1_ArticleContent1_lblContent>&nbsp; 
<P>Toad 使用快速入门&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>目录</P>
<P>一．Toad功能综述<BR>二．系统需求<BR>三．安装指南<BR>四．快速入门<BR>1． Schema browser的用法简介<BR>2． SQL Editor的使用介绍<BR>3． Procedure Editor的用法介绍<BR>4． 如何进行PLSQL的debug<BR>5． 如何使用SQLab Xpert优化SQL<BR>6． 如何使用SQL Modeler来编写查询<BR>7． 如何使用Toad的DBA方面的功能</P>
<P>一、 Toad功能综述</P>
<P>在Oracle 应用程序的开发过程中，访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作，对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad（Tools of Oracle Application Developers）。在Toad的新版本中，还加入了DBA模块，可以帮助DBA完成许多日常管理工作。它最大的特点就是简单易用，访问速度快。使用 Toad，我们可以通过一个图形化的用户界面快速访问数据库，完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计，是一个功能强大、结构紧凑的专业化PL/SQL开发环境。<BR>Toad 主要具有如下特点：<BR>模式浏览：<BR>模式浏览功能可以让我们快速访问数据字典，浏览数据库中的表、索引、存储过程。Toad 提供对数据库的快速访问，使用极为方便，用户界面简洁，结构安排合理。当我们点击一个单独的数据库对象，Toad立即显示此对象的详细信息。例如，当我们点一个数据库的表，所有和此表相关的索引、约束、存储过程、SQL语句以及和其他表的相互引用关系都在同一界面显示出来。为了简化操作，用户可以在浏览窗口操作数据库对象。</P>
<P>SQL 编辑器：<BR>SQL 编辑器的主要功能是编辑、运行和调整SQL语句。TOAD 的高级编辑窗口包括众多的特性来提高开发人员编写SQL语句的产品化程度。例如，简单地生成代码模板，在编写SQL前自动发现包的内容和列的名字等等。<BR>SQL 编辑器包括一个编辑窗口和运行结果窗口，允许开发人员在编辑的过程中测试运行结果。SQL编辑器中不仅包括标准的编辑命令，也包括一些增强的功能，如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB 的内容，对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地找到相关位置。在运行结果窗口可提供用户定义的配置功能，支持LONG 和LONG RAW列，可以将数据卸出到磁盘、打印数据、编辑数据等等。</P>
<P>存储过程编辑器：<BR>存储过程编辑器的主要功能是编辑、编译、测试、调试存储过程和触发器。TOAD提供语法标识、错误标识和其他很多易于使用的功能，如在弹出窗口显示表名、列名和Oracle函数。和其他的 PL/SQL 编辑工具不同，TOAD 允许在一个文件中操作多个数据库对象，可以编译一个对象、编译多个对象、编译到当前光标、从光标开始编译。在运行出现错误时，存储过程停止到有问题的语句。用户可以使用快捷方式或模板来快速编写PL/SQL,也可以根据需要生成自己的模板。使用Toad可以非常方便地进行编辑工作，可如设置书签、取消注释、格式化SQL语句等等。</P>
<P>PL/SQL Debugger选项：<BR>Toad 提供简单易用的PL/SQL 调试功能，可以节省开发人员在大型项目中用于开发和测试的宝贵时间，提高应用开发的质量。在存储过程开发的过程中，Toad可以逐行编辑、调试和运行代码。运行时可以根据需要输入参数，观察相关参数的变化来检查存储过程的正确性。在调式过程中，Toad 可以通过窗口显示所有的断点、参数, 调用堆栈和输出参数。使用Toad，非常容易检测到存储过程的错误，开发人员可以一步一步运行PL/SQL语句来识别问题。调试会话可以和其他程序会话同时进行。</P>
<P>SQLab Xpert Option：<BR>帮助开发人员优化SQL，为他们提供各种优化模式下SQL执行计划，并且能够给出优化的建议，能够比较各种模式下实际的SQL运行结果，帮助开发人员真正高速地开发高效地代码。</P>
<P>Toad 还可以外挂一些别的产品，比如PL/Formatter, RevealNet Knowledge Base , SQL Impact等，这些都能够和Toad紧密集成，共同提供了一个完美的集成开发环境。新版本还新增加了DBA模块，更加拓广了Toad这个产品的适用范围。</P>
<P><BR>二、系统要求：<BR>客户端：<BR>ü Windows 95 / 98 / NT/2000中英文均可<BR>ü 完整安装的SQL*Net 2.0或者Net8<BR>ü 磁盘：一般安装需要20M左右的空间，根据所选择模块的不同和安装方式的不同，最少也要5M的磁盘空间（从网络服务器读取）<BR>ü 内存：Windows 9x/Me:16M 内存；Windows NT/2000: Min 32M]<BR>ü Tuning模块需要额外的25M空间</P>
<P>服务器端：<BR>ü Oracle 7.3 或者更高，在任何硬件平台上。<BR>ü 需要一个DBA用户帐号</P>
<P>三．安装：<BR>1． 三种安装方式的选择：<BR>a) TOAD and Personal Configuration Files to PC<BR>&nbsp;默认安装选择，完成一个完整的Client端的安装，把所有需要的文件拷贝到本地Toad目录。<BR>绝大多数用户应该选择使用这个安装方式。<BR>b) Personal Config Files to PC, read TOAD from Network Server<BR>从网络服务器读取Toad程序，在本地计算机安装一些自定义的文件，并且创建到服务器文件的快捷方式，一般不推荐使用这个方式，而且要求网络服务器已经配置。<BR>c) TOAD to Network Server<BR>把Toad安装到网络服务器上，以便这样别的用户能够进行Personal Config Files to PC, read TOAD from Network Server这种方式的安装。<BR>2． 根据需要使用到的特性，需要运行一些脚本(都在Toad\temps目录下)<BR>ü 如果需要用Toad来查看执行计划，必须运行脚本PrepToad.sql或者notoad.sql<BR>n 如果希望专门建立一个Toad 用户来存放Toad需要使用的对象的话，就运行preptoad.sql。<BR>n 如果希望在当前连接用户模式下建立toad需要使用的对象的话，就运行notoad.sql。<BR>n 注意，如果是选择了专门建立toad这个用户的话，需要先修改一下脚本，指定用户的默认表空间和临时表空间。<BR>ü 需要使用Oracle8i 的Profile analyzer，必须运行ToadProfiler.sql<BR>ü 需要加强Toad的安全性，必须运行ToadSecurity.sql</P>
<P>四、Toad使用快速入门<BR>1． Schema Browser：<BR>Schema browser是Toad的极为有特色的模块。在schema browser的帮助下，可以方便的浏览数据库内部的各类数据库对象，比如表，索引，序列，存储过程等，而且可以方便的倒出DDL语句和进行各种修改，重建工作。定位到某一类对象上，这列对象允许的操作都会自动列出来。<BR>特色： <BR>l 支持Oracle数据库里面所有对象的新建、查看、修改，集成了几乎对所有数据库对象的管理所需要的功能。<BR>l 按照 模式-&gt;对象类别 -&gt;对象-&gt;对象可操作属性 -&gt; 对象本身的详细信息和对象相关的信息 来组织，非常有条理，容易定位对象，也能够看到所有你需要的对象的相关信息。<BR>l 对于表：<BR>i. 完备的建表向导，不用输入冗长的语法，更加全面地替你考虑。<BR>ii. 可以修改表的各种逻辑和物理属性，修改列的属性，增加列，删除列(在Oracle8i里面)，修改表的物理存储属性，Truncate，Drop等。<BR>iii. 可以生成建表的完整的DDl语句，包括存储信息，权限信息，约束，索引和触发器等，而这些手工很难做到。<BR>iv. 可以方便的对表进行分析，查看表地所有信息，可以有条件的倒出表里面的数据，并且保存为sql语句。<BR>v. 可以方便的对表进行重组，可以完成exp/imp作不到的事情，而且更少地人工参与，更加安全。</P>
<P>l 对于视图</P></SPAN></TD></TR></TBODY></TABLE>，存储过程：<BR>i. 可以保存建立视图、存储过程的语句为文本，<BR>ii. 重新编译失效的视图，存储过程，修改视图的定义语句等。方便的查看存储过程的代码，相互依赖关系，权限信息等保存为文本等。<BR>l 回滚段，<BR>i. 简洁明了的online，offline状态，方便地online/offline操作<BR>ii. 详细的回滚段物理信息和当前状态。<BR>iii. 可以方便的修改物理存储属性 
<P></P>
<P>l 表空间：<BR>i. Tablespace Map；直观的显示数据物理的在表空间上的分布<BR>ii. 直观的查看各个表空间的利用率、剩余空间、破碎情况等信息<BR>iii. 可以进行各种alter操作：online, offline, 增加数据文件，改变数据文件大小，改变物理存储属性等<BR>l 对其他数据库对象也有完备的操作支持。</P>
<P>2． SQL Editor:<BR>a) 激活SQL Editor的三种方式： <BR>i. 连接到数据库之后，Toad自动打开SQL Editor这个窗口。<BR>ii. 点击总工具栏上最左边的那个按钮<BR>iii. 从菜单栏：Database -&gt; SQL Editor<BR>b) 特点：<BR>l 允许同时打开多个编辑窗口，同时编辑多个SQL语句<BR>l 支持同时连接到多个数据库，同时对多个数据库进行操作<BR>l 允许编辑SQL，PLSQL，JAVA，HTML和文本<BR>l 使用书签功能，可以在大量SQL语句里，快速定位某个语句所在位置<BR>l SQL Editor本身具有强大的编辑功能，非常方便编辑SQL语句。<BR>l 强大的快捷键支持和工具栏快速按钮的支持，更加高效编写(很多快捷键可以自己定义，在View -&gt;options -&gt;SQL Editor里面)<BR>l 能够根据前面的条件，智能推测需要输入的代码，可以做到某种程度的代码智能填充<BR>l 把鼠标定位到表/视图/存储过程名称之上，按F4，可以打开对象描述窗口，方便的查看表和视图的定义，存储过程的源代码，<BR>l 非常容易对SQL语句的分析其执行计划：单击工具栏上的 按钮就可以看到Explain Plan的结果<BR>l 支持部分SQL*Plus命令，可以方便的执行大量的为SQL*Plus编写的数据库脚本<BR>l 可以通过SQLab xpert来对当前SQL语句进行全面的分析，给出各种合理的调优意见，只需要单击工具栏上的Tuning按钮：<BR>l 可以方便的保存，打开和运行SQL脚本<BR>l 支持对查询结果进行修改，<BR>l 可以把查询结果以多种格式保存起来，可以保存为HTML，纯文本，XLS等多种格式<BR>l 很容易的得到SQL函数的列表和用法描述（Show SQL help Window 按钮）<BR>l 可以查看SQL语句的执行情况：通过下方的AutoTrace窗口 ，看到SQL语句的实际执行结果和执行效率。<BR>l 支持历史SQL(F8)&nbsp; ：可以方便的查询以前执行过的SQL，不用反复重新输入。<BR>l 可以执行匿名块，存储过程，从下方的窗口看到DBMS_OUTPUT的结果，如：</P>
<P>3． Stored Procedure Editor<BR>a) 打开存储过程编写器的几个途径：<BR>l 单击总菜单栏上的第三个按钮：&nbsp; <BR>l 点击Database - &gt; Procedure Editor ，<BR>l 可以通过Schema browser来调用<BR>b) 一些特点和优点：<BR>1． 强大的自定义设置：从保留字的显示方式，到自动替换，到各种快捷键的定义等等，用得越熟越顺手。<BR>2． <BR>3．&nbsp; 自动用不同颜色显示SQL和PL/SQL关键字，语法清晰明了，可根据自己的习惯来具体定制各类关键字的具体显示方式。可以自定义存储过程得模板，在新建存储过程的时候，自动生成程序的框架可以方便的调用Schema Browser，把鼠标定位于某个对象上，F4，Schema Browser打开该对象的详细描述，帮助顺利快速开发程序。支持代码自动更正，如输入ndf，自动替换成NO_DATA_FOUND，输入the自动替换成the，类似的自动替换还可以自己修改和添加。<BR>7． 方便的左边行号显示，单击左边行号就可以实现调试断点的增加/删除<BR>8． 对各种快捷键的支持，不但包括常见的编辑操作，还可以有自己定义的PLSQL块的支持（自己定义快捷方式）。如可以定义CTRL+SHIFT+D:弹出所有PLSQL Block的类型，可以自己选择。<BR>9． 可以在一个集成开发环境里面，一边编码，一边调试，不用多处切换<BR>10． 方便的同时打开多个存储过程，通过页面快速切换<BR>11． 快速编译存储过程，快速定位错误所在，自己选择是否同时编译依赖的存储过程<BR>12． 内置对PL/Formatter，可以用PL/Formatter对存储过程进行格式化，并且可以提供存储过程的概要分析和修改建议<BR>PL/Formatter可以对现有的存储过程进行高速的格式化，使所有的存储过程都符合同样的编写标准，这样既有利于提高程序的可读性，避免不同人写的模块的风格上的很差异。<BR>PL/Formatter 还有助于提高程序的模块化，增强程序的结构清晰度，增强SQL的共用性。<BR>PL/Formatter 还可以帮助完成PL/SQL和Oracle版本之间的管理。</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P><BR>13． 内置RevealNet Knowledge Base，单击鼠标右键就可以打开，快速得到技术上的支持，解决技术难题<BR>nPL/SQL:<BR>n包含整个开发过程中可能遇到问题的答案<BR>nCode Library:大量的严谨的PL/SQL代码例子和现成过程，完全源代码提供<BR>n各种错误处理模块可供参考，各类字符日期函数<BR>n包含1400多个主题<BR>nAdmin：<BR>n解答DBA日常工作中80%的常见问题，覆盖2400多个主题<BR>n从网络到性能优化，从备份恢复到Error message,一应俱全<BR>例子：遇到失效的存储过程怎么办？<BR>4. 如何对存储过程进行Debug？<BR>u 需要Toad单独的Debug Option(Standard Version 没有这个选项)<BR>u 要用Toad对存储过程进行debug，必须安装Oracle的系统包：dbms_debug，而且必须安装Oracle Probe API v2.0 或者更高的版本。<BR>u 集成在Stored Precedure Editor里面，可以一边编写一边调试，大大提高开发效率<BR>u 打开Procedure Editor后，Debug菜单激活，可以开始进行Debug工作。<BR>u 允许对存储过程进行逐行调试、断点调试,也支持对触发器进行调试。<BR>u 可以有断点支持，支持Watch变量，允许运行时改变变量的值<BR>u 允许对多层调用的Debug支持<BR>调试步骤具体举例：<BR>1． 点击菜单栏的第三个按钮： ，打开Procedure Editor<BR>2． 点击Procedure Editor的菜单栏的 按钮，调出需要调试的存储过程<BR>3． 单击工具栏上的按钮 ，输入需要传入的参数，如果不需要传入参数，可以直接单击工具栏上的按钮： ，直接开始调试，如下图输入传入参数：</P>
<P>4． 单击菜单栏的按钮： ，可以单步跟踪，也可以定义一个断点，直接运行到断点在单步执行，在存储过程运行的过程中，当前语句会高亮度显示，并且把鼠标指针定位到变量上，Toad自动显示该变量的当前值。</P>
<P>5． 可以随时中止程序的执行，只要点Debug -&gt;Halt Execution，或者菜单栏上的按钮 ，就可以中止程序的执行<BR>6．&nbsp; 当碰到一个存储过程调用另外一个存储过程的时候，可以选择跳过(Step Over)&nbsp; ，这样就直接运行那个被调用的存储过程，返回调用结果，继续这个存储过程的调试，也可以选择Trace Into ，这样就打开被调用的存储过程，进一步深入调试那个被调用的子存储过程。如果需要保持Debug信息，在编译的时候应该选择Compile Dependencies with Debug Information，就是Procedure Editor工具栏最右边的那个按钮 。<BR>7． 支持对变量实时追踪：使用Watch：<BR>可以在运行前，或者运行过程中对某个变量进行实时跟踪：Add Watch，把鼠标定位到该变量上，然后点击Debug -&gt;Add&nbsp; Watch At Cursor，该变量就会出现在Debug状态窗口上，而且实时反应该变量的当前值。如上图中的变量v_empname。可以运行时刻修改<BR>8． 断点支持：<BR>单击存储过程需要加断点的地方的行号，该行颜色变红，输入参数，单击执行按钮 ，可以直接运行到断点处，可以不必逐行追踪，更加高效率的进行调试。<BR>Debug Option还支持条件断点，只有当满足条件的时候才会在那个地方停止，否则就好像不存在这个断点一样继续运行。<BR></P>
<P>?? 注意DBMS_OUTPUT.PUT_LINE的结果只有当程序执行完成以后才会出现，在程序执行过程中是没有结果的。</P>
<P><BR>4． 如何用SQLab Xpert对存储过程进行调优？<BR>我们知道，Oralce数据库的优化，最主要的步骤就在于SQL的优化。而在没有专门的工具（如Toad）的帮助下，进行SQL优化是一件非常困难和乏味的事情，并且需要对Oracle的深入理解和高超的Oracle调优技巧。使用Toad的SQLab Xpert Tuning模块，可以使我们普通开发人员也能够非常快速，精确的对SQL进行专家级的分析<BR>在SQL Editor和Procedure Editor里面，选中需要调试的SQL语句（SQLab Xpert只能调试Select,Insert, Update,Delete语句），复制到SQL Editor里面，然后点击工具栏上的调优按钮 ，Toad会自动打开SQLab xpert 窗口，捕获当前的SQL语句，并且把它转化为符合explain plan格式的语句。<BR>第一次打开Xpert的时候，Toad会提示你，需要安装一些Server端的表、视图和包等对象，可以把表存储到某个指定的表空间(如Tools)里面。可以简单的按照提示一步一步做就可以了。如果系统设定不允许Job的话（Job_queue_process=0）,Toad提示有些部件不会现在安装，可以忽略。安装完成以后，可以选择让某些非DBA用户也可以使用Toad的SQLab Xpert调优功能。<BR>安装完成以后，Toad会提示你一些关于优化目标方面的问题，你可以选择每次优化都可以重新设定，或者一次设定，以后一直使用这个设定。当然如果需要，还是可以更改的，在SQLab Option xpert的窗口的Administration和Preference下面重新设定。<BR>例子：<BR>下面这个SQL语句涉及到多表之间的关联，有一定的复杂性，我们可以借助Toad的SQLab Xpert Option来帮助分析：<BR>select a.name. b.name, c.emp_name<BR>from dep a, manager b,emp c<BR>where a.dep_no=c.DEP_NO<BR>and b.manag_id=c.manag_id<BR>and c.emp_no=3<BR>&nbsp;我们把这个SQL复制到SQL Editor里面，单击上面的调优按钮，Toad打开SQLab Xpert Option窗口。<BR>如下图：</P>
<P>从上面的图中我们可以方面的看到：在各种优化模式下，该SQL语句的执行计划分别是什么样的，Toad给出了每一种执行计划的具体每一个步骤，每个步骤的成本，该表涉及的相关的数据等，如果SQL存取的表还没有经过分析，Toad会以红色警告显示，并且很方便的帮助你对该表进行分析，收集统计数据，重建索引等，以有助于优化器作出最好的选择。可以把当前的分析结果保存到它的资料库里边，以备以后再次调用之需。<BR>&nbsp;我们还可以求助与SQLab 的自动优化功能：点击Original SQL下面的auto tune按钮，Toad会对执行结果按照tkprof进行分析（当然，这需要你在initsid.ora里面设置好utl_file_dir，如果服务器是在Unix机器上的话，还需要通过FTP方式得到Trace文件，有一些小小的设置）。<BR>&nbsp;自动优化非常高效的对所有执行计划进行实际运行比较，并且给出实际执行的时间的对比，如下图：</P>
<P>&nbsp;我们还可以让Toad给出实际的优化建议：点击Original SQL,单击下面的Advice按钮，Toad根据对SQL的分析和执行结果给出合理的建议：<BR>如：<BR>1． 把表和索引分别放到两个不同的表空间，因为我们在创建表，加上约束的时候没有指定USING INDEX子句，所以表和索引都建立在了用户的默认表空间上了。<BR>2． 对表EMP，DEP和MANAGER进行分析，收集最新的统计数据，有利于CBO得到最优的执行计划<BR>3． 在合适的列上创建索引：EMP的manag_id和dep_no。当表中存在大量的数据的时候，这样可以大大减少由于全表扫描带来的成本。</P>
<P><BR>5． SQL Modeler：<BR>SQL Modeler可以帮助开发人员很容易的写出各种复杂的SQL语句，只需通过简单的拖动鼠标，就能够写出复杂的SQL语句来。<BR>打开SQL Modeler的几个途径：<BR>i. 菜单栏 Database -&gt; SQL Modeler ，打开窗口<BR>ii. 单击工具栏第四个按钮 ，打开SQL Modeler窗口<BR>窗口由三个主要部分组成：<BR>n 表选择区域：最右边的那个部分，用来选择From子句中用到的表。拖动到左边的区域或者双击就选择了该表。<BR>n 表模型区域：用来图形化的显示选择的表和表之间的关联关系。<BR>n 生成SQL区域：这里显示用图形化方式创建的查询对应的SQL语句，</P>
<P>&nbsp;在SQL Modeler里面，还支持对生成的SQL进行Explain Plan，调试SQL的性能，运行SQL，看是否得到了希望的结果，保存生成的语句，或者把语句粘贴到SQL Editor里面。</P>
<P>&nbsp;有了SQL Modeler的帮助，即使是初级的程序员也能编写出复杂而又高效的SQL查询来。<BR>比如下面的例子；</P>
<P>生成步骤：<BR>1． 选出表emp, dep, manager<BR>2． 用鼠标拖住emp的emp_name和emp_no, dep的name,manager的name<BR>3． 双击criteria窗口的emp_no condition列，弹出窗口，输入查询条件，比如emp_no=3<BR>4． 由于结果里面不希望emp_no出现，双击emp_no列的visible，设置为false<BR>5． 这样就出来了需要的查询，现在可以运行查询得到结果，对查询SQL进行分析，或者在SQL Editor里面打开这个SQL，或者保存为SQL Model文件，或者再进一步处理，比如加排序， 汇总等。</P>
<P>DBA方面的功能：<BR>Toad在DBA日常管理方面的能力是非常强大的，可以帮助DBA安全快速地完成许多日常工作，还有Toad特有的一些小工具能完成一些普通方法很难做到的功能。下面大概讲述了各个常用模块的主要功能：<BR>a) Database Monitor<BR>提供直观的Oracle数据库运行状况，包括下面这些详细信息：<BR>可以看到逻辑IO，物理IO，各个状态的session数目，SGA的利用率，共享池的使用状况，各类事件的等待状况，以及各类事件随着时间的变化情况<BR>b) Instance Monitor<BR>i. 可以用来检查本地tnsnames.ora文件里面定义的所有节点、Listener和数据库的运行状态和版本等相关信息。<BR>ii. 可以远程启动、关闭数据库（如果设置了password验证方式）<BR>c) Unix Monitor：<BR>i. 可以监控Unix机器的运行状况比如详细的机器启动时间，CPU利用率，主要的进程以及这些进程占用的资源，主要的磁盘IO等。<BR>d) Trace/Kill session<BR>i. 方便的查看所有的连接用户相关信息：比如终端，程序，连接时间等<BR>ii. 对某个用户进行跟踪，查看用户执行的SQL语句，查看语句的执行计划，<BR>iii. 方便的查阅系统的Lock对象，有没有什么等待别的事务释放锁的情况，并能够轻易查出等待什么用户的什么事件结束，那个用户执行的是什么SQL。<BR>iv. 查看回滚段的使用状态，什么用户，什么语句，使用的什么回滚段，多少读写量等<BR>e) Oracle Parameter<BR>i. 可以方便的查看Oracle系统的参数：是否默认值，参数作用的简要描述，是否可以用alter session/alter system来动态改变，对于那些可以动态改变的参数，可以双击鼠标来进行修改</P>
<P>f) NLS_PARAMETER:<BR>i. 方便的查看session，instance，database一级的NLS参数值，<BR>ii. 可以动态修改session的NLS参数值</P>
<P>g) Extents<BR>i. 可以查看某个用户下的表和索引的详细的存储情况，<BR>ii. 发现那些占用大量空间的表和索引，可以考虑使用相应的对策，比如分区<BR>iii. 发现那些即将达到max_extents的表和索引并可以及时纠正<BR>iv. 发现那些索引和表处于同一个表空间的情况，并可以及时纠正。</P>
<P>h) Tablespace<BR>i. 直观的查看每个表空间的利用率，总空间，已使用空间，剩余可是用空间以及默认存储参数，和表空间是否需要整理等信息<BR>ii. 查看每个表空间的状态，组成的数据文件， 以及每个数据文件的详细信息<BR>iii. 查看每个表空间里面存在的对象和这些对象的详细存储特性<BR>i) Tablespace Map：<BR>i. 图形化的显示表空间里面各个表/索引所占用的空间，各个segment的大小，segment是否连续等信息，非常直观<BR>ii. <BR>j)<BR>Server Statistics:<BR>i. 可以非常直观的看到系统总体运行情况，迅速定位系统瓶颈所在<BR>ii. 可以查看系统范围内各类等待事件的状况，查看每个连接会话的状况，<BR>k) Pinned Code：<BR>i. 我们知道，频繁执行的大的存储过程最好Pin起来，这样可以避免被Oracle在内存不足的情况下换出内存，避免动态加载，也避免flush shared pool的时候被清出内存。<BR>ii. 根据每个模块的大小，执行次数，决定是否要把某个存储过程PIN起来。一个按钮就搞定了。<BR>l) Control Files:<BR>可以查看当前系统有哪几个控制文件，以及控制文件内部记录的详细信息。<BR>（实际上就是V$CONTROLFILE, V$CONTROLFILE_RECORD_SECTION）<BR>m) Redo Log Manager:<BR>i. 可以方便的查看LOG的组，当前日志，每个组里面的成员名字，大小，方便的增加、删除log组，切换当前日志，对日志归档进行具体的控制。<BR>ii. 可以在这个界面里完成几乎所有的对redo log的操作。<BR>n) Repair chained rows:<BR>i. Chained rows影响系统性能，处于系统性能的考虑，需要把chained rows修复成普通的表的行。使用repaie chained rows,就可以比较容易的做到这一点。选择需要分析的表，然后分析一下，看有没有chained rows，如果有，点击repair，Toad就帮你把那些chained rows给修复了。<BR>o) Identify Space Deficits<BR>如果系统出现1659,1653错误，就是一个不合格的DBA。但是要即时预见这些错误，还是有一定的难度的。有了Toad的这个小工具之后，一点某个表空间，就知道这个表空间里面的剩余自由空间是否允许任何表能够扩展到下一个extent。并能够在发现问题之后，直接改正问题。 </P>
<P></P>
<P>p) Estimate Table/Index Size<BR>i. 数据库的物理规划中，表/索引的存储子句的定义是非常重要的，影响系统。但是没有什么工具的话，要为表定义合理的存储子句也不容易。<BR>ii. 在Toad里面，专门有工具帮助你合理定义表/索引的存储情况：<BR>1. 自己可以定义将来表中需要存储的数据的数目<BR>2. 多种估计方式：<BR>a) 根据对已有的数据的分析来定义表的大小（最精确，但是比较慢）<BR>b) 根据表定义数据类型来定义表的大小<BR>c) 根据数据字典中以前分析过的数据来估计大小（需要近期分析过该表）</P>
<P>q) Analyze All Tables<BR>i. 基于CBO的SQL需要CBO提供最优化的执行路径来提高程序的执行效率，但是假如对表进行大量的DML操作之后，不及时更新表的统计数据，这时候CBO就不能选择最为有效的执行路径，导致程序执行效率低。<BR>ii. 手工分析表比较麻烦，一个一个做。<BR>iii. 用Toad的Analyze Alltables这个工具，可以一次分析整个模式下面的所有表，有丰富的控制选项，包括是采用估计还是完全，是否同时分析索引，估计的话，采用多大的百分比等。<BR>r) Rebuild Table<BR>i.&nbsp; 当表中的数据被反复大量的DML之后，而且PCTFREE和PCTUSED定义的不合理的情况下，表可能会变得非常破碎，占用大量的extent，索引也会相当破碎，导致效率相当低下。<BR>ii. 传统的方式是通过exp/imp来解决这个问题，但是步骤实在比较麻烦，手工操作也有一定的危险性。<BR>iii. 使用Rebuild Table工具，轻松搞定，而且可以手工修改一些通过EXP/IMP无法修改的参数，比如freelists ,freelists group, tablespace，initial等，还能够更改列的名字。<BR>s) Relocate Index<BR>i. 我们知道，表和索引一般都需要分开存放到不同的表空间，这样比较便于管理，性能上也会有一定的提高，因为可以对表和索引同时存取。<BR>ii. 但是实际上很多时候，由于这样那样的原因，常常忽略了索引单独存放这个基本概念，比如建立主键约束的时候没有加USING INDEX子句，后来disable/enable了主键约束/唯一性约束等，都会导致把索引直接存放到和表同一个表空间里面。<BR>iii. 手工发现这些索引，再逐个移动非常麻烦，容易出错，在Toad里面，就很容易根据用户/表空间来发现那些不恰当存放的索引，可以批量移动这些索引，并且允许重新定义索引的存储子句。<BR>t) Generate Schema Scripts：<BR>i. 可以用来生成整个用户下所有/部分对象的DDL语句。可以把结果保存为sql语句或者保存为TOAD的自定义格式。<BR>ii. 可以用来复制表结构，（EXP/IMP有非常严重的缺陷，就是从一个大的数据库倒出的表结构，无法导入到一个小的数据库里面，因为里面包含了原来表的存储信息，即使选择rows=N，也要在导入数据库里面占用相当大的空间）<BR>u) Compare Schema：<BR>i. 在开发的时候，有时候同时在几个开发库上开发，但是最后两个库的结构不完全一样，很难比较<BR>ii. 用TOAD的这个功能，可以对两个数据库的模式（用户）下面的所有对象（包括存储过程）进行比较，可以选择具体的比较内容。<BR>iii. 可以通过直接打开两个到各自数据库的连接，或者根据Toad generate schame scripts生成的文件进行对比。<BR>iv. 可以直接生成同步两个数据库的sql脚本，给出汇总的区别简要和详细报告等。<BR>--------------------------------------------------------------------------------</P>
<P>几乎是学习TOAD的唯一中文使用说明，我再也找不到比这个更好的了，特跟大家分享。<BR>转载的，找不到出处了。如果原作者有意见的话，我就把这个删掉好了^_^<BR></P></SPAN><img src ="http://www.blogjava.net/cymao/aggbug/24925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cymao/" target="_blank">茂</a> 2005-12-21 11:18 <a href="http://www.blogjava.net/cymao/archive/2005/12/21/24925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>