??xml version="1.0" encoding="utf-8" standalone="yes"?>香蕉成人在线,一区二区三区在线不卡,亚洲欧洲视频在线http://www.aygfsteel.com/coolingverse/category/26253.html志未半斤, 才无八两. 有苦有乐, p涂q活?/description>zh-cnFri, 28 Sep 2007 14:52:49 GMTFri, 28 Sep 2007 14:52:49 GMT60Oracle SQL性能优化技巧大ȝhttp://www.aygfsteel.com/coolingverse/articles/148458.htmlStanley SunStanley SunWed, 26 Sep 2007 14:51:00 GMThttp://www.aygfsteel.com/coolingverse/articles/148458.htmlhttp://www.aygfsteel.com/coolingverse/comments/148458.htmlhttp://www.aygfsteel.com/coolingverse/articles/148458.html#Feedback0http://www.aygfsteel.com/coolingverse/comments/commentRss/148458.htmlhttp://www.aygfsteel.com/coolingverse/services/trackbacks/148458.htmlQ?Q?选择最有效率的表名序(只在Z规则的优化器中有?Q?/strong>
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名QFROM子句中写在最后的?基础?driving table)被最先处理,在FROM子句中包含多个表的情况下,你必选择记录条数最的表作为基表。如果有3个以上的表连接查? 那就需要选择交叉?intersection table)作ؓ基础? 交叉表是指那个被其他表所引用的表.
Q?Q?WHERE子句中的q接序Q:
ORACLE采用自下而上的顺序解析WHERE子句,Ҏq个原理,表之间的q接必须写在其他WHERE条g之前, 那些可以qo掉最大数量记录的条g必须写在WHERE子句的末?
Q?Q?SELECT子句中避免?' * 'Q?/strong>
ORACLE在解析的q程? 会将'*' 依次转换成所有的列名, q个工作是通过查询数据字典完成? q意味着耗费更多的时?br/>Q?strong>4Q?减少讉K数据库的ơ数Q?br/>
ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, l定变量 , L据块{;
Q?Q?在SQL*Plus , SQL*Forms和Pro*C中重新设|ARRAYSIZE参数, 可以增加每次数据库访问的索数据量 ,gؓ200
Q?Q?使用DECODE函数来减处理时_
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的?
Q?Q?整合?无关联的数据库访问:
如果你有几个单的数据库查询语?你可以把它们整合C个查询中(即它们之间没有关系)
Q?Q?删除重复记录Q?/strong>
最高效的删除重复记录方?( 因ؓ使用了ROWID)例子Q?br/>DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X WHERE X.EMP_NO = E.EMP_NO);
Q?Q?用TRUNCATE替代DELETEQ?/strong>
当删除表中的记录?在通常情况? 回滚D?rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状?准确地说是恢复到执行删除命o之前的状? 而当q用TRUNCATE? 回滚D不再存放Q何可被恢复的信息.当命令运行后,数据不能被恢?因此很少的资源被调用,执行旉也会很短. (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)
Q?0Q?量多用COMMITQ?/strong>
只要有可?在程序中量多用COMMIT, q样E序的性能得到提高,需求也会因为COMMIT所释放的资源而减?
COMMIT所释放的资?
a. 回滚D上用于恢复数据的信?
b. 被程序语句获得的?br/>c. redo log buffer 中的I间
d. ORACLE为管理上q?U资源中的内部花?

Q?1Q?用Where子句替换HAVING子句Q?/strong>
避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集q行qo. q个处理需要排?总计{操? 如果能通过WHERE子句限制记录的数?那就能减这斚w的开销. (非oracle?on、where、havingq三个都可以加条件的子句中,on是最先执行,whereơ之Qhaving最后,因ؓon是先把不W合条g的记录过滤后才进行统计,它就可以减少中间q算要处理的数据Q按理说应该速度是最快的Qwhere也应该比having快点的,因ؓ它过滤数据后才进行sumQ在两个表联接时才用on的,所以在一个表的时候,剩下where跟having比较了。在q单表查询统计的情况下,如果要过滤的条g没有涉及到要计算字段Q那它们的结果是一LQ只是where可以使用rushmore技术,而having׃能,在速度上后者要慢如果要涉及到计的字段Q就表示在没计算之前Q这个字D늚值是不确定的Q根据上写的工作流E,where的作用时间是在计之前就完成的,而having是在计后才v作用的,所以在q种情况下,两者的l果会不同。在多表联接查询Ӟon比where更早起作用。系l首先根据各个表之间的联接条Ӟ把多个表合成一个时表后,再由whereq行qoQ然后再计算Q计完后再由havingq行qo。由此可见,要想qo条g起到正确的作用,首先要明白这个条件应该在什么时候v作用Q然后再军_攑֜那里
Q?2Q?减少对表的查询:
在含有子查询的SQL语句?要特别注意减对表的查询.例子Q?br/>SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT
TAB_NAME,DB_VER FROM TAB_COLUMNS WHERE VERSION = 604)
Q?3Q?通过内部函数提高SQL效率.Q?/strong>
复杂的SQL往往牺牲了执行效? 能够掌握上面的运用函数解决问题的Ҏ在实际工作中是非常有意义?br/>Q?4Q?使用表的别名(Alias)Q?br/> 当在SQL语句中连接多个表? 请用表的别名ƈ把别名前~于每个Column?q样一?可以减解析的旉q减那些由Column歧义引v的语法错?
Q?5Q?用EXISTS替代IN、用NOT EXISTS替代NOT INQ?/strong>
在许多基于基表的查询?Z满一个条?往往需要对另一个表q行联接.在这U情况下, 使用EXISTS(或NOT EXISTS)通常提高查询的效率. 在子查询?NOT IN子句执行一个内部的排序和合q? 无论在哪U情况下,NOT IN都是最低效?(因ؓ它对子查询中的表执行了一个全表遍?. Z避免使用NOT IN ,我们可以把它改写成外q接(Outer Joins)或NOT EXISTS.
例子Q?br/>Q高效)SELECT * FROM EMP (基础? WHERE EMPNO > 0 AND EXISTS (SELECT 'X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = 'MELB')
(低效)SELECT * FROM EMP (基础? WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = 'MELB')
Q?6Q?识别'低效执行'的SQL语句Q?/strong>
虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始l是一个最好的ҎQ?br/>SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,
SQL_TEXT FROM V$SQLAREA WHERE EXECUTIONS>0 AND BUFFER_GETS > 0 AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 ORDER BY 4 DESC;
Q?7Q?用烦引提高效?/strong>Q?br/>索引是表的一个概念部?用来提高索数据的效率QORACLE使用了一个复杂的自^衡B-treel构. 通常,通过索引查询数据比全表扫描要? 当ORACLE扑և执行查询和Update语句的最佌\径时, ORACLE优化器将使用索引. 同样在联l多个表时用烦引也可以提高效率. 另一个用烦引的好处?它提供了主键(primary key)的唯一性验?。那些LONG或LONG RAW数据cd, 你可以烦引几乎所有的? 通常, 在大型表中用烦引特别有? 当然,你也会发? 在扫描小表时,使用索引同样能提高效? 虽然使用索引能得到查询效率的提高,但是我们也必L意到它的代h. 索引需要空间来存储,也需要定期维? 每当有记录在表中增减或烦引列被修Ҏ, 索引本n也会被修? q意味着每条记录的INSERT , DELETE , UPDATEؓ此多付出4 , 5 ơ的盘I/O . 因ؓ索引需要额外的存储I间和处?那些不必要的索引反而会使查询反应时间变?。定期的重构索引是有必要?Q?br/>ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME>
Q?8Q?用EXISTS替换DISTINCTQ?/strong>
当提交一个包含一对多表信?比如部门表和雇员?的查询时,避免在SELECT子句中用DISTINCT. 一般可以考虑用EXIST替换, EXISTS 使查询更?因ؓRDBMS核心模块在子查询的条g一旦满_,立刻q回l果. 例子Q?br/>(低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E
WHERE D.DEPT_NO = E.DEPT_NO (高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT 'X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);
Q?9Q?sql语句用大写的Q因为oracleL先解析sql语句Q把写的字母{换成大写的再执行
Q?0Q?在java代码中尽量少用连接符"Q?q接字符Ԍ

Q?1Q?避免在烦引列上用NOT 通常Q?/strong> 
我们要避免在索引列上使用NOT, NOT会生在和在索引列上使用函数相同的媄? 当ORACLE"遇到"NOT,他就会停止用烦引{而执行全表扫?

Q?2Q?避免在烦引列上用计.
WHERE子句中,如果索引列是函数的一部分Q优化器不使用索引而用全表扫描. 举例: 低效Q?br/>


SELECT FROM DEPT WHERE SAL * 12 > 25000; 高效: SELECT FROM DEPT WHERE SAL > 25000/12;

Q?3Q??gt;=替代>
高效:
SELECT * FROM EMP WHERE DEPTNO >=4 低效:
SELECT * FROM EMP WHERE DEPTNO >3 两者的区别在于, 前者DBMS直接蟩到第一个DEPT{于4的记录而后者将首先定位到DEPTNO=3的记录ƈ且向前扫描到W一个DEPT大于3的记?

Q?4Q?用UNION替换OR (适用于烦引列)
通常情况? 用UNION替换WHERE子句中的OR会起到较好的效? 对烦引列使用OR造成全表扫描. 注意, 以上规则只针对多个烦引列有效. 如果有column没有被烦? 查询效率可能会因Z没有选择OR而降? 在下面的例子? LOC_ID 和REGION上都建有索引. 高效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 UNION SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE REGION = "MELBOURNE" 低效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = "MELBOURNE" 如果你坚持要用OR, 那就需要返回记录最的索引列写在最前面.

Q?5Q?用IN来替换OR
q是一条简单易记的规则Q但是实际的执行效果q须验,在ORACLE8i下,两者的执行路径g是相同的Q 
低效: SELECT…. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30 高效 SELECT… FROM LOCATION WHERE LOC_IN IN (10,20,30);

Q?6Q?避免在烦引列上用IS NULL和IS NOT NULL
避免在烦引中使用M可以为空的列QORACLE无法用该索引Q对于单列烦引,如果列包含空|索引中将不存在此记录. 对于复合索引Q如果每个列都ؓI,索引中同样不存在此记? 如果臛_有一个列不ؓI,则记录存在于索引中.举例: 如果唯一性烦引徏立在表的A列和B列上, q且表中存在一条记录的A,Bgؓ(123,null) , ORACLE不接受下一条具有相同A,B|123,nullQ的记录(插入). 然而如果所有的索引列都为空QORACLE认为整个键gؓI空不等于空. 因此你可以插?000 条具有相同键值的记录,当然它们都是I? 因ؓIg存在于烦引列?所以WHERE子句中对索引列进行空值比较将使ORACLE停用该烦?
低效: (索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL; 高效: (索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;

Q?7Q?L使用索引的第一个列Q?br/> 如果索引是徏立在多个列上, 只有在它的第一个列(leading column)被where子句引用?优化器才会选择使用该烦? q也是一条简单而重要的规则Q当仅引用烦引的W二个列?优化器用了全表扫描而忽略了索引

Q?8Q?用UNION-ALL 替换UNION ( 如果有可能的?Q?/strong>
当SQL语句需要UNION两个查询l果集合?q两个结果集合会以UNION-ALL的方式被合ƈ, 然后在输出最l结果前q行排序. 如果用UNION ALL替代UNION, q样排序׃是必要了. 效率׃因此得到提高. 需要注意的是,UNION ALL 重复输Z个结果集合中相同记录. 因此各位q是要从业务需求分析用UNION ALL的可行? UNION 对l果集合排序,q个操作会用到SORT_AREA_SIZEq块内存. 对于q块内存的优化也是相当重要的. 下面的SQL可以用来查询排序的消耗量
低效Q?br/>


SELECT ACCT_NUM, BALANCE_AMT FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95' UNION SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS WHERE TRAN_DATE = '31-DEC-95' 高效: SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS WHERE TRAN_DATE = '31-DEC-95' UNION ALL SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS WHERE TRAN_DATE = '31-DEC-95'



Q?9Q?用WHERE替代ORDER BYQ?/strong>
ORDER BY 子句只在两种严格的条件下使用索引.
ORDER BY中所有的列必d含在相同的烦引中q保持在索引中的排列序.
ORDER BY中所有的列必d义ؓ非空.
WHERE子句使用的烦引和ORDER BY子句中所使用的烦引不能ƈ?
例如: 表DEPT包含以下?
DEPT_CODE PK NOT NULL
DEPT_DESC NOT NULL
DEPT_TYPE NULL
低效: (索引不被使用) SELECT DEPT_CODE FROM DEPT ORDER BY DEPT_TYPE 高效: (使用索引) SELECT DEPT_CODE FROM DEPT WHERE DEPT_TYPE > 0

Q?0Q?避免改变索引列的cd.:
当比较不同数据类型的数据? ORACLE自动对列q行单的cd转换.
假设 EMPNO是一个数值类型的索引? SELECT … FROM EMP WHERE EMPNO = '123' 实际?l过ORACLEcd转换, 语句转化? SELECT … FROM EMP WHERE EMPNO = TO_NUMBER('123') q运的是,cd转换没有发生在烦引列?索引的用途没有被改变. 现在,假设EMP_TYPE是一个字W类型的索引? SELECT … FROM EMP WHERE EMP_TYPE = 123 q个语句被ORACLE转换? SELECT … FROM EMP WHERETO_NUMBER(EMP_TYPE)=123 因ؓ内部发生的类型{? q个索引不会被用到! Z避免ORACLE对你的SQLq行隐式的类型{? 最好把cd转换用显式表现出? 注意当字W和数值比较时, ORACLE会优先{换数值类型到字符cd

Q?1Q?需要当心的WHERE子句:
某些SELECT 语句中的WHERE子句不用烦? q里有一些例? 在下面的例子? (1)'!=' 不使用索引. C, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表? (2) '||'是字W连接函? p其他函数那样, 停用了烦? (3) '+'是数学函? p其他数学函数那样, 停用了烦? (4)相同的烦引列不能互相比较,q将会启用全表扫?
Q?2Q?a. 如果索数据量过30%的表中记录数.使用索引没有显著的效率提高.
b. 在特定情况下, 使用索引也许会比全表扫描? 但这是同一个数量上的区别. 而通常情况?使用索引比全表扫描要块几倍乃臛_千?
Q?3Q?避免使用耗费资源的操?
带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行耗费资源的排?SORT)功能. DISTINCT需要一ơ排序操? 而其他的臛_需要执行两ơ排? 通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写. 如果你的数据库的SORT_AREA_SIZE调配得好, 使用UNION , MINUS, INTERSECT也是可以考虑? 毕竟它们的可L很?br/>Q?4Q?优化GROUP BY:
提高GROUP BY 语句的效? 可以通过不需要的记录在GROUP BY 之前qo?下面两个查询q回相同l果但第二个明显快了许?
低效:

SELECT JOB , AVG(SAL) FROM EMP GROUP JOB HAVING JOB = 'PRESIDENT' OR JOB = 'MANAGER' 高效: SELECT JOB , AVG(SAL) FROM EMP WHERE JOB = 'PRESIDENT'OR JOB = 'MANAGER' GROUP JOB



Stanley Sun 2007-09-26 22:51 发表评论
]]>
oracleW记整理四[物理l构理]http://www.aygfsteel.com/coolingverse/articles/135278.htmlStanley SunStanley SunWed, 08 Aug 2007 08:30:00 GMThttp://www.aygfsteel.com/coolingverse/articles/135278.htmlhttp://www.aygfsteel.com/coolingverse/comments/135278.htmlhttp://www.aygfsteel.com/coolingverse/articles/135278.html#Feedback0http://www.aygfsteel.com/coolingverse/comments/commentRss/135278.htmlhttp://www.aygfsteel.com/coolingverse/services/trackbacks/135278.html来自Q?a >http://blog.csdn.net/iori_guojun

1、参数文?br/>--每个实例启动旉要读入一个初始化参数文g
--#注释
--可以以Q意顺序指定参?br/>--若想在一行输入若q参敎ͼ要用I格分开Q例?br/>--PROCESSES=100 CPU_COUNT=1 OPEN_CURSORS=10
--若想为某一参数讄多重|多重D包含在圆括号中,q用逗号隔开Q例?br/>--ROLLBACK_SEGMENTS=(SEG1,SEG2,SEG3,SEG4,SEG5)
--参数文g中Q何变化只有在实例重启后生?br/>--有些参数可以用ALTER SYSTEM、ALTER SESSION立即讄Q称为动态初始化参数
--立即修改实例中所有会话的参数Qƈ保持到实例关?br/>ALTER SYSTEM SET parameter_name=value DEFERRED;
--修改整个实例的参敎ͼ但已保持的会话参C变,直到重新q接为止
ALTER SYSTEM SET parameter_name=value;
--在当前会话内改变参数
ALTER SESSION SET parameter_name=value;
--昄所有初始化参数的当前设|?br/>SHOW PARAMETERS;
--昄特定的初始化参数当前讄
SHOW PARAMETERS parameter_name;

2、数据文?br/>1>、增加数据文?br/>--Oracle数据库必至有一个数据文件且臛_?50MQ这时只有SYSTEM一个表I间
--增加数据文g受到的限Ӟ
--操作pȝ限定了每个进E打开的文件数
--Oracle限定了实例打开的数据库的最大打开的数据文件数
--当发出CREATE DATABASE或CREATE CONTROLFILEӞMAXDATAFILES参数指定了控?br/>--文g的数据文件的初始大小Q以后增加的数据文g数若大于该参C于初始参数
--文g中的DB_FILES参数讄Q则pȝ会自动调整。DB_FILES讄q小Q以后调整时
--要先关闭数据库,若设|太大,会造成内存消?br/>--初始参数文g中SGA上限讄
ALTER TABLESPACE mytab ADD DATAFILE 'mydb1.dbf' SIZE 100M;
2>、改变数据文件大?br/>--Ҏ一Q启用数据文件的自动扩展功能
--通过查看DBA_DAT_FILES视图的AUTOEXTENSIBLE列可知数据文件是否ؓ自动扩展
--Ҏ二,手工改变数据文g大小
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' RESIZE 100M;
3>、改变数据文件的可用?br/>--归模式下数据文g脱机或联?br/>ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;
--不归档模式下使数据文件脱机ƈ立即删除
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE DROP;
--改变表空间所有数据文件和临时文g可用?br/>ALTER TABLESPACE tablespacename DATAFILE {ONLINE/OFFLINE};
ALTER TABLESPACE tablespacename TEMPFILE {ONLINE/OFFLINE};
4>、重命名和定位数据文?br/>a.定要操作的数据文g的名U?br/>SELECT FILE_NAME,BYTES FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME='mytabname';
b.包含该数据文g的表I间脱机
c.使用操作pȝ命o拯数据文g到新位置q新命?br/>d.在Oracle中重新命名该数据文g
ALTER TABLESPACE mytabname RENAME DATAFILE
'/u02/oracle/rbdb1/users01.dbf',
'/u02/oracle/rbdb1/users02.dbf' TO
'/u03/oracle/rbdb1/users01.dbf',
'/u03/oracle/rbdb1/users02.dbf';
e.使表I间联机
5>、校验数据文件的数据?br/>--通常设|DB_BLOCK_CHECKSUM设ؓFALSE
6>、查看数据文件信?br/>DBA_DATA_FILES
DBA_EXTENTS
USER_EXTENTES
DBA_FREE_SPACE
USER_FREE_SPACE
V$DATAFILE
V$DATAFILE_HEADER

3、控制文?br/>1>、创建控制文件拷?重命?重定位控制文?br/>a.关闭实例
b.使用操作pȝ命o拯控制文g备䆾到新位置q新命?br/>c.修改初始化参数文件中的CONTROL_FILESQ增加新控制文g或改变指?br/>d.重启数据?br/>2>、用备份恢复被损坏的控制文?br/>a.关闭实例
b.使用操作pȝ命o拯控制文g备䆾覆盖被损坏的控制文g
c.重启数据?br/>3>、删除控制文?br/>a.关闭实例
b.修改初始化参数文Ӟ删除CONTROL_FILES中相应条?br/>c.重启数据?br/>4>、查看控制文?br/>V$CONTROLFILE
V$CONTROLFILE_RECORD_SECTION
V$PARAMETER

4、重做日志文?br/>1>、增加重做日志文件组
ALTER DATABASE ADD LOGFILE('/oracle/dbs/log1c.rdo',
'/oracle/dbs/log2c.rdo') SIZE 500K;
--也可指定l号Q组号应?和MAXLOGFILES讄之间
ALTER DATABASE ADD LOGFILE GROUP 10('/oracle/dbs/log1c.rdo',
'/oracle/dbs/log2c.rdo') SIZE 500K;
2>、增加重做日志文件组成员
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo' TO GROUP 2;
--也可通过指定l中所有其他成员来识别
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo'
('/oracle/dbs/log2a.rdo','/oracle/dbs/log2b.rdo');
3>、重命名和重定位联机重做日志文g成员
a.关闭数据?br/>SQL>SHUTDOWN;
b.用操作系l命令拷贝日志文件到C|ƈ重命?br/>cp /diska/logs/log1a.rdo /diskc/logs/log1c.rdo
cp /diska/logs/log2a.rdo /diskc/logs/log2c.rdo
c.启动q装配数据库Q但不打开?br/>CONNECT / as SYSDBA
STARTUP MOUNT
d.重命名联机重做日志文件成?br/>ALTER DATABASE RENAME FILE '/diska/logs/log1a.rdo',
'/diska/logs/log2a.rdo'
TO '/diska/logs/log1c.rdo',
'/diska/logs/log2c.rdo';
e.正常打开数据库,此时转换立即生效
ALTER DATABASE OPEN;
4>、删除重做日志文件组
--删除日志文gl时要考虑以下限制
--一个实例至需要两l联机重做日志文?br/>--删除之前要该日志文件组变ؓ不活动,可以强制重做日志文g转换
--删除之前Q必M证它是归档了的,可查看V$LOG
ALTER DATABASE DROP LOGFILE GROUP 3;
5>、删除重做日志文件组成员
ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';
6>、强刉做日志文件{?br/>ALTER SYSTEM SWITCH LOGFILE;
7>、清I机重做日志文件内?br/>ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;
8>、查看联机重做日志文件信?br/>V$LOG
V$LOGFILE
V$LOG_HISTORY

5、归重做日志文?/p>

Stanley Sun 2007-08-08 16:30 发表评论
]]>
oracleW记整理五[创徏数据库]http://www.aygfsteel.com/coolingverse/articles/135279.htmlStanley SunStanley SunWed, 08 Aug 2007 08:30:00 GMThttp://www.aygfsteel.com/coolingverse/articles/135279.htmlhttp://www.aygfsteel.com/coolingverse/comments/135279.htmlhttp://www.aygfsteel.com/coolingverse/articles/135279.html#Feedback0http://www.aygfsteel.com/coolingverse/comments/commentRss/135279.htmlhttp://www.aygfsteel.com/coolingverse/services/trackbacks/135279.html来自Q?a >http://blog.csdn.net/iori_guojun

1、声明Oracle SID?br /> WIN下:set ORACLE_SID=mydb
UNIX下:export ORACLE_SID=mydb
2、与实例q接
服务器端Q?br /> $SQLPLUS /nolog
SQL>CONNECT SYS/password AS SYSDBA
客户端:
SQL>CONNECT SYS/password@SID AS SYSDBA
3、创建初始化参数文gQ每个实例启动时都要装蝲一个)
1>、用缺省文件名q在~省位置存放该文Ӟ则启动数据库时无L定PFILE
~省文g名ؓinit$Oracle_SID.oraQ如initMYDB.ora
~省位置QWIN?Oracle_HOME\database
UNIX?Oracle_HOME\dbs
2>、自己定义文件名和存放位|,启动数据库时L定PFILE参数
4、在不装配数据库的情况下启动实例QƈҎ步骤3定是否要指定PFILE参数
STARTUP NOMOUNT pfile='d:\oracle\admin\mydb\scripts\initMYDB.ora';
5、创建数据库
CREATE DATABASE mynewdb
--指定可以同时装配和打开的数据库实例最大数量,比初始参数INSTANCES优先U高
MAXINSTANCES 1
--只有在实时应用集情况下和归模式中Q此参数才有?br /> MAXLOGHISTORY 1
--指定该数据库能够创徏的重做日志文件组的最大数?br /> MAXLOGFILES 5
--指定该数据库重做日志文gl的最大成员数?br /> MAXLOGMEMBERS 5
--Oracle使用该值来定在控制文件中分配数据文g名需要的I间
MAXDATAFILES 100
--指定一个或多个数据文gQ这些都作ؓSYSTEM表空间一部分
DATAFILE '/vobs/oracle/oradata/mynewdb/system01.dbf' SIZE 325 REUSE
--创徏一个撤消表I间用于重做数据
UNDO TABLESPACE undotbs DATAFILE
'/vobs/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
--创徏~省的时表I间
DEFAULT TEMPORARY TABLESPACE tempts1
--指定数据库保存数据时使用的字W集
CHARACTER SET US7ASCII
--指定NCHAR、NCLOB、NVARCHAR2cd列保存数据时需要用的字符?br /> NATIONAL CHARACTER AL16UTF16
--指定的重做日志文?br /> LOGFILE GROUP 1 ('/vobs/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
GROUP 2 ('/vobs/oracle/oradata/mynewdb/redo02.log') SIZE 100M,
GROUP 3 ('/vobs/oracle/oradata/mynewdb/redo03.log') SIZE 100M;
6、创建附加的表空?br /> --如果不创建附加表I间q把数据库对象存储在其上Q则会缺省用系l表I间
--创徏~省的用戯I间
CREATE TABLESPACE user LOGGING
DATAFILE '/vobs/Oracle/oradata/mynewdb/users01.dbf'
--讄表空间自动增?br /> SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
--采用本地理表空?br /> EXTENT MANAGEMENT LOCAL;
--为用L引等数据库对象创建缺省表I间
CREATE TABLESPACE indx LOGGING
DATAFILE '/vobs/Oracle/oradata/mynewdb/indx01.dbf'
SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
7、运行脚本来创徏数据字典视图
CONNECT SYS/password AS SYSDBA
@/vobs/Oracle/rdbms/admin/catalog.sql;
@/vobs/Oracle/rdbms/admin/catproc.sql;
@/vobs/Oracle/rdbms/admin/catexp.sql;
EXIT



Stanley Sun 2007-08-08 16:30 发表评论
]]>
oracleW记整理三[配置]http://www.aygfsteel.com/coolingverse/articles/135277.htmlStanley SunStanley SunWed, 08 Aug 2007 08:29:00 GMThttp://www.aygfsteel.com/coolingverse/articles/135277.htmlhttp://www.aygfsteel.com/coolingverse/comments/135277.htmlhttp://www.aygfsteel.com/coolingverse/articles/135277.html#Feedback0http://www.aygfsteel.com/coolingverse/comments/commentRss/135277.htmlhttp://www.aygfsteel.com/coolingverse/services/trackbacks/135277.html来自Q?/span>http://blog.csdn.net/iori_guojun

1、Oracle Net配置
1>、WIN?br /> "开?>E序->Oracle->HOME NAME->|络理
->Oracle Net Configuration Assistant"
2>、创建监听程序(如果选择TCP/IP协议q行监听Q要讄端口?521Q?br /> --仅服务器?br /> 3>、listener.ora文g
--该文件每个服务器一个,由Oracle Net工具自动生成Q也可直接编?br /> --该文件列Z机器中所有监听进E的名字和地址及它们所支持的实?br /> LISTENER=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=IPC)
(KEY=loc.world)
)
(ADDRESS=
(PROTOCOL=TCP)
(HOST=HR)
(PORT=1521)
)
)
SID_LIST_LISTENER=
(SID_DESC=
(GLOBAL_DBNAME=loc.world)
(ORACLE_HOME=D:\oracle\ora90)
(SID_NAME=loc)
)
)
--该脚本的W一部分是地址列表Q每个实例一个条目,本例׃个条?br /> --本例监听器用内部进E调?IPC)正在监听Ҏ识ؓloc.world的服务的
--q接Q同时监听Q何用TCP/IP协议Q来自HR机器1521端口的请?br /> --该脚本第二部分(以SID_LIST_LISTENER开始)Q定义了在init.ora文g?br /> --数据库用的全局数据库名、监听器正在服务的每个实例的Oracle软g
--ȝ录及实例名或SIDQ如果改变Oracle软gȝ录,需要更改该文g

4>、配|连接描q符的服务名Q别名)
a.本地tnsnames.ora文g方式
--该文件必d在于所有的服务器和客户端中
--在服务器上,该文件被存放在由TNS_ADMIN环境变量指定的目录中Q?br /> --通常Z公共目录Q如UNIX?ORACLE_HOME/network/admin目录
--WIN下或客户端则为Oracle软gȝ录下\network\admin
--下ؓ该文件中一个条目,为LOC服务名设|连接描q符
LOC=(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=HR)
(PORT=1521))
(CONNECT DATA=
(SERVICE_NAME=LOC)))
--惌接到HR服务器上LOC实例的用户可以用LOC服务?br /> --@告诉数据库用紧跟其后的服务名确定要d到哪个数据库
sqlplus hr/password@LOC;

b.互联|目录方?br />
2、Oracleq程配置
1>、用DCA工具配置专用/׃n服务?br /> WIN?br /> "开?>E序->Oracle[OracleHome]->Configuration and Migration Tools
->Database Configuration Assistant"-?在数据库中配|数据库选项"
2>、通过初始化参数配|专?׃n服务?br /> --文ginit.ora中配|?br /> 讄专用服务器(为每个用户徏立单独的服务器连接进E)Q?br /> 讄以下参数为NULL
MTS_SERVICE
MTS_DISPATCHERS
MTS_SERVERS
MTS_LISTENER_ADDRESS
Zh专用数据库连接,用户必须在监听的q接字符串中包括SRVR=DEDICATED

讄׃n服务器:
--实例启动时的调度敎ͼ?000个连接可讄1个调?br /> DISPATCHERS
例:在IP 144.25.16.201上启?个调?br /> DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)\(HOST=144.25.16.201))(DISPATCHERS=2)"
可动态改变调度进E的数量Q?br /> 例:讄TCP/IP协议调度q程Cؓ5QSSLQTCPSQ协议的TCP/IP调度q程Cؓ2
ALTER SYSTEM
SET DISPATCHERS=
'(PROTOCOL=TCP)(DISPATCHERS=5) (INDEX=0)',
'(PROTOCOL=TCPS)(DISPATCHERS=2) (INDEX=1)';
--实例启动时创建的׃n服务器进E数量,?0个连接可?个共享服务器q程
SHARED_SERVERS
--实例启动时能创徏的最大共享服务器q程数量
MAX_SHARED_SERVERS
--指定|络会话可用的虚拟电路的全部数量
CIRCUITS
--指定׃n服务器用户会话允许的全部数量
--讄q个参数使你能够Z用服务器保留用户会话
SHARED_SERVER_SESSIONS
--指定能在pȝ被创建的会话的最大数量,可以因需要被׃n服务器调?br /> SESSIONS



Stanley Sun 2007-08-08 16:29 发表评论
]]>
oracleW记整理六[数据库启动与关闭]http://www.aygfsteel.com/coolingverse/articles/135274.htmlStanley SunStanley SunWed, 08 Aug 2007 08:29:00 GMThttp://www.aygfsteel.com/coolingverse/articles/135274.htmlhttp://www.aygfsteel.com/coolingverse/comments/135274.htmlhttp://www.aygfsteel.com/coolingverse/articles/135274.html#Feedback0http://www.aygfsteel.com/coolingverse/comments/commentRss/135274.htmlhttp://www.aygfsteel.com/coolingverse/services/trackbacks/135274.html来自Q?a >http://blog.csdn.net/iori_guojun

<一>、数据库启动
1、启动SQL*PLUS不与数据库连?br /> SQLPLUS /NOLOG
2、以SYSDBA角色与Oracleq接
CONNECT username/password AS SYSDBA
3、启动实?br /> 1>、启动一个实例,装配和打开一个数据库
STARTUP;?br /> STARTUP PFILE='d:\oracle\admin\mydb\scripts\initMYDB.ora';
2>、启动一个实例但不装配数据库
--典型应用为数据库创徏
STARTUP NOMOUNT;
3>、启动一个实例,装配数据库但不打开
--该模式下允许你执行特定的l护操作Q包?br /> --重命名数据库、增删或重命名日志文件、启用和停用重做归日志文g选项?br /> --执行完整的数据库恢复
STARTUP MOUNT;
4>、在启动旉制一个数据库的存?br /> --该模式ɽ理员可用数据库Q但一般操作员不可用,应用?br /> --执行导入导出、执行SQL*loader的数据装载、旉止典型用户用数?br /> --升迁或升U?br /> --在正常模式下Q有CREATE SESSIONpȝҎ的用户可以连接到数据?br /> --限制模式下,同时hCREATE SESSION和RESTRICTED SESSION两个pȝҎ的用?br /> --才可以存取数?br /> STARTUP RESTRICT;
--关闭限制模式
ALTER SYSTEM DISABLE RESTRICTED SESSION;
--正在运行的正常模式改变为限制模?br /> ALTER SYSTEM ENABLE RESTRICTED SESSION;
5>、强制一个实例启动(用于启动时出现问题情况,用Q)
STARTUP FORCE;
6>、启动实例,装配数据库和启动完全的介质恢?br /> STARTUP OPEN RECOVER;
4、改变数据库可用?br /> 1>、装配数据库
ALTER DATABASE MOUNT;
2>、打开数据?br /> ALTER DATABASE OPEN;
3>、以只读或只写或d方式打开数据?br /> ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE WRITE READ ONLY;
ALTER DATABASE OPEN READ WRITE;

<?gt;、数据库关闭
1、正常关?br /> SHUTDOWN NORMALQ?br /> 2、事务性关?br /> --不许新连接,但等待现有的事务执行l束
SHUTDOWN TRANSACTIONALQ?br /> 3、立卛_?br /> SHUTDOWN IMMEDIATEQ?br /> 4、强制关?br /> --该模式关闭下ơ启动时要进行实例恢复过E?br /> SHUTDOWN ABORTQ?br /> 5、停数据库
--该状态下只允许DBA会话Q不允许新的非DBAq接建立
ALTER SYSTEM QUIESCE RESTRICTED;
--取消停顿
ALTER SYSTEM UNQUIESCE;
--查看实例的停状?br /> --列ACTIVE_STATE说明QNORMAL未停QUIESCING正在停顿Q但仍有非DBA会话
--QUIESCED已停?br /> select ACTIVE_STATE from V$INSTANCE;
6、挂h据库
--暂停Ҏ据文件和控制文g的所有IOQ可以在无IOq扰情况先进行备?br /> --挂v命o可以挂v数据库而ƈ不指定一个实?br /> ALTER SYSTEM SUSPEND;
--恢复到非挂v状?br /> ALTER SYSTEM RESUME;
--查看挂v状?br /> SELECT DATABASE_STATUS FROM V$INSTANCE;



Stanley Sun 2007-08-08 16:29 发表评论
]]>
oracleW记整理一[体系l构介]http://www.aygfsteel.com/coolingverse/articles/135275.htmlStanley SunStanley SunWed, 08 Aug 2007 08:29:00 GMThttp://www.aygfsteel.com/coolingverse/articles/135275.htmlhttp://www.aygfsteel.com/coolingverse/comments/135275.htmlhttp://www.aygfsteel.com/coolingverse/articles/135275.html#Feedback0http://www.aygfsteel.com/coolingverse/comments/commentRss/135275.htmlhttp://www.aygfsteel.com/coolingverse/services/trackbacks/135275.html来自Q?a >http://blog.csdn.net/iori_guojun

一、物理存储结?br /> 1、数据文?br /> 存放数据库数据,以dbf为扩展名。将数据攑֜多个数据文g中,
再将数据文g分放在不同的盘中,可以提高存取速度。数据文
件由数据块构成,块大由数据库创建时定?/span>

2、重做日志文Ӟ以rdo为扩展名。含Ҏ据库所做的更改记录Q?br /> q样万一出现故障可以启用数据恢复。一个数据库臛_需要两?br /> 重做日志文g。重做日志在日志文g中以循环的方式工作。有
归日志模式和非归档日志模式?/p>

3、控制文Ӟ以ctl或ctrl为扩展名。控制文件维护数据库的全局
物理l构Q记录数据库中所有文件的控制信息Q每个数据库臛_
要有一个控制文Ӟ用户使用两个或更多控制文Ӟq存?br /> 在不同的盘上。Oraclepȝ通过控制文g保持数据库的完整性,
以及军_恢复数据时用哪些重做日志?/p>

4、参数文Ӟ以ora为扩展名。在一个数据库启动Ӟ每个参数都有
一个默认|而参数文件中的设|D用来更改默认|参数?br /> 极大影响了oracle如何L行其不同的Q务。参数文件包括以?br /> 几种Q?br /> <1>、初始化参数文g。当创徏一个数据库Ӟoracle创徏了一?br /> 默认的init.ora文gQ如果不修改M参数Qoracle用所有的
~省值来启动数据库,通常Ҏ实际的应用修改参数设|以提高
性能?br /> <2>、配|参数文件。一般被命名为config.oraQ它被用于特定实
例的信息。这个文件是一个由init.ora文g调用或激zȝ文本?br /> Ӟinit.ora中包含一个ifile参数以设|config.ora文g的位|?br /> 既然一个数据库可以有一个或多个实例与之兌Q那么配|文件中
每一个参数对于不同的实例配置可能不同Q当Ӟ如果和数据库?br /> 联的实例只有一个,所有信息都保存在文件init.ora中,那么
config.ora文g׃是必需的了?br /> <3>、服务器参数文gQspfileQ。它被设计ؓ一个服务器端的?br /> 数文Ӟ可以被认为是在oracle数据库服务器执行的机器上被管?br /> 的初始化参数的仓库。一个服务器参数文g可以用语句CREATE
SPFILE从一个传l的文g参数文g创徏?br />
5、跟t文件与警告日志?br /> 在实例中q行的每一个后台进E都有一个跟t文件与之相q,跟踪
文g记蝲后台q程遇到的重大事件信息。oracleq有一个称做警?br /> 日志的文Ӟ用于记录数据库文件运行中主要事g的命令与l果?/p>

6、归文Ӟ以arc为扩展名Q是重做日志文g的脱机副本,q些副本
可能对于从介质失败中q行恢复很必要?/p>

二、逻辑存储l构
1、表I间?br /> 一个表I间对应一个或多个数据文gl成。一个表I间由段l成Q?br /> D는范围l成Q范围由一l连l的数据块组成,它们对应盘?br /> 的一个或多个物理块。一个表I间只能属于一个数据库Q每个数?br /> 库最有一个表I间QSYSTEM表空_Q该表空间包含整个数据库
的数据字典表Q在数据库徏立时自动创徏。利用增加数据文件的?br /> 式可以扩大表I间。表I间的大ؓl成该表I间的数据文件的?br /> 下之和。一个数据文件只能属于一个表I间Q一个数据文件一旦被
加入C个表I间中,׃能再从这个表I间中移赎ͼ也不能再?br /> 入到其他表空间中Q徏立新的表I间需要徏立新的数据文件?br />
2、段Q是逻辑数据库对象的物理副本Q段存储数据Q例如烦引段存储
与烦引相关的数据。段是一个物理实体,它被攑ֈ表空间的一个数
据文件上。一个段segment只能属于一个表I间Q但可以属于多个?br /> 据文件?/p>

3、范_D는范围l成Q范围由一l连l的数据块组成。一旦段中的
现有范围不能容纳新数据,该段获取新的范_如果需要的话,
该过E持l下去,直到表空间中的数据文件没有自q间或已达?br /> 每个D内部的范围最大数量ؓ止?/p>

4、块QORACLE最基本的存储单位,在徏立数据库的时候指定,通常?br /> 操作pȝ块大的倍数?br />
三、内存结?br /> oracle内存l构大致h四个区:软g代码区、系l全局区、程序全局
区和排序区?/p>

1、系l全局区。(SGAQ?br /> pȝ全局Zؓ一l由oracle分配的共享数据结构,它是实例的主要部
分,它含有数据维护、SQL语句分析与重做缓存所必须的所有内存结
构,pȝ全局区的数据是共享的Q也是_多个q程可以在同一?br /> 间对SGA中的数据q行讉K和修攏V它包含以下内容Q?br /> <1>、数据块~冲?br /> 该区存放最q用过的数据块Q用LRUQ最q最好用算法)
q行理?br /> <2>、字典缓冲区
该区用于保存数据字典中的行,数据字典中存放oraclepȝ?br /> 理自w所需的所有信息。该Z使用LRU法理?br /> <3>、重做日志缓冲区
M事务在记录到重做日志之前都先攑ֈ该区Q数据库pȝ定期
该区内容写入到联机重做日志中?br /> <4>、SQL׃n?br /> 存放所有通过SQL语法分析、准备执行的SQL语句?br /> <5>、JAVA?br /> 为JAVA命o提供语法分析?br /> <6>、多~冲?br /> 可以在SGA中创建多个缓冲池Q能够用多个~冲池把的数据集与其
他的应用E序分开Q以减少它们争夺数据块缓冲区相同资源的可
能性?/p>

2、程序全局区(PGAQ?br /> 包含单个服务器进E或单个后台q程的数据和控制信息Q与几个q程?br /> 享的SGA 正相反PGA 是只被一个进E用的区域QPGA 在创E时?br /> 配在l止q程时回收?br />
3、排序区
排序需要内存,q部分空间成为排序区Q排序区存在于请求排序的用户
q程的内存中Q该I间的大ؓ适应排序数据量的大小Q可增长Q但?br /> 初始化参数SORT_AREA_SIZER所限制?/p>

4、Y件代码区
用于存储正在执行或可以执行的E序代码?/p>

四、进E结?br /> q程分ؓ两类Q用戯E和oracleq程。oracle为每一个连接的用户q行?br /> 应用建立一个用戯E?br /> 1、SMON
当启动一个数据库ӞSMONQ系l监控进E)执行所需的实例恢复操作(?br /> 用联机重做日志文ӞQ它也可以清除数据库Q如不再使用的时段Q,?br /> 消系l不再需要的事务对象?br />
2、PMON
PMONQ进E监控程序)后台q程清除p|的用戯E,负责清理内存储区?br /> 释放该进E用的资源。同SMON一P它被周期唤v它是否需要被使用?/p>

3、DBRW
数据库写q程。负责将被修改的数据块和字典~冲内容写入到文件?/p>

4、LGWR。负责把联机重做日志~冲内容写入到文件?/p>

5、CKPT
查点q程Q负责在每当~冲区高速缓存中的更Ҏ久地记录在数据库中时,
更新控制文g和数据文件中的数据库状态信息?/p>

6、ARCH
归档q程Q在每次日志切换时把已满的日志组q行备䆾或归?/p>

Stanley Sun 2007-08-08 16:29 发表评论
]]>
oracleW记整理二[安装]http://www.aygfsteel.com/coolingverse/articles/135276.htmlStanley SunStanley SunWed, 08 Aug 2007 08:29:00 GMThttp://www.aygfsteel.com/coolingverse/articles/135276.htmlhttp://www.aygfsteel.com/coolingverse/comments/135276.htmlhttp://www.aygfsteel.com/coolingverse/articles/135276.html#Feedback0http://www.aygfsteel.com/coolingverse/comments/commentRss/135276.htmlhttp://www.aygfsteel.com/coolingverse/services/trackbacks/135276.html来自Q?a >http://blog.csdn.net/iori_guojun

本文以Oracle 9i在Linux下的安装q程Z?/span>

一、系l要求:
以下的系l要求适用于典型的Oracle安装和创建简单数据库的方式?br /> 1、内存:
安装Oralce 9i软g臛_需?12M内存Q用以下命o可以查看机子的内存大:
grep MemTotal /proc/meminfo
MemTotal: 900252 kB
900252kB是你系l的内存大小?br /> 2、交换区Q?br /> 交换区的大小一般要求是内存的两倍,臛_要求辑ֈ400M以上Q当然是大好Q?br /> 用以下的命o可以查看pȝ交换区的大小Q?br /> /sbin/swapon -s
Filename Type Size Used Priority
/dev/sda6 partition 105221 686976 -1
其中105221是pȝ交换区的大小?br /> 3、光驱:
如果你用光盘安装Oracle9i则你的机子上需?速以上的CDROMQ如果你是下?br /> 了oracle9i的包文gQ则不需要用的CDROM?br /> 4、硬盘空_
安装Oracle9i数据库至要?.5GB以上的剩余空间?br /> 5、时硬盘空_
Oracle安装E序在安装过E中需?00M以上的时硬盘空_使用/tmp文g
夹作为零时文件夹Q如?tmp文g没有_的硬盘,可以新创Z个文件夹作ؓ
安装的时目录,之后讄环境变量TEMP和TMPDIR指向相应的位|,例如Q?br /> 使用bash
mkdir /home/temp
TEMP=/home/temp ; export TEMP
TMPDIR=/home/temp ; export TMPDIR
使用csh
mkdir /home/temp
setenv TEMP /home/temp
setenv TMPDIR /home/temp
6、操作系l:
Oracle公司官方公布的资料指出Oracle 9i只在安装SuSuSe 7.1, 内核 2.4.4 ?br /> glibc2.2的系l上试通过Q经q本人的试QOracle在Linux
Mandrake release 8.0Q内?.4.3-20和glibc-2.2.2的版本上也可以顺利安装,
本文以Linux Mandrake8.0Z介绍Oracle9i的安装过E?br /> 7、虚拟x-windows软gQ?br /> q个软g不是必要的!所谓虚拟x-windows软g指的是可在远E终端允许服务器
x-windows的虚拟YӞ现在行的x-windows软g有exceed、x-win32{YӞ
如果你嫌在控制台安装oraclepȝȝQ可以用虚拟x-windows软g在远E终?br /> 在图形界面下安装oralce9iQ本文将以x-win32 5.0Z介绍用虚拟x-windows安装
oracle9i的过E?br /> 8、JDK
如果你要安装Oracle HTTP Serverq需要用到blackdown的JDK1.3.1Q请C?br /> 地址下蝲Q?br /> ftp://ftp.progsoc.uts.edu.au/pub/Linux/java/JDK-1.3.0/i386/rc1/
j2sdk-1.3.0-RC1-linux-i386.tar.bz2
9、配|内核参?br /> oracle9i使用Linux的共享内存、交换区{资源进行工作,如果你的内核参数讄
不能满oracle的要求,那在安装oracel9i或用过E就会频频出现问题,因此
配置pȝ内核的参数就昑־ؓ重要和关键了?br /> 内核参数的配|一般在/proc文g夹下配置Q?br /> 1. 以root用户允许以下命oQ?br /> 2. q入目录/proc/sys/kernelQ?br /> 3. 用cat命o或more命o查看semaphore当前参数的|
cat sem
命oq行后将会出现如下的l果Q?br /> 250 32000 32 128
其中, 250 是参数SEMMSL的?32000是参数SEMMNS的? 32是参数SEMOPM的|
?28则是参数SEMMNI的倹{?br /> 4. 用以下的命o可以对上q参数进行修?br /> echo SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value > sem
其中SEMMSL_value、SEMMNS_value、SEMOPM_value、SEMMNI_value分别用相?br /> 的D行替换,q且q些值的序不能调换

   5. 讄׃n内存大小Q共享内存大一般设为物理内存的一半,在这里我们假?br /> 物理内存?12M则共享内存的?294967295以此cLQ如果你的物理内存是1G
则这里的值则?589934590Q?br /> echo 4294967295 > shmmax
6、添加用?br /> Oracle在安装和使用中需要用特定用户Q非root用户Q,按照oracle的标准说
明是需要添加三个专门用户和用户l,Z便大家的安装和用我们把oracle
的安装和使用归到一个特定用h完成?br /> 首先创徏oracle用户l,我们架设q个用户l命名ؓdbaQ?br /> 以root用户登陆pȝQ?br /> q行groupadd dba命oddba用户l;
doracle用户Q?br /> 以root用户登陆pȝQ?br /> q行useradd -g dba -p password -d /oracle -s /bin/bash oracle
q行后系l创Z一个属于dba用户l的用户oracleQ密码ؓpasswordQ主目录
?oracle使用bashQ这个用户将作ؓpȝ的安装和使用指定用户?br /> 7、创建安装点(mount point)
oracle9i的典型安装需要至两个安装点Q一个安装基本的q行E序Q要求至?br /> 要有850M的硬盘空_一个ؓ存放数据库,臛_要求?50M的硬盘空间。ؓ了简
化安装我们可以把q行E序和数据库装在同一个安装点下?br /> 在你的文件系l上扑ֈ有够空间的分区Q在分区下创建文件夹Q我们假设这?br /> 文g夹ؓ/oracle?br /> 8、配|系l环境变?br /> 很多|友安装oraclep|都是因ؓ环境变量没有配置正确Q环境变量的配置直接
影响C后oracle9i的安装和配置Q在配置的时候要ؓ心Q?br /> 1>、配|x-windows变量
认oracle9i在安装过E中是否使用本地x-windows安装q是q程虚拟
xQwindows安装Q如果需要远Ex-windows安装Q则需要配|DISPLAY变量Q?br /> q个变量用于告诉pȝ屏幕的图形将输出C么位|,默认情况下是本机Q?br /> 如果你用虚拟xQwindowsq行安装Q则在这里指明远E终端的昄情况Q?br /> 比如你远E终端的IP地址是xxx.xxx.xxx.xxx则DISPLAY的变量应设ؓ
"xxx.xxx.xxx.xxx:0"后面?:0"表示该终端的W一个显C器?br /> 2>、确定安装时目?br /> 前面我们提到qoracle9i的安装需要一个时的可写I间Q我们在q里?br /> /tmp作ؓ临时的可写目录。如果你不是使用/tmp作ؓ临时可写目录则需要配
|相应的值TMPDIR=/path?br /> 3>、配|oracle的环境变?br /> 下面提供一个例子可以供大家参照使用
export DISPLAY="192.9.200.24:0.0"
export BASH_ENV=$HOME/.bashrc
ORACLE_HOME=/oracle/product/9.0.1; export ORACLE_HOME
ORACLE_SID=oracle; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
TNS_ADMIN=/home/oracle/config/9.0.1; export TNS_ADMIN
NLS_LANG=american_america.ZHS16GBK; export NLS_LANG
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
LD_LIBRARY_PATH=$ORACLE_HOME/lib;export LD_LIBRARY_PATH
PATH=$PATH:/bin:/usr/bin:/usr/sbin:/etc:/opt/bin:
/usr/ccs/bin:/usr/openwin
PATH=$PATH:/opt/local/bin:/opt/NSCPnav/bin:$ORACLE_HOME/bin
PATH=$PATH:/usr/local/samba/bin:/usr/ucb:
export PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:
$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
TMPDIR=/tmp;export TMPDIR
umask 022
其中Q?br /> ORACLE_HOME为系lY件的安装目录Q?br /> ORACLE_SID 为数据库的SIDQ这里可以自行设|;
NLS_LANG 为数据库的字W集Qؓ了保证数据库能够输出输入数据库,我们
需要在q里把字W集设ؓamerican_america.ZHS16GBKQ其?br /> american_america英文字符集,ZHS16GBKZ文字W集?br /> 以oracle用户登陆pȝQ?br /> vi $HOME/.bash_profile
把以上环境变量的讄_脓到文件中Q确认相应的内容q修改,存盘退出?br /> 重新登陆oracle用户
使用set|more命o查看oracle用户的环境变量是否生?br /> CLASSPATH=/oracle/product/9.0.1/JRE:/oracle/product/9.0.1/jlib:
/oracle/product/9.0.1/rdbms/jlib:
/oracle/product/9.0.1/network/jlib
DISPLAY=192.9.200.24:0.0
LD_LIBRARY_PATH=/oracle/product/9.0.1/lib:/lib:/usr/lib:
NLS_LANG=american_america.ZHS16GBK
ORACLE_HOME=/oracle/product/9.0.1
ORACLE_SID=oracle
ORACLE_TERM=xterm
ORA_NLS33=/oracle/product/9.0.1/ocommon/nls/admin/data
OSTYPE=linux-gnu
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games:
/bin:/usr/bin:/usr/sbin:/etc:/opt/bin:/usr/ccs/bin:/usr/openwin:
/opt/local/bin:/opt/NSCPnav/bin:
/oracle/product/9.0.1/bin:/usr/local/samba/bin:/usr/ucb:
TNS_ADMIN=/home/oracle/config/9.0.1

二、安装Oralce9i
1、安装JDK1.3.1
把下载的j2sdk-1.3.0-RC1-linux-i386.tar.bz2文g上传到服务器?usr/
local/目录下,以root用户登陆Q用bzip -d j2sdk-1.3.0-RC1-linux-i386.
tar.bz2命o先把文g解成tar格式Q再使用tar xvf j2sdk-1.3.0-RC1-linux-
i386.tar.bz2解压出来Qؓ了便于操作可以把文g夹名Ҏjdk.?br /> 2、配|x-windows
oracle9i的安装几乎支持所有的x-windowsQ也支持q程的虚拟xQwindows安装Q?br /> 如果你要在本机安装在控制C以我们先前创建的oracle用户登陆Q注意要?br /> 讄好环境变量,q把DISPLAY的D为空export DISPLAY=""Q运行startx命o
q入x-windows?br /> 如果需要在q程l端使用虚拟x-windowsq行安装Q需要在客户端先安装x-win32
软gQx-win32的安装过E我们就不多介绍了,安装完成后运行xQwin32命o在你?br /> d栏会出现一个x的标致。用neterm{终端攻Moracle用户登陆pȝ认环境
变量都已l生效ƈ且DISPLAY变量的gؓ你终端机的IP地址Q运行startkde命o启动
x-windowsQ运行完毕后pȝ会出C大堆的出错信息,忽略不管Q过了几U后在你
的远E终端上会出现Linux的kde界面?br /> 3、下载Oracle安装软g
Oracle|站Q?a target="_blank">http://otn.oracle.comQ现在提供Oracle9i for Linux软g下蝲Q?br /> 在下载前请仔l阅M的LicenceQ这样在今后的用中才不会有版权问题。在下蝲
前你需要一个otn的̎P甌是免费的Q只要简单回{几个问题就可以Qoracle9i
的安装程序共有三个文件包分别是:
Linux9i_Disk1.cpio.gz (412,092kb)
Linux9i_Disk2.cpio.gz (638,547kb)
Linux9i_Disk3.cpio.gz (82,956kb)
下蝲完这三个文g后,把这三个文g上传到服务器/oracle目录下,q保证这三个
文g的属Loracle用户。如果你有Oracle9i的安装CD那就可以省下大把下蝲旉了?br /> 4、安装Oracle 9i 数据?br /> 以oracle用户登陆pȝQ启动本地x-windows或虚拟x-windowsQ打开一个控制台H口Q?br /> q入到刚才存放oracle文g的目录下Q分别用gunzip Linux9i_Disk1.cpio.gz
cpio -idmv命o解包Q把三个文g包解压羃成三个安装文件夹分别为Disk1、Disk2?br /> Disk3?br /> q入Disk1目录
cd Disk1
在控制台H口敲入
./runInstaller &
q行后会出现一个OUI的图形界面,中间l色的窗口就是oracle的安装图形界面了?br /> 下面我们来进行oracle9i最基本的安装,在进入安装界面后点Nextq入下一步:
Source指的是包含Oracle产品信息的文Ӟ一般情况下他会自动识别刎ͼ如果找不?br /> 可以用Browse按钮来手工指定\径。Destination指的?i要安装的\径这里就?br /> 我们在环境变量里讄$ORACLE_HOMEQ如果这一栏里是空白的则要重新查环境变?br /> 中各值的讑֮是否有误。确认正后按Nextq行下一步:
q一步有三个安装选项供选择Q?br /> 1>Oracle9i Database 9.0.1.0.0Q安装oracle9i的数据库服务器版本、管理工兗?br /> |络服务以及基本的客L软gQ?br /> 2>Oracle9i Client 9.0.1.0.0 Q企业版的客L软gQ网l服务以及开发工L?br /> 3>Oracle9i Mangement and Integration 9.0.1.0.0Q安装Management ServerQ?br /> 理工具Oracle的网l目录、综合服务、网l服务以及基本的客户端Y件?br /> 我们选第一安装Oracle9i数据库服务其Q接着安Next按钮Q?br /> q一步是选择Oracle安装的类型,有三个类型供选择Enterprise EditionQ企业版Q?br /> Standstard Edition标致版,Custom自定义安装,我们选择企业版的安装Q如果你?br /> Oracleq一pd的品比较熟悉的化可以选择Custom自定义安装,按自q需求选择
lgq行安装Q确认后安Nextq入C一步;
q里可以选择一U适合你的数据库模版,一般我们选第一U通用的数据库模版Q如?br /> 你需要用数据仓库,则可以用选择数据仓库的模版进行安装。确认后按Nextq入
下一步;
q一步是认Oracle9i的SID和全局数据库的名字QSID的值我们在环境变量中已l设
好了Q所以这里就自动昄了,全局数据库名QGlobal Database NameQ我们可以也
指定成和SID的值相同,认后按Nextq入下一步;
前面我们提到了,数据库的字符cd在数据库作中是很关键的Q这一步就是设|?br /> 数据库的字符集,前面我们讄的是NLS_LANG=american_america.ZHS16GBKQ所?br /> 我们选择Simplifiled Chinese ZHS16GBKQ按Nextq入下一步;
因ؓ我们在前面选择了Enterprise的版本进行安装,pȝ会安装Oracle Web ServerQ?br /> 安装Oracle Web Server需要用JDKQ我们用Browse按钮把前面安装JDK的目录指?br /> 好以便系l能在安装过E中扑ֈ需要的应用E序Q确认按Nextq入下一步;
q行完所有选择后,pȝ会给Z个安装概要,q里列D了你选择安装的组Ӟ认
你要安装的东襉K在列表内后,安Install钮进行安装,如果不需要安装其它的E序Q?br /> 则按Exit退出安装界面?br /> Oracle的安装速度视服务器的性能一般来说需要装30分钟的时_在安装过E中可能
会有对话框弹出,对话框内会有一些需要rootq行的命令要求你执行Q这时候另外开
一个控制台H口Qsu成rootq运行提C框内的命oQ运行完毕后按确定l安装;
安装完数据库后系l会q行配置工具对系l进行网l和数据库的配置。配|完成后Q?br /> pȝ会自动启动数据库Qƈ开启Oracle Web Server。所有配|完后,按Next完成安装?br /> 如果一切正常,OUI会出现The Installation Of Oracle9i Database Was successful.
的字Pq表明你的Oracle9i数据库安装正怺Q如果需要安装其它的内容按Next
Install钮进行其它内容的安装Q否则按Exit退出安装?/p>

三、用Oracle 9i 数据?br /> 安装完毕后Oracle数据库会自动启动Q下面我们用实际作来说明一下Oracle 9i数据?br /> 的启动和关闭?br /> 以oracle用户登陆数据库,开个控制台H口Q?/p>

 1、关闭Oracle 9i 数据?br /> [oracle@wing /oracle]$ sqlplus " / as sysdba" //以sysdba用户登陆数据?br /> SQL*Plus: Release 9.0.1.0.0 - Production on Wed Jul 11 15:35:31 2001
(c) Copyright 2001 Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production
With the Partitioning option
JServer Release 9.0.1.0.0 - Production
q行shudown命o关闭数据?br /> SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

 2、启动Oracle 9i 数据?br /> [oracle@wing bin]$ sqlplus " / as sysdba"
SQL*Plus: Release 9.0.1.0.0 - Production on Wed Jul 11 16:00:59 2001
(c) Copyright 2001 Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area 336356520 bytes
Fixed Size 279720 bytes
Variable Size 268435456 bytes
Database Buffers 67108864 bytes
Redo Buffers 532480 bytes
Database mounted.
Database opened.
SQL>

 3、启动Oracle 9i监听E序
Oracle的监听程序主要是为客L的连接提供接?br /> [oracle@wing bin]$ lsnrctl
LSNRCTL for Linux: Version 9.0.1.0.0 - Production on 11-JUL-2001 16:12:17
Copyright (c) 1991, 2001, Oracle Corporation. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> start
Starting /oracle/product/9.0.1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 9.0.1.0.0 - Production
System parameter file is /oracle/product/9.0.1/network/admin/listener.ora
Log messages written to /oracle/product/9.0.1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wing)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
Alias LISTENER
Version TNSLSNR for Linux: Version 9.0.1.0.0 - Production
Start Date 11-JUL-2001 16:12:58
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security OFF
SNMP OFF
Listener Parameter File /oracle/product/9.0.1/network/admin/listener.ora
Listener Log File /oracle/product/9.0.1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wing)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "oracle" has 1 instance(s).
Instance "oracle", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL>

 4、关闭Oracle 9i监听E序
[oracle@wing bin]$ lsnrctl
LSNRCTL for Linux: Version 9.0.1.0.0 - Production on 11-JUL-2001 16:12:17
Copyright (c) 1991, 2001, Oracle Corporation. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
The command completed successfully
LSNRCTL>

 5、关闭Oracle Web Server
cd $ORACLE_HOME/Apache/Apache/bin
./stopJServ.sh
/oracle/product/9.0.1/Apache/Apache/bin/apachectl stop: httpd stopped

 6、启动Oracle Web Server
cd $ORACLE_HOME/Apache/Apache/bin
[oracle@wing bin]$ ./startJServ.sh
/oracle/product/9.0.1/Apache/Apache/bin/apachectl start: httpd started
启动Oracle Web Server后默认的端口h7777
在客L览器地址栏输?a target="_blank">http://xxx.xx.xxx.xxx:7777/
如果览器出C下界面则表示Oracle Web Serverq行正常



Stanley Sun 2007-08-08 16:29 发表评论
]]>
վ֩ģ壺 ƺ| | | ˳| | ɽ| | | ԫ| | ͭ| ¡| | | ɳƺ| | | | ÷| ػ| | ױ| گ| Ϫ| ³ľ| ƴ| կ| Ұ| | | | Ҧ| | | | ʱ| | | | | |