天有不测风云,
IBM 的中端磁盘阵列这次又惹祸了。在微码升级的时候,
DS4800 发生故障。导致当时在这台库上的几套生产库报错了。
IBM工程师把阵列故障恢复后,拍拍屁股走人,阵列上的数据又得我们来想办法抢救了。。。。
还好有oracle support的支持我们最终化解了这次危机。下文详细介绍了整个恢复的过程。
oracle工程师到达现场后,根据错误信息,
|||||||||||||||||||||||||||||||||||||||||||||||||||||
错误信息如下所示:
Mon Apr 26 20:40:06 2010
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 3
Using LOG_ARCHIVE_DEST_1 parameter default value as /oracle/product/10.2.0/db/dbs/arch
Autotune of undo retention is turned on.
IMODE=BR
ILAT =121
LICENSE_MAX_USERS = 0
SYS auditing is disabled
ksdpec: called for event 13740 prior to event group initialization
Starting up ORACLE RDBMS Version: 10.2.0.4.0.
System parameters with non-default values:
processes &nbs ......
Oracle中to_date()与24小时制表示法及mm分钟的显示:
在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会和我一样,直觉的采用“yyyy-MM-dd HH:mm:ss”的格式
作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。如:
to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') ;
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。
to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') ;
另要以24小时的形式显示出来要用HH24
......
数据库数据
ID
UserName
Date
1
User1
2010/4/27
1
User1
2010/4/11
1
User1
2010/4/1
要求:
获取最新日期的一条数据
Sql语句:
select t.* from tb t where date = (select max(date) from tb where id = t.id) order by t.id ......
Oracle中使用WMSYS.WM_CONCAT函数进行多行转列
原数据:
rank name
AA NAME1
AA NAME2
AA NAME3
BB NAME4
BB NAME5
SQL>select trim(t.rank) as rank,
wmsys.wm_concat(trim(t.name)) as name
from table_name t
group by t.rank;
实现的效果是:会先按rank分组,将分组后的name以“,”按组合并为一列。
结果如下:
rank name
AA NAME1,NAME2,NAME3
BB NAME4,NAME5
注:默认以“,”字符连接合并后的结果 ......
select trunc(sysdate ,'yyyy') from dual --本年度第一天
select trunc(sysdate ,'mm') from dual --本月第一天
select trunc(sysdate ,'dd') from dual --当前日期
dbms_output.put_line( to_char ( ((sysdate)+ ( 10 / ( 24*60*60 )) ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ;--当前时间+10s
dbms_output.put_line( to_char ( trunc(sysdate)+( 1 + 1/24 ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ; --当前 第2天 1点
dbms_output.put_line( to_char ( trunc(sysdate)+( 1 + 9/24 ) , 'yyyy-mm-dd hh24:mi:ss' ) ) ; --当前 第2天 9点
create table tb_old as select * from tb_new ......
SELECT
DECODE(列,0,'Q'1,'P',2,'O') AS ret
from dual
--分析: 当 列=0时,将"Q"赋值
--当 列 =1时,将"P"赋值
--当 列=2时,将"O"赋值
--NVL()函数:
--NVL(ARG,VALUE)达标如果前面的ARG值为NULL那么返回的值为后面的VALUE二者结合使用:
DECODE(NVL(变量 ''),'','-','OK')
//分析:
--若 变量 是否为空.若为空赋给空值[NVL函数]
--其次,判断取出的字段是否为空,如果是则赋给'-'
--默认处理是OK。 ......