November 3, 2009
备份重于一切 - 记(eygle.com)服务器硬盘故障
作者:eygle
出处:http://blog.eygle.com
今天下午,忽然发现网站出现异常,心中蓦然一惊,以为又是被黑客攻击,怎一个惨字了得。登陆服务器检查,心中又是一喜一惊,喜的是不是黑客攻击,惊的是,一块1T的用于存数据的硬盘消失了。大量的错误信息让人当场崩溃:
Buffer I/O error on device cciss/c0d1, logical block 3晚上回家开始恢复数据,不停的被Julia数叨:你讲课不总是说备份重于一切么?怎么到自己头上不灵了。
cciss: cmd f7020250 has CHECK CONDITION byte 2 = 0x3
Buffer I/O error on device cciss/c0d1, logical block 0
cciss: cmd f7020000 has CHECK CONDITION byte 2 = 0x3
Buffer I/O error on device cciss/c0d1, logical block 179177296
cciss: cmd f7020000 has CHECK CONDITION byte 2 = 0x3
Buffer I/O error on device cciss/c0d1, logical block 0
cciss: cmd f7020000 has CHECK CONDITION byte 2 = 0x3
Buffer I/O error on device cciss/c0d1, logical block 179177317
cciss: cmd f7020000 has CHECK CONDITION byte 2 = 0x3
Buffer I/O error on device cciss/c0d1, logical block 0
cciss: cmd f7020000 has CHECK CONDITION byte 2 = 0x3
Buffer I/O error on device cciss/c0d1, logical block 179177296
我说,其实我不说自己网站的DBA,就如同前几天Tomas kyte说,他不在做自己asktom的DBA一样。
借口不能使数据回来,只有加油干活,折腾到现在23:50,终于回复了大部分数据,以后慢慢找补,也趁此机会梳理一下网站内容。
当然同时提醒一下大伙,备份终于一切,反反复复的提醒,没完没了的提醒。
说到Eygle.com这个小网站,5年间经历了多次黑客攻击和硬件故障,也因此我们永远不能心存侥幸。
-The End-
Posted by eygle at 11:44 PM | Comments (11)
11gR2新特性之- 并行DBMS_PARALLEL_EXECUTE
作者:eygle
出处:http://blog.eygle.com
在2009 Oracle Openworld上,Thomas Kyte在一个关于《The top 10 - No, 11 - New Features of Oracle Database 11g Release 2》的演讲中,提到一个并行执行的新特性,比较感兴趣。(这个PPT目前已经可以下载,下载地址为:Top 10,Tom的另外一个OOW PPT)
这个新特性引入一个Package: DBMS_PARALLEL_EXECUTE,通过这个包可以将一个任务调度为并行,而此前我们需要手工来编写程序,通过rowid或者主键还分割,前一段做过大量这个工作,用11gR2,这个工作能简化很多。
这个包的典型用法引用如下:
DECLARE这是一个好东西,记录在此。
l_sql_stmt VARCHAR2(1000);
l_try NUMBER;
l_status NUMBER;
BEGIN
-- Create the TASK
DBMS_PARALLEL_EXECUTE.CREATE_TASK ('mytask');
-- Chunk the table by ROWID
DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_ROWID('mytask', 'HR', 'EMPLOYEES', true, 100);
-- Execute the DML in parallel
l_sql_stmt := 'update /*+ ROWID (dda) */ EMPLOYEES e
SET e.salary = e.salary + 10
WHERE rowid BETWEEN :start_id AND :end_id';
DBMS_PARALLEL_EXECUTE.RUN_TASK('mytask', l_sql_stmt, DBMS_SQL.NATIVE,
parallel_level => 10);
-- If there is an error, RESUME it for at most 2 times.
L_try := 0;
L_status := DBMS_PARALLEL_EXECUTE.TASK_STATUS('mytask');
WHILE(l_try < 2 and L_status != DBMS_PARALLEL_EXECUTE.FINISHED)
LOOP
L_try := l_try + 1;
DBMS_PARALLEL_EXECUTE.RESUME_TASK('mytask');
L_status := DBMS_PARALLEL_EXECUTE.TASK_STATUS('mytask');
END LOOP;
-- Done with processing; drop the task
DBMS_PARALLEL_EXECUTE.DROP_TASK('mytask');
END;
/
-The End-
Posted by eygle at 8:11 AM | Comments (0)
