??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
AIX date -n mmddHHMMYYQmm表示月分Qdd表示日期QHH表示时QMM表示分钟QYY表示q䆾?/p>
The Oracle oracle.sql.BLOB OutputStream writes the data in chunks. Since autocommit defaults to true, the first chunk is committed. This results in the write operation for the next chunk of the Blob to fail since it appears to be in the next transaction.
In those conditions, the ORA-22990 exception will occur with any version of Oracle JDBC driver.
Issue the setAutoCommit(false) command. Then, explicitly commit the transaction after all of the Blob chunks have been written to the row and the stream.close() method has been executed.
If using the Oracle 10g JDBC driver (or greater version), a second solution consists of using the standard JDBC api (setBinaryStream method of java.sql.PreparedStatement interface). And in this case, AutoCommit can be set to true.
Here is an example:
where blobTest is a table defined as the following:
数据库版本:11.2.0
今天在用rman备䆾的时候随意的查看了一下等待事Ӟ除了了我们现在系l遇到的IO瓉外,q额外的发了enq: TX - row lock contention?/span>{待事g
1Q查询当前系l的{待事g
select event,sid,p1,p2,p3 from v$session_wait where event not like 'SQL*%' and event not like 'rdbms%';
EVENT SID P1 P2 P3
---------------------------------- ---- ---------- ---------- ----------
enq: TX - row lock contention 4 1415053318 196638 55836
RMAN backup & recovery I/O 5 1 256 2147483647
enq: TX - row lock contention 12 1415053318 524293 51153
RMAN backup & recovery I/O 25 1 256 2147483647
db file sequential read 27 16 2876703 1
pmon timer 33 300 0 0
db file scattered read 39 33 790536 128
VKTM Logical Idle Wait 49 0 0 0
Streams AQ: qmn slave idle wait 50 1 0 0
asynch descriptor resize 53 1 4294967295 1237
jobq slave wait 54 0 0 0
EVENT SID P1 P2 P3
------------------------------------------- ------- ---------- ----------
db file sequential read 170 33 1100519 1
direct path read 181 44 469892 124
enq: TX - row lock contention 212 1415053318 524293 51153
smon timer 225 300 0 0
enq: TX - row lock contention 232 1415053318 524293 51153
direct path read 234 16 1099776 128
Streams AQ: qmn coordinator idle wait 242 0 0 0
上面的等待事件说明session4Q?2Q?12Q?32惛_锁,但是有别的session占着Q所以等待?/span>
enq是一U保护共享资源的锁定机制Q一个排队机Ӟ先进先出(FIFO)
发生TX锁的原因一般有几个
1.不同的session更新或删除同一个记录?br />
2.唯一索引有重复烦?br />
3.位图索引多次更新
4.同时对同一个数据块更新
5.{待索引块分?/span>
2Q下面我们通过enq: TX - row lock contention来看看这些session都在{什?/span>
select ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW# from v$session where event='enq: TX - row lock contention';
ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW#
------------- -------------- --------------- -------------
87556 57 395 88
87564 57 435 0
87564 57 435 0
87564 57 435 0
87564 57 435 0
3Q通过上面sql查找出来的对象编h到对应的对象名称
SQL> select object_name from dba_objects where object_id in (87564);
OBJECT_NAME
-----------
QRTZ_LOCKS
4Q通过对象名称扑և该对象的对应属性,对象属性ؓTABLE
SQL> select OWNER,OBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID, OBJECT_TYPE from all_objects where object_name='QRTZ_LOCKS';
OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
SCHEDULE QRTZ_LOCKS 87564 87564 TABLE
5Q通过正在{待的SID查看它们都在执行什么操?/span>
SQL> select sid,sql_text from v$session a,v$sql b where sid in(4,12,41,212,232) and (b.sql_id=a.sql_id or b.sql_id=a.prev_sql_id);
SID SQL_TEXT
---- ----------------------------------------------------------------------------------------------------
4 UPDATE QRTZ_CRON_TRIGGERS SET CRON_EXPRESSION = :1 WHERE TRIGGER_NAME = :2 AND TRIGGER_GROUP = :3
12 SELECT * FROM QRTZ_LOCKS WHERE LOCK_NAME = :1 FOR UPDATE
41 SELECT * FROM QRTZ_LOCKS WHERE LOCK_NAME = :1 FOR UPDATE
212 SELECT * FROM QRTZ_LOCKS WHERE LOCK_NAME = :1 FOR UPDATE
232 SELECT * FROM QRTZ_LOCKS WHERE LOCK_NAME = :1 FOR UPDATE
从上面的l果可以看出QSCHEDULE用户下的五个session同时在执行一条相同的sql语句Q对应的对象则是QRTZ_LOCKS q个?/span>Q?nbsp;所以发生了锁,从而生等待,通过和同事的交流Q得知这个一个ETLE序要访问的表,里面只有五条数据Q但是却要时时调度?nbsp;
6Q下面我们去找一下对应sid产生的锁
SQL> select SID,TY,ID1,ID2,LMODE,REQUEST,CTIME,BLOCK from V$lock where block=1 or request<>0;
SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---- -- ---------- ---------- ---------- ---------- ---------- ----------
41 TX 524293 51153 0 6 3846 0
12 TX 524293 51153 0 6 4190 0
232 TX 524293 51153 0 6 4626 0
212 TX 524293 51153 0 6 4749 0
4 TX 196638 55836 0 6 4755 1
44 TX 196638 55836 6 0 4765 1
由此可以查看QBLOCK=1的sid是该{待事g的根源,其他session则等待该锁被释放?/span>
解决ҎQ?/span>
1Q通过v$session扑ֈBLOCK=1的用P告知用户提交事务
2Q通过sid扑ֈpidQkill掉该q程
3Q更改sql语句QSELECT * FROM QRTZ_LOCKS WHERE LOCK_NAME = :1 FOR UPDATE no wait
加nowait的意思是得到或者得不到Q不会等?/span>
事g起因Q?/p>
Incident details in: d:/app/administrator/diag/rdbms/ccxe/ccxe/incident/incdir_2570/ccxe_ora_2164_i2570.trc
Aborting crash recovery due to error 600
Errors in file d:/app/administrator/diag/rdbms/ccxe/ccxe/trace/ccxe_ora_2164.trc:
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [1770], [779181], [779205], [], [], [], [], [], [], []
Errors in file d:/app/administrator/diag/rdbms/ccxe/ccxe/trace/ccxe_ora_2164.trc:
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [1770], [779181], [779205], [], [], [], [], [], [], []
ORA-600 signalled during: alter database open...
Tue May 10 10:13:10 2011
Trace dumping is performing id=[cdmp_20110510101310]
Tue May 10 10:13:11 2011
Sweep [inc][2570]: completed
Sweep [inc2][2570]: completed
Tue May 10 10:29:52 2011
Shutting down instance (immediate)
Shutting down instance: further logons disabled
WARNING! Crash recovery of thread 1 seq 1770 is
ending at redo block 779181 but should not have ended before
redo block 779205
//看,有警告了Q意思是我在恢复的时候,丢失了redo日志Q当时我很纳P怎么会丢失redo呢?最后我把这个问题定位在传输redo的时候可能造成数据块的丢失Q因为我以前发生q这cM情,所以我重新拯redo日志Q再ơ将数据库启动?/p>
Incident 3771 created, dump file: d:/app/administrator/diag/rdbms/ccxe/ccxe/incident/incdir_3771/ccxe_ora_2164_i3771.trc
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [1770], [779181], [779205], [], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [1770], [779181], [779205], [], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [1770], [779181], [779205], [], [], [], [], [], [], []
*** 2011-05-10 10:47:11.138
Stopping background process MMNL
*** 2011-05-10 10:47:12.139
Stopping background process MMON
*** 2011-05-10 10:47:13.259
ksukia: Starting kill, flags = 1
ksukia: killed 0 out of 0 processes.
*** 2011-05-10 10:47:14.652
*** 2011-05-10 10:47:14.652 4132 krsh.c
ARCH: Archival disabled due to shutdown: 1089
*** 2011-05-10 10:47:15.653
*** 2011-05-10 10:47:15.653 4132 krsh.c
ARCH: Archival disabled due to shutdown: 1089
Total System Global Area 6413680640 bytes
Fixed Size 2187728 bytes
Variable Size 754978352 bytes
Database Buffers 5637144576 bytes
Redo Buffers 19369984 bytes
Database mounted.
ORA-00338: log 4 of thread 1 is more recent than control file
ORA-00312: online log 4 thread 1:
'D:/APP/ADMINISTRATOR/ORADATA/CCXE/REDO04.LOG'
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
D:/app/Administrator/oradata/CCXE/redo04.log
ORA-00279: change 128488612 generated at 05/10/2011 11:13:52 needed for thread
ORA-00289: suggestion :
D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/CCXE/ARCHIVELOG/2011_05_10/O1_MF_1_1771_%U_.ARC
ORA-00280: change 128488612 for thread 1 is in sequence #1771
ORA-00278: log file 'D:/app/Administrator/oradata/CCXE/redo04.log' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
D:/app/Administrator/oradata/CCXE/redo05.log
Log applied.
Media recovery complete.
SQL> alter database open; -必须?/span>RESETLOGS方式打开数据?/span>
alter database open
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open RESETLOGS ;
Database altered.
OKQ现在数据库h了,通过q次出错我ȝ了几点,希望对大家有帮助
1Q数据库不管是不是测试,都尽量备份,否则出问题哭都来不及?/p>
2Q数据库量归档Q这样就可以恢复数据库在M时刻?/p>
3Q出错时不要慌,要仔l查看报错信息,分析报错Q根据自己所掌握的知识一步一步解冻I当你把问题解?/p>
Ӟ你会发现排错的过E真的是一个非常提升自qq程?/p>
4Q^怸定要有几个在q方面很强的朋友Q因为有的时候ƈ不是自己查资料就能查到的Q更多的是需要朋友的
l验与帮助?/p>
注:以上是q次错误的全部过E,q段旉我会把近期所遇到的错误都整理一下,都分享给大家Q通过q期的工作我感觉数据库真的是一个非常庞大的pȝQ每ơ遇到新错的时候我都会很郁L解决Q因为我发现我的懂的q是太少了,学习毕竟是一个由点到U,q到网的过E,一个问题由模糊到清晎ͼ由清晰再模糊Q反复来几遍最l都会很明白的。我们要有清晰的理论知识Q出错的时候才会找到出题所在,作ؓ一个DBA冷静Q清晰的头脑也很重要Q通过DBA的这个行业,也是非常ȝ自己的性格Q希望大安可以在DBA的这条职Z路,走远Q祝大家好运?/p>
数据库版本:oracle 11.2.0
今天同事需要执行一个拥有大扚wq算的存储过E,当执行的时候报错,报错信息如下Q?/span>
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number 18 with name
"_SYSSMU18_671080725$" too small
ORA-06512: at "TRANUSER.TRAN_ETL_LOAD_J2S_MAIN", line 22
ORA-06512: at "TRANUSER.TRAN_ETL_LOAD_JST_PRE", line 5
ORA-06512: at line 2
--_ֽ解释
不知道是从哪里{的了, 假设有张表,叫table1Q里面有5000万行数据Q假N计全表扫?ơ需?个小Ӟ我们从过E来看:
1、在1炚wQ有个用户A发出了select * from table1;此时不管来table1怎么变化Q正的l果应该是用户A会看到在1炚wq个时刻的内宏V这个是没有疑问的?nbsp;
2、在1?0分,有个用户B执行了update命oQ更Ctable1表中的第4000万行的这条记录,q时Q用户A的全表扫描还没有到达W?000万条。毫无疑问,q个时候,W?000万行的这条记录是被写C回滚D里M的,我假设是回滚DRBS1Q如果用户A的全表扫描到达了W?000万行Q是应该会正的从回滚段RBS1中读取出1炚w时刻的内容的?nbsp;
3、这Ӟ用户B他刚才做的操作commit了,但是q时Q系l仍然可以给用户A提供正确的数据,因ؓ那第4000万行记录的内容仍然还在回滚段RBS1里,pȝ可以ҎSCN来到回滚D里扑ֈ正确的数据,但是大家注意刎ͼq时记录在RBS1里的W?000万行记录已经发生了一炚w大的改变Q就是这个第4000万行的在回滚DRBS1里的数据有可能随时被覆盖掉,因ؓq条记录已经被提交了Q!Q?nbsp;
4、由于用户A的查询时间O长,而业务在一直不断的q行QRBS1回滚D在被多个不同的tracnsaction使用着Q这个回滚段里的extent循环CW?000万行数据所在的extentQ由于这条记录已l被标记提交了,所以这个extent是可以被其他transaction覆盖掉的Q?nbsp;
5、到??0分,用户A的查询终于到了第4000万行Q而这时已l出CW?条说的情况,需要到回滚DRBS1L数据Q但是已l被覆盖掉了Q于?1555出C?/span>
--错误提示
数据库报?ORA-01555 什么回滚段 '_SYSSMU168' is too small.很明?是可用的回滚D太了 满不了那个大事物的需?具体的sql我就不提供了
q有一U可?一般伴随着ORA-22924出现是LOB上的问题
辨别ORA-01555是不是发生在LOB上的,一般来?普通的01555错误会指明发?1555的rollback segment,而LOB的则没有,而是伴随着ORA-22924出现http://www.dbafan.com/blog/?p=11
--回滚原理
回退D中存放的信息被UCؓ“前照”(pre-image)Q也是说当一个进E对某个表进行了DML操作以后Q?br />更改前的U录信息被存放于回滚D,其作用有两个Q?/span>
1、当q程要求回滚QROLLBACKQ的时候,使用回滚D中信息是纪录复原;
2、保持数据读的一致性,当一个进E从某个表中ȝ录的时候,ORACLEq回的是当读开始或者进E开始时的纪录,如果在读取过E中有其他进E更改了表纪录,ORACLE׃从回滚段中读取当L作开始时的数据。回滚段中信息ƈ不是持久有效的,当进E提交(COMMITQ或者回滚(ROLLBACKQ的时候,回滚D就被释放了。当一个进E在执行一个大查询的时候,如果在查询的q程中所d得的表被更改而且更改COMMIT太久Q那回滚D中?#8220;前照”有可能会被其他的进E覆盖,从而导致ORA-01555错误?/span>
--解决Ҏ
1、增加回滚段的大,因ؓORACLEL覆盖最旧的回滚D,所以大的回滚段能有效的降低数据被覆盖的可能性?br />2、检查你的程序,避免在一个大查询的过E中Ҏ查询的表执行太多更新操作?/span>
下面回顾下关于ora-01555的解x?10g默认是用AUM q里׃说了. 下面是几个解x式来?/span>hellodba ȝ的很不错 大家可用参考下Q?/span>
1、扩大回滚段: 因ؓ回滚D|循环使用的,如果回滚D够大Q那么那些被提交的数据信息就能保存够长的时间是那些大事务完成一致性读?/span>?/span>
2、增加undo_retention旉:在undo_retention规定的时间内QQ何其他事务都不能覆盖q些数据?/span>
3、优化相x询语句,减少一致性读:减少查询语句的一致性读Q就降低d不到回滚D|据的风险。这一炚w帔R要!
4、减不必要的事务提?提交的事务越,产生的回滚段信息p?/span>
5、对大事务指定回滚段,通过以下语句可以指定事务的回滚段Q?span style="color: #0000ff;">SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment; l大事务指定回滚D,即降低大事务回滚信息覆盖其他事务的回滚信息的几率Q又降低了他自n的回滚信息被覆盖的几率。大事务的存在,往往?555错误产生的诱因?/span>
6、用游标时量使用昑ּ游标Qƈ且只在需要的时候打开游标Q同时将所有可以在游标外做的操作从游标循环中拿出。当游标打开Ӟ查询开始了Q直到游标关闭。减游标的打开旉Q就减少?555错误发生的几率?/span>http://hi.baidu.com/xu521huan/blog/item/0903ec9b62d85ebec8eaf442.html
--一些实?/span>
我的回答是先看看到底是哪个SQL有这个问题,再确定不是因为SQL本n太糟p导致SNAPSHOT TOO OLD?span style="color: #ff0000;">再跟他们说我不相信把UNDO_RETENTION加大会有效地解决问题。最后给几个CASES来支持我的观炏V?br />(1)reduce the frequency of commit
(2)set initialization paramter undo_retention(9i)
(3)alter system set retention guarrantee (10g)
(4)increase the size of the undo tablespace
(5)assign a large rollback segment for the large transaction
(6)tuning the long run sql
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
the root cause of the error ora-01555:the long run query can not find a consistent image, because the undo blocks that used to construct the consistent image were wrapped by other active transaction.
遇到q个问题Q首先可以看是维护需要执行的SQL或者应用执行的SQL报的
1、如果^时不报,只是l护人员执行的SQL报的Q一般是SQL写得不好Q运行执行过长,过了参?redo_retention所讄的时间造成的。这U情况可以协助他们进行SQL分析和优化,减少q行旉Q这个情况下pȝ不需要对pȝq行调整
2、如果是应用E序报的Q比如批量程序,则需要通知相关人员q行重做Q否则批量运行失败,业务可能会因为数据遗漏出现问题。如果出现的频率较多Q则需要在优化应用E序Q优化的手段有SQL优化、适当增加commit的次数等Q。在应用新版本上U前Q可通过调整pȝ配置临时解决问题Ҏ如:
1Q增大undo表空?/span>
2Q增大redo_retention
3)为此大事物指定专门的undo D?/span>
http://www.itpub.net/viewthread.php?tid=1021888&extra=&highlight=DBA%C3%E6%CA%D4&page=3
新鲜出炉的案例:APPS的h下午回馈说今天一个DB的JOB一直报SNAPSHOT TOO OLD。这是过d个月q个数据库第一ơ有q种回馈。到ALERT LOG中看看,有好多这UERRORQWed Jul 16 10:30:44 2008 ORA-01555 caused by SQL statement below (Query Duration=884 sec, SCN: 0x0018.bef62785):Wed Jul 16 10:30:44 2008
Wed Jul 16 10:57:29 2008 ORA-01555 caused by SQL statement below (Query Duration=149 sec, SCN: 0x0018.bf0d3e47):Wed Jul 16 10:57:29 2008
嗯,884SQ?49SQ不可能吧?看看UNDO SETTINGSQ很大啊Q?/span>
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS2
SQL> select sum(bytes)/(1024*1024*1024) as gbytes from dba_data_files;
GBYTES
----------
300.654297
SQL> select sum(bytes)/(1024*1024*1024) as gbytes from dba_data_files where tablespace_name='UNDOTBS2';
GBYTES
----------
9.765625
自己试试Q?br />create table mytab as <the select statement> where 1=0
16:12:14 SQL> insert into mytab <the select statement>
insert into mytab
*
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number 27 with name "_SYSSMU27$"
too small
Elapsed: 00:10:08.83
奇怪了。看看今天这个UNTOTBS2 UTILIZATION怎样?/span>
SQL> select snap_time, free_mb from tbs_usage_hist where database='<DB Name>' and tbs='UNDOTBS2' and snap_time>sysdate-1 order by snap_time;
SNAP_TIME FREE_MB
------------------- ----------
2008-07-15 18:00:00 9172.56
2008-07-15 19:00:00 9172.56
2008-07-15 20:00:00 9156.56
2008-07-15 21:00:00 9188.56
2008-07-15 22:00:00 9204.56
2008-07-15 23:00:00 9212.56
2008-07-16 00:00:00 9228.56
2008-07-16 01:00:00 9228.56
2008-07-16 02:00:00 9236.56
2008-07-16 03:00:00 9228.56
2008-07-16 04:00:00 9252.56
2008-07-16 05:00:00 9252.56
2008-07-16 06:00:00 9252.56
2008-07-16 07:00:00 9260.56
2008-07-16 08:00:00 9244.56
2008-07-16 09:00:00 8486.56
2008-07-16 10:00:00 1683.56
2008-07-16 11:00:00 2.31
2008-07-16 12:00:00 1.94
2008-07-16 13:00:00 2.44
2008-07-16 14:00:00 2.44
2008-07-16 15:00:00 1.25
2008-07-16 16:00:00 17.75
?问题应当是很明了了,自今天十点多UNDOTBS2一直是HIGHLY UTILIZED。打个电话给APP OWNERQ原来他今天早上十点左右做了一个很大的DELETE。即然这个报错的APP只要在二十四时内能再执行完可以,而OLTP APP没报错,那就再等{吧。在四点半时QUNDOTBS2差不多?5% FREE。再试试Q?br />16:37:49 SQL> insert into mytab <the select statement>
182 rows created.
Elapsed: 00:34:47.39
17:12:37 SQL>
现在的UNDOTBS2 UTILIZATIONQ?br />SNAP_TIME FREE_MB
------------------- ----------
2008-07-16 17:00:00 8523.63
问题解决。SNAPSHOT TOO OLD从来׃是一个过时的题目,也没有一个简单的{案?/span>
OS环境Qwindows PC
数据库版本:oracle 10.0.2.1
q是一ơ小打小闹的报错Q原因是帮同事改他自q的测试库sgaQ原sga_max_size大小?00MQ我修改?GQ重启时报错?/span>
ORA-27100 shared memory realm already exists
通过查询官方文档Q解释该原因是因为windows pc 32位机最大支持分配oracle内存?.7GQ所以导致报错,q是一ơ缺经验的教训?/span>
解决案例Q?/span>
1QSQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 568M
sga_target big integer 568M
2QSQL> alter system set sga_max_size=2048m scope=spfile; -SGA讄?G
SQL> alter system set sga_target=2048m scope=spfile;
3QSQL> shutdown immediate -重启数据库报?/span>
SQL> startup
ORA-27100 shared memory realm already exists
OSD-00029: ????????????
O/S-Error: (OS 8) ??????????????????????????????
4QSQL> create pfile from spfile; -使用spfile生成pfileQ修改参数文件内的以下两个参敎ͼ
参数调?/span>
*.sga_max_size=600000000
*.sga_target=600000000
5QSQL> startup pfile='E:/oracle/product/10.2.0/db_1/database/INITorcl.ORA' -q时候启?/span>
依然报错Q这是因为windows机器需要重启后台服务,否则无法生效Q郁P
ORA-27100 shared memory realm already exists
OSD-00029: ????????????
O/S-Error: (OS 8) ??????????????????????????????
7Q找到管?服务/OracleServiceORCL 重启
8QSQL> startup pfile='E:/oracle/product/10.2.0/db_1/database/INITorcl.ORA'
ORACLE 例程已经启动?/span>
Total System Global Area 603979776 bytes
Fixed Size 1250428 bytes
Variable Size 163580804 bytes
Database Buffers 432013312 bytes
Redo Buffers 7135232 bytes
数据库装载完毕?br /> 数据库已l打开?/span>
9QSQL> create spfile from pfile; -Ҏ启动的pfile生成spfileQ下ơ启动时候则ddspfile
参数文g
SQL> startup force
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string E:/ORACLE/PRODUCT/10.2.0/DB_1/
DATABASE/SPFILEORCL.ORA
SQL> show parameter sga;
NAME TYPE VALUE
----------------------------------- ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 576M
sga_target big integer 576M
最早的一ơ用oracle 11g导出数据发现有的表丢׃Q感觉莫名其妙的Q后来终于找到原因了?br />扑ֈ问题以后Q再看看解决Ҏ?br />
11GR2中有个新Ҏ,当表无数据时Q不分配segmentQ以节省I间Q可是在?/span>EXPORT导出ӞI也不能导出,q就Dq移时候丢׃一些表Q存储过E也失效了。本以ؓEXP能有相应的控制开养I可以切换是否导出IQ看了下帮助Q没有太大的改变。有些奇怪,N11GR2不更新EXP的功能了Q还看有的帖子说11GR1作ؓ客户端去卸蝲11GR2的,都会出现ora-1455d的错误,得换?/span>11GR2的exp才没事了Q心中感慨阿Q怎么版本间的兼容q么脆弱了!
解决ҎQ?/span>
该方法是在在I中插入数据,再删除,则?/span>segment。导出时则可导出I?/span>
该参数值默认是TRUEQ当改ؓFALSEӞ无论是空表还是非IQ都分配segment。修?/span>SQL语句Q?/span>
alter system set deferred_segment_creation=false scope=both;
需注意的是Q该D|后对以前导入的I不生作用,仍不能导出,只能对后面新增的表生作用。如需导出之前的空表,只能用第一U方法?/span>
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
?/span>SQL查询的结果导出,然后执行导出的语句,分配I间修改segment|然后再导出即可导出空表了?/span>
RAW(8) 64 ?br />
raw(4) 32?/p>
http://badboyryan:1158/em
数据库配|文件已l安装到 D:\oracle\product\10.2.0,同时其他选定的安装组件也已经安装?D:\oracle\product\10.2.0\db_1?/p>
iSQL*Plus URL ?
http://badboyryan:5560/isqlplus
iSQL*Plus DBA URL ?
http://badboyryan:5560/isqlplus/dba
sqlplus /nolog; connect / as sysdba alter user sys identified by newpassword ; alter user system identified by newpassword ; |
orapwd file=pwdxxx.ora password=newpassword entries=10 |
讑֮完后Q重新启动服务,再次登陆可以了
echo Using JVM: %PR_JVM%
"%EXECUTABLE%" //IS//%SERVICE_NAME% --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop
一句后面加?--DependsOn oracle侦听服务Qoracledatabse
注意用;号隔开依赖的服?br />
再执行bin/service.bat install jnszcg Q即可安?span class="hilite1">Tomcat服务Qƈ且依赖oracle
其实很简单就是制定服务的依赖关系Q?br />
最后采取的Ҏ成功了:
1、把tomcat做到服务里面Q手工启动;
2、新Z个批处理net start tomcat
3、新Z个Q务,在计机启动的时候执行批处理ok
是不是问题已l解决了
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01991: ???????'E:\oracle\ora92\DATABASE\PWDsdnt.ORA'
解决ҎQ由于未q行在归档模式下Q用orapwd重徏oracle的密码文Ӟ
host del E:\oracle\ora92\DATABASE\PWDsdnt.ORA
host orapwd file=E:\oracle\ora92\DATABASE\PWDsdnt.ORA password=system entries=10
alter database open转自:http://blog.csdn.net/yxc369/archive/2006/12/26/1461206.aspx
1 前言 2
2 ȝ 2
3 降龙十八?3
W一?避免对列的操?3
W二?避免不必要的cd转换 4
W三?增加查询的范围限?4
W四?量L”IN”?#8221;OR” 4
W五?量L “<>” 5
W六?LWhere子句中的IS NULL和IS NOT NULL 5
W七?索引提高数据分布不均匀时查询效?5
W八?利用HINT强制指定索引 6
W九?屏蔽无用索引 6
W十?分解复杂查询Q用帔R代替变量 7
W十一?like子句量前端匚w 7
W十二掌 用Case语句合ƈ多重扫描 7
W十三掌 使用nls_date_format 8
W十四掌 使用Z函数的烦?8
W十五掌 Z函数的烦引要求等式匹?9
W十六掌 使用分区索引 9
W十七掌 使用位图索引 9
W十八掌 军_使用全表扫描q是使用索引 9
4 ȝ 10
Ua技术与政治无关Q小布老师的视频讲的真不错Qȝ一下供以后参?/p>
-------------------------------------------------------------------------
一、安装centos4.4版本
1、安装centos的时候开始输入i586应用一些新功能Q?br />
2、分区swap分区是内存的2?br />
/ ext3 选择fill to maximum allowable size
3、设|一个固定的IP地址
4、不要启用防火墙
5、注意在选择lg的时候选择上develop tools 和legacy software develop
安装oracle需要安装开发环?br />
6、图形声韟뀁打印等不要选择
二、查看linux里面的包是否全支持oracle11g?br />
binutils-2.15.92.0.2-18
compat-libstdc++-33.2.3-47.3
glibc-2.3.4-2.19
glibc-common-2.3.4-2.19
glibc-devel-2.3.4-2.19
glibc-headers-2.3.4-2.19
gcc-3.4.5-2
gcc-c++-3.4.5-2
libgcc-3.4.5
libstdc++-3.4.5-2
libstdc++-devel-3.4.5-2
make-3.80-5
sysstat-5.0.5
----------------------------
unixODBC-2.2.11
unixODBC-devel-2.2.11
libaio-devel-0.3.105-2
libaio-0.3.105-2
elfutils-libelf-0.97-5
elfutils-libelf-devel-0.97-5
必须的rpm
用这个命令查?nbsp; rpm -qa | grep
没有׃安装包里面找发现下面?个默认没有装好需要自己安装;
有一个包里面都是从centos里面取出来的
把这些包攑ֈroot的目录下面进行安?br />
了我把包整理了一下上传到csdnQ不q是Z增加点积分而已d1.7M左右?br />
下蝲地址Qhttp://download.csdn.net/source/471808
三、修改内核的参数
参照oracle在linux下的安装文档q行大体如下Q?br />
1、vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
执行q个使生效;
/sbin/sysctl -p
2、vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
3、vi /etc/pam.d/login
session required /lib/security/pam_limits.so
session required pam_limits.so
4、vi /etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
四、创建ORACLE安装的组和用?br />
groupadd oinstall
groupadd dba
mkdir /u01/oracle
useradd -g oinstall -G dba -d /u01/oracle oracle
passwd oracle
chown -R oracle:oinstall u01
id nobody认nobody用户存在
五、设|ORACLE的环境变?/p>
用oracle的用L录系l,然后
vi .bash_profile
加入
oracle_base=/u01
oracle_home=$oracle_base/bin
oracle_sid=chinantn
path=$path:$oracle_home/bin
export oracle_base oracle_home oracle_sid path
注意=号两边不要有I格Q?br />
六、开始安?br />
1、unzip linux oracle11.zip
2、mv database /u01
3、chown -R oracle:oinstall database/
4、startx
5?用oracle用户d
6、进入终端,cd database
7?/runInstaller
8、vi /etc/hosts 加入ip 你的计算机名
9、安装完后root执行两个脚本
10、只安装软g
11、netca dbca讄侦听和创建数据库注意选择unicode字符集?nbsp;
上面的过E亲自试验成功。oracle11g+centos 4.4
实在不行qqQ?47863130 吧山东济南的ORACLE用户多联pd
记得转蝲的时候写上来?http://blogjava.net/badboyryan
安装的时候第一步弹Z个错误,点确认后修改一下目?u01/
C:\Documents and Settings\scf>set ORACLE_SID=chinantn
C:\Documents and Settings\scf>set oracle_sid
ORACLE_SID=chinantn
C:\Documents and Settings\scf>emctl start dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.1.0.6.0
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
https://ntscf:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 11g Database Control ...OracleDBConsolechinan
tn 服务正在启动 ................................................................
...
OracleDBConsolechinantn 服务已经启动成功?/p>
可以使用web版本的oem了;支持web理比较好用?/p>
用户已更攏V?/p>
SQL> commit;
提交完成?/p>
SQL>
Total System Global Area 135337420 bytes
Fixed Size 452044 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL>alter database character set INTERNAL_USE UTF8
或?br />
SQL> alter database character set zhs16gbk
2 ;
alter database character set zhs16gbk
*
W?1 行出现错?
ORA-12716: ??? CLOB ???, ?? ALTER DATABASE CHARACTER SET
alter database character set internal_convert zhs16gbk;
转:http://blog.csdn.net/nxyc_twz/archive/2004/06/16/16061.aspx
ODAC lg支持 Oracle 8 ?BLOB ?CLOB 数据cd。你可以使用 TOraQuery lg来获?LOB 字段的|使用同样的方法,你也可以获取 LONG ?LONG ROW 字段?当你需要?SQL DML ?PL/SQL 语句存取q些字段Ӟ你就会发?LOB 数据cd的用法有明显的不同?br />BLOB ?CLOB 数据cd通过 LOB 定位?指定数据地址) 存储在表列中Q实际的 BLOB ?CLOB 数据存储在独立的表空间中。与之不同的是,LONG ?LONG RAW cd存储在数据库中,表中存放着它们的实际倹{?br />
当存?LOB 列时Q返回的是定位器Q而不?LONG ?LONG RAW 数据cd那样q回它的实际倹{?
例如Q分析这个表的定义:
CREATE TABLE ClobTable (
Id NUMBER,
Name VARCHAR2(30),
Value CLOB
)
如果我们不通过值参数初始化 LOB 定位器, Oracle 不允许使用下面的语句来更新数据表:
UPDATE ClobTable
SET
Name = :Name,
Value = :Value
WHERE
Id = :Id
要初始化 LOB 定位器,你必M?EMPTY_BLOB ?EMPTY_CLOB Oracle 函数。要q回初始化后的定位器Q应在同L语句中?RETURNING 子句。例如:
UPDATE ClobTable
SET
Name = :Name,
Value = EMPTY_CLOB()
WHERE
Id = :Id
RETURNING
Value
INTO
:Value
ODAC ?LOB 数据?Oracle 且返回初始值字D,需使用Q值参数?br />存储q程允许自动初始?LOB |Ҏ如下Q?br />
CREATE OR REPLACE
PROCEDURE ClobTableUpdate (p_Id NUMBER, p_Name VARCHAR2,
p_Value OUT CLOB)
is
begin
UPDATE ClobTable
SET
Name = p_Name,
Value = EMPTY_CLOB()
WHERE
Id = p_Id
RETURNING
Value
INTO
p_Value;
end;
注意Q值参数被声明?OUT。同Ӟ讄 LOB 数据cd的参数的 ParamType 属性ؓ ptInput Q且指定它到所需的数据前来实际调用存储过E。我们可以这栯用前面声明的存储q程Q?br />
OraStroredProc1.StoredProcName := 'ClobTableUpdate';
OraStroredProc1.Prepare;
OraStroredProc1.ParamByName('p_Id').AsInteger := Id;
OraStroredProc1.ParamByName('p_Name').AsString := Name;
OraStroredProc1.ParamByName('Value').ParamType := ptInput;
OraStroredProc1.ParamByName('Value').AsCLOBLocator.
LoadFromFile(FileName);
OraStroredProc1.Execute;
?ODAC 来说Q在 LOB 操作中?ParamType 属性是非常重要的。如?ParamType ?ptInput Q?ODAC 写数据到服务器,如果 ParamType ?ptOutputQ它则读取数据?br />
你可以?LOB 参数?dtBlob ?dtMemo 数据cd来编写普通的 DML 语句。在q种情况下, Oracle 自动?LONG ?LONG ROW cd的D{换ؓ CLOB ?BLOB 数据?br />
http://support.microsoft.com/kb/322796/en-us