记生平第一次跑完马拉松全程比赛
时间:2012年1月7日
地点:厦门
人物:本人及所有参赛运动员外加广大热心观众
事件:生平第一次参加国际马拉松全程邀请赛
比赛路线图:单击查看
成绩:6时36分12秒
概要:本来应该是早上8点准时开赛的,由于自己没能提前进场,耽误了10分钟,结果8:10分开始比赛。前半程跑起来感觉比较轻松,后半程,尤其是22公里到24公里之间,感觉身体极其疲惫,每迈一步都觉得很吃力,几度想放弃,又几度坚持下来了,过了这两公里的疲劳期之后,感觉身体又缓解了很多,不停地补充能量、水分,慢慢的边跑边走,熬到了30公里处,觉得舒服了很多,想想剩下的10多公里不就是一咬牙的事儿嘛。等看到32公里的标示牌时,那叫一个胜利就在前方不远处!就这样,坚持着,坚持着,不停给自己鼓劲,不放弃,最终于下午2点46分12秒到达厦门国际会议展览中心的全程马拉松终点!
赛后回顾:等跑完全程下来,觉得42.195公里的全程马拉松不过如此而已!难就难在坚持,其实,也就是一咬牙的事儿!虽然我花了6个多小时的时间,那么是否能跑出更好的成绩呢,我给自己的答案是明年厦门国际马拉松全程赛场见!
遗憾:跑完全程下来,让同事帮我到赛委会领取成绩证书,最后,却弄丢了证书。
厦门马拉松官方网站:http://www.xmim.org/cn/
延伸阅读:马拉松的故事,以下内容摘自网络:
马拉松与一场战争有关,马拉松原是一个地名,是波希战争的主战场。现在的马拉松的标准距离是马拉松平原到雅典中心广场的距离——42195米。古代波斯帝国有个名叫大流士一世的国王,到公元前6世纪末,他已经征服了周围许多国家和地区,那时候,波斯军队攻占了东起印度河流域,西至撒哈拉大沙漠的广大地区。剩下最后一个侵略目标就是隔海相望的希腊半岛了。
公元前500年,希腊人建在小亚细亚西南靠近爱琴海边的米利都城邦,率先起来进行摆脱波斯人统治的斗争。雅典应米利都的请求,与另一城邦爱勒特里亚一起派出25艘战船前往援助。希腊人很快攻陷了波斯在小亚细亚的总督府萨底斯,并放火把它烧了。但终因敌不过强大的波斯军队,米利都最后还是失败了。当初,雅典派战船支援米利都的消息传到波斯都城苏萨时,大流士一世十分震惊。他搭弓向西射了一箭,发誓要向雅典人报仇雪恨。他甚至命令奴仆,在他每次吃饭前都要大呼三声:“皇上!记住雅典人!”
公元前492年,波斯海陆大军在大流士一世的女婿的率领下,第一次进攻希腊本土。不料,这次出师不利,舰队在阿陀斯海角遭遇大风暴,没有踏入希腊本土。
大流士一方面继续备战,另方面派使者到希腊各城邦去索取土和水,试探希腊各城邦对波斯的态度,妄想采用外交恐吓的卑劣手段降服希腊人。半岛北部的一些城邦害怕强大的波斯,被迫照做了。只有南部的雅典和斯巴达等城邦顶住压力,坚决拒绝投降。斯巴达人把大流士的使者拖到一口井的旁边,指着井口说:“井里有水又有土,要多少就随便拿吧!”说完,把他投进了井里。
大流士被彻底地激怒了。他决定派有丰富作战经验的将领率军第二次远征希腊。公元前490年,波斯军横渡爱琴海,波斯军一举攻占了爱勒特里亚。接着,波斯军向南开进,杀向雅典。他们在雅典东北60公里的马拉松平原登陆,打算一举攻占这片土地。波斯军一旦攻占了马拉松,沿着一条大道向东翻越一个山丘,步行几十公里,就可抵达雅典城。
大军压境,雅典面临亡国的威胁。情急之下,雅典人派有名的长跑好手斐利皮德斯到斯巴达请求援兵。可斯巴达推辞说,他们正在过一种节日,按习惯必须等到月亮圆时,才能出兵。
如果坐等援军,就只有死路一条。雅典人只得依靠自己的力量,保卫自己的国家。他们动员了所有公民,征集到一万名重装兵。此外,还得到普拉提亚派来的一千名援军。雅典军队只有波斯的十分之一,力量对比十分悬殊。在这种不利的形势下,雅典军统帅米太亚得决定不与波斯人硬拼,把所有的士兵集中到马拉松,列成方阵。其中精锐兵力布署在两侧,正面中间部分的兵力相对薄弱。两军接触后,波斯军又施用中间突破的老办法,迫使雅典方阵里的中军向后退却。待气势汹汹的波斯军队追赶雅典中军时,雅典方阵两侧的精锐兵力以迅雷不及掩耳之势,杀向已经拉得很长的波斯军队。毫无准备的波斯军队猝不及防,立即乱了阵容,纷纷逃向海上的战船。雅典军又转向后方与中军联合,围歼了波斯中军,取得了马拉松战役的胜利,共歼灭波斯军6000多人,而雅典仅损失了192名士兵。
为了把胜利的喜讯尽快地传到雅典城里,米太亚得派跑得快的斐利皮德斯去完成这一任务。斐利皮德斯带着创伤和打仗的疲劳,立即往回飞跑。他以惊人的毅力,一口气跑了40多公里。抵达雅典城中央广场时,他只喊了声:“庆祝吧!雅典得救了!”就倒在地上牺牲了。
后人为了纪念这件事,决定1896年在雅典举行的第一届奥林匹克运动会上,新设一个竞赛项目,叫马拉松赛跑,距离以当年斐利皮德斯跑过的路程为准。这之后的几届奥运会,马拉松赛跑的距离一直没有统一。1920年,第七届奥运会前夕,人们重新测量了从马拉松到雅典中央广场的距离,才正式定为42公里195米。
这就是马拉松赛跑的来历。
Oracle OCP考试1z0-007系列2:学会使用WHERE和ORDER BY从句
继上篇日志,Oracle OCP考试1z0-007系列1:学会使用基本的SQL语句后,本篇是系列2,学会使用WHERE和ORDER BY从句。
本篇是1z0-007课程的第二章,主要内容:
1 学会使用WHERE从句从结果集中过滤数据;
2 学会使用ORDER BY从句对结果集进行排序。
本篇内容比较简单,只涉及到WHERE从句和ORDER BY从句两个知识点。
附:具体文档和讲义。
Oracle OCP考试1z0-007系列1:学会使用基本的SQL语句
在上一篇博文里提到Oracle OCP考试1z0-007考试的题库。从本篇开始,将带来Oracle OCP 1z0-007考试的相关文档和资料。
本篇是1z0-007课程的第一章,主要内容:
1 学会使用基本的SQL语句;
2 了解SQL语句的功能;
3 学会如何执行基本的SQL语句;
4 了解SQL语句与iSQL*PLUS命令的差别。
附:下述是具体文档和讲义。
Oracle OCP考试1z0-007题库
有不少学习Oracle的同学,或者是已经从事Oracle DBA相关工作的职场人士,都想通过Oracle官方考试,获取OCP证书,从而提高自己的技能、含金量。
然而,拥有Oracle OCP证书并不能代表您的Oracle技能水平就与众不同,但是至少对于新入行的DBA来说,证书至少是敲门砖。相比之下,拥有证书的DBA也应该更受雇主青睐。即使,目前市面上到处飘着的都是Oracle OCP,随手一抓就是一大把,我想,我们绝对不可以只做Paper DBA,我们每一个通过自己认真看书、学习、总结、实践,通过自身不断努力,凭借硬实力,而非背题库,最终顺利获取OCP证书的过来人来讲,证书对于我们还是有意义的,即使它只是一张纸而已!
好了,不过多堆砌文字了,奉上经典的Oracle 9i 1z0-007考试的题库,希望可以对即将准备OCP考试的网友们有益。
How to resolve ksvcreate: Process(m000) creation failed
在一套10.2.0.1.0的一主一备dataguard测试环境中,physical standby database的告警日志文件里,经常报出下述错误信息:
Thu Dec 1 08:47:59 2011 alter database open Thu Dec 1 08:48:00 2011 SMON: enabling cache recovery Thu Dec 1 08:48:06 2011 Physical standby database opened for read only access. Completed: alter database open Thu Dec 1 08:48:11 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:48:38 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:49:38 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:50:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:51:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:52:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:53:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:54:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:55:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:56:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:57:39 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:58:40 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 08:59:40 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 09:00:40 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 09:01:41 2011 ksvcreate: Process(m000) creation failed Thu Dec 1 09:02:41 2011 ksvcreate: Process(m000) creation failed
后经查找MetaLink:
‘Ksvcreate: Process(m000) creation failed’ after Standby Database Open Read Only Multiple Times [ID 418553.1]
Applies to:
Oracle Server – Enterprise Edition – Version: 10.2.0.1 to 10.2.0.1 – Release: 10.2 to 10.2
Information in this document applies to any platform.
***Checked for relevance on 15-APR-2011***
Symptoms
Switching a Physical Standby Database multiple to READ ONLY Mode will report the following Errors in the ALERT.LOG:
ksvcreate: Process(m000) creation failed
Changes
Switch Physical Standby from READ ONLY to apply and back to READ ONLY.
Cause
The Cause of this Problem has been identified in Bug 5583049.
Solution
There are two Workarounds available:
Restart the Instance..
or
Disable ADDM – Should be re-enabled if Standby takes up the Primary Role
* Set SGA_TARGET=0 and set shared_pool_size, db_cache_size, etc if using
Automatic SGA Memory Management (ASMM)
* Set STATISTICS_LEVEL=BASIC to disable statistics gathering
References
BUG:5583049 – ‘KSVCREATE: PROCESS(M000) CREATION FAILED’ AFTER STANDBY OPEN RO MULTIPLE TIMES
原来是oracle在10g上的bug,原因是physical standby database在没有完全关闭的情况下多次以read only方式打开。照着Oracle给出的解决方案1,重启Physical standby实例,暂且规避了该错误信息!
umount误操作引发数据库宕机
在开发数据库上,执行完其它测试工作后,随手执行命令卸载光盘,图省事,执行了下述命令:
[root@OEL511gR2 ~]# umount -all
然后,然后,就导致了一则不大不小的数据库宕机!!!
因为,我的开发库文件系统信息如下:
[root@OEL511gR2 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext3 9.7G 7.9G 1.3G 87% /
tmpfs tmpfs 502M 0 502M 0% /dev/shm
/dev/sdb1 ext4 67G 57G 6.5G 90% /u02/rimis_data
172.16.1.100:/backup
nfs 466G 105G 361G 23% /backup
[root@OEL511gR2 ~]#
而数据库的数据文件信息如下:
[oracle@OEL511gR2 ~]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Thu Nov 24 17:09:59 2011 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /u01/app/oradata/RIMISDB/system01.dbf /u01/app/oradata/RIMISDB/undotbs01.dbf /u01/app/oradata/RIMISDB/sysaux01.dbf /u01/app/oradata/RIMISDB/users01.dbf /u02/rimis_data/css_ott.dbf /u02/rimis_data/css_ltt_bk.dbf /u02/rimis_data/css_lti_bl.dbf /u02/rimis_data/css_oti.dbf /u02/rimis_data/css_ltt_rp.dbf /u02/rimis_data/css_cdi.dbf /u02/rimis_data/css_lti_ob.dbf NAME -------------------------------------------------------------------------------- /u02/rimis_data/css_ltt_eh.dbf /u02/rimis_data/css_blt.dbf /u02/rimis_data/css_ltt_bl.dbf /u02/rimis_data/css_eci.dbf /u02/rimis_data/css_ect.dbf /u02/rimis_data/css_lti_ec.dbf /u02/rimis_data/css_lti.dbf /u02/rimis_data/css_ltt_gw.dbf /u02/rimis_data/css_ltt.dbf /u02/rimis_data/css_ltt_tr.dbf /u02/rimis_data/css_lti_rp.dbf NAME -------------------------------------------------------------------------------- /u02/rimis_data/css_lti_bk.dbf /u02/rimis_data/css_gwi.dbf /u02/rimis_data/css_bli.dbf /u02/rimis_data/css_lti_tr.dbf /u02/rimis_data/css_ltt_ec.dbf /u02/rimis_data/css_gwt.dbf /u02/rimis_data/css_lti_gw.dbf /u02/rimis_data/css_cdt.dbf /u02/rimis_data/css_ltt_ob.dbf /u02/rimis_data/css_lti_eh.dbf 32 rows selected. SQL>
接着,邮箱就瞬间收到了来自开发项目组发出的数据库不可用的邮件!
最后,重新挂载磁盘,重启数据库。
一个小插曲,启完数据库后,忘记了启监听,就电话通知开发部门数据库可用。
又接着还是一通反应数据库不可用,罪过啊,手工启监听,手工注册服务!
写在这里,给自己提个醒,在服务器上操作时,记得千万千万要谨慎!!!好在,本次故障中,硬盘没损坏!不然就KO了!
如何从逻辑备份的dumpfile文件里获取头部详细信息?
在上一篇日志里,我们了解了 如何从逻辑备份的dumpfile文件里获取DDL脚本? 在本篇里,我们参照 MetaLink文档【ID 462488.1】来了解如何从dumpfile里获取更为详细的头部信息。
所有的dumpfile文件都是包含大小为4KB的头部数据区,该区域记录dumpfile文件的详细信息。从Oracle 10.2.0.1.0开始,可以调用系统包DBMS_DATAPUMP.GET_DUMPFILE_INFO来获取dumpfile的头部信息。
1 参照 MetaLink文档【ID 462488.1】我们可以创建一个SHOW_DUMPFILE_INFO存储过程,通过调用该过程可以获取dumpfile的详细信息,该过程的源代码如下:
CONNECT sys/manager as sysdba;
CREATE PROCEDURE show_dumpfile_info(
p_dir VARCHAR2 DEFAULT 'DATA_PUMP_DIR',
p_file VARCHAR2 DEFAULT 'EXPDAT.DMP')
AS
-- p_dir = directory object where dumpfile can be found
-- p_file = simple filename of export dumpfile (case-sensitive)
v_separator VARCHAR2(80) := '--------------------------------------' ||
'--------------------------------------';
v_path all_directories.directory_path%type := '?';
v_filetype NUMBER; -- 0=unknown 1=expdp 2=exp
v_fileversion VARCHAR2(15); -- 0.1=10gR1 1.1=10gR2 2.1=11g
v_info_table sys.ku$_dumpfile_info; -- PL/SQL table with file info
type valtype IS VARRAY(22) OF VARCHAR2(2048);
var_values valtype := valtype();
no_file_found EXCEPTION;
PRAGMA exception_init(no_file_found, -39211);
BEGIN
-- Show generic info:
-- ==================
dbms_output.put_line(v_separator);
dbms_output.put_line('Purpose..: Obtain details about export ' ||
'dumpfile. Version: 19-MAR-2008');
dbms_output.put_line('Required.: RDBMS version: 10.2.0.1.0 or higher');
dbms_output.put_line('. ' ||
'Export dumpfile version: 7.3.4.0.0 or higher');
dbms_output.put_line('. ' ||
'Export Data Pump dumpfile version: 10.1.0.1.0 or higher');
dbms_output.put_line('Usage....: ' ||
'execute show_dumfile_info(''DIRECTORY'', ''DUMPFILE'');');
dbms_output.put_line('Example..: ' ||
'exec show_dumfile_info(''MY_DIR'', ''expdp_s.dmp'')');
dbms_output.put_line(v_separator);
dbms_output.put_line('Filename.: ' || p_file);
dbms_output.put_line('Directory: ' || p_dir);
-- Retrieve Export dumpfile details:
-- =================================
SELECT directory_path INTO v_path FROM all_directories
WHERE directory_name = p_dir
OR directory_name = UPPER(p_dir);
dbms_datapump.get_dumpfile_info(
filename => p_file, directory => UPPER(p_dir),
info_table => v_info_table, filetype => v_filetype);
var_values.EXTEND(22);
FOR i in 1 .. 22 LOOP
BEGIN
SELECT value INTO var_values(i) FROM TABLE(v_info_table)
WHERE item_code = i;
EXCEPTION WHEN OTHERS THEN var_values(i) := '';
END;
END LOOP;
-- Show dumpfile details:
-- ======================
-- For Oracle10g Release 2 and higher:
-- dbms_datapump.KU$_DFHDR_FILE_VERSION CONSTANT NUMBER := 1;
-- dbms_datapump.KU$_DFHDR_MASTER_PRESENT CONSTANT NUMBER := 2;
-- dbms_datapump.KU$_DFHDR_GUID CONSTANT NUMBER := 3;
-- dbms_datapump.KU$_DFHDR_FILE_NUMBER CONSTANT NUMBER := 4;
-- dbms_datapump.KU$_DFHDR_CHARSET_ID CONSTANT NUMBER := 5;
-- dbms_datapump.KU$_DFHDR_CREATION_DATE CONSTANT NUMBER := 6;
-- dbms_datapump.KU$_DFHDR_FLAGS CONSTANT NUMBER := 7;
-- dbms_datapump.KU$_DFHDR_JOB_NAME CONSTANT NUMBER := 8;
-- dbms_datapump.KU$_DFHDR_PLATFORM CONSTANT NUMBER := 9;
-- dbms_datapump.KU$_DFHDR_INSTANCE CONSTANT NUMBER := 10;
-- dbms_datapump.KU$_DFHDR_LANGUAGE CONSTANT NUMBER := 11;
-- dbms_datapump.KU$_DFHDR_BLOCKSIZE CONSTANT NUMBER := 12;
-- dbms_datapump.KU$_DFHDR_DIRPATH CONSTANT NUMBER := 13;
-- dbms_datapump.KU$_DFHDR_METADATA_COMPRESSED CONSTANT NUMBER := 14;
-- dbms_datapump.KU$_DFHDR_DB_VERSION CONSTANT NUMBER := 15;
-- For Oracle11gR1:
-- dbms_datapump.KU$_DFHDR_MASTER_PIECE_COUNT CONSTANT NUMBER := 16;
-- dbms_datapump.KU$_DFHDR_MASTER_PIECE_NUMBER CONSTANT NUMBER := 17;
-- dbms_datapump.KU$_DFHDR_DATA_COMPRESSED CONSTANT NUMBER := 18;
-- dbms_datapump.KU$_DFHDR_METADATA_ENCRYPTED CONSTANT NUMBER := 19;
-- dbms_datapump.KU$_DFHDR_DATA_ENCRYPTED CONSTANT NUMBER := 20;
-- For Oracle11gR2:
-- dbms_datapump.KU$_DFHDR_COLUMNS_ENCRYPTED CONSTANT NUMBER := 21;
-- dbms_datapump.KU$_DFHDR_ENCPWD_MODE CONSTANT NUMBER := 22;
-- For Oracle10gR2: KU$_DFHDR_MAX_ITEM_CODE CONSTANT NUMBER := 15;
-- For Oracle11gR1: KU$_DFHDR_MAX_ITEM_CODE CONSTANT NUMBER := 20;
-- For Oracle11gR2: KU$_DFHDR_MAX_ITEM_CODE CONSTANT NUMBER := 22;
dbms_output.put_line('Disk Path: ' || v_path);
IF v_filetype = 1 OR v_filetype = 2 THEN
-- Get characterset name:
BEGIN
SELECT var_values(5) || ' (' || nls_charset_name(var_values(5)) ||
')' INTO var_values(5) FROM dual;
EXCEPTION WHEN OTHERS THEN null;
END;
IF v_filetype = 2 THEN
dbms_output.put_line(
'Filetype.: ' || v_filetype || ' (Original Export dumpfile)');
dbms_output.put_line(v_separator);
SELECT DECODE(var_values(13), '0', '0 (Conventional Path)',
'1', '1 (Direct Path)', var_values(13))
INTO var_values(13) FROM dual;
dbms_output.put_line('...Characterset ID.: ' || var_values(5));
dbms_output.put_line('...Direct Path.....: ' || var_values(13));
dbms_output.put_line('...Export Version..: ' || var_values(15));
ELSIF v_filetype = 1 THEN
dbms_output.put_line(
'Filetype.: ' || v_filetype || ' (Export Data Pump dumpfile)');
dbms_output.put_line(v_separator);
SELECT SUBSTR(var_values(1), 1, 15) INTO v_fileversion FROM dual;
SELECT DECODE(var_values(1),
'0.1', '0.1 (Oracle10g Release 1: 10.1.0.x)',
'1.1', '1.1 (Oracle10g Release 2: 10.2.0.x)',
'2.1', '2.1 (Oracle11g Release 1: 11.1.0.x)',
'3.1', '3.1 (Oracle11g Release 2: 11.2.0.x)',
var_values(1)) INTO var_values(1) FROM dual;
SELECT DECODE(var_values(2), '0', '0 (No)', '1', '1 (Yes)',
var_values(2)) INTO var_values(2) FROM dual;
SELECT DECODE(var_values(14), '0', '0 (No)', '1', '1 (Yes)',
var_values(14)) INTO var_values(14) FROM dual;
SELECT DECODE(var_values(18), '0', '0 (No)', '1', '1 (Yes)',
var_values(18)) INTO var_values(18) FROM dual;
SELECT DECODE(var_values(19), '0', '0 (No)', '1', '1 (Yes)',
var_values(19)) INTO var_values(19) FROM dual;
SELECT DECODE(var_values(20), '0', '0 (No)', '1', '1 (Yes)',
var_values(20)) INTO var_values(20) FROM dual;
SELECT DECODE(var_values(21), '0', '0 (No)', '1', '1 (Yes)',
var_values(21)) INTO var_values(21) FROM dual;
SELECT DECODE(var_values(22),
'1', '1 (Unknown)',
'2', '2 (None)',
'3', '3 (Password)',
'4', '4 (Dual)',
'5', '5 (Transparent)',
var_values(22)) INTO var_values(22) FROM dual;
dbms_output.put_line('...File Version....: ' || var_values(1));
dbms_output.put_line('...Master Present..: ' || var_values(2));
dbms_output.put_line('...GUID............: ' || var_values(3));
dbms_output.put_line('...File Number.....: ' || var_values(4));
dbms_output.put_line('...Characterset ID.: ' || var_values(5));
dbms_output.put_line('...Creation Date...: ' || var_values(6));
dbms_output.put_line('...Flags...........: ' || var_values(7));
dbms_output.put_line('...Job Name........: ' || var_values(8));
dbms_output.put_line('...Platform........: ' || var_values(9));
IF v_fileversion >= '2.1' THEN
dbms_output.put_line('...Instance........: ' || var_values(10));
END IF;
dbms_output.put_line('...Language........: ' || var_values(11));
dbms_output.put_line('...Block size......: ' || var_values(12));
dbms_output.put_line('...Metadata Compres: ' || var_values(14));
IF dbms_datapump.KU$_DFHDR_MAX_ITEM_CODE > 15 THEN
dbms_output.put_line('...Data Compressed.: ' || var_values(18));
dbms_output.put_line('...Metadata Encrypt: ' || var_values(19));
dbms_output.put_line('...Data Encrypted..: ' || var_values(20));
dbms_output.put_line('...Column Encrypted: ' || var_values(21));
dbms_output.put_line('...Encrypt.pwd. mod: ' || var_values(22));
IF v_fileversion = '2.1' or v_fileversion = '3.1' THEN
dbms_output.put_line('...Master Piece Cnt: ' || var_values(16));
dbms_output.put_line('...Master Piece Num: ' || var_values(17));
END IF;
END IF;
IF v_fileversion >= '1.1' THEN
dbms_output.put_line('...Job Version.....: ' || var_values(15));
END IF;
dbms_output.put_line('...Max Items Code..: ' ||
dbms_datapump.KU$_DFHDR_MAX_ITEM_CODE);
END IF;
ELSE
dbms_output.put_line('Filetype.: ' || v_filetype);
dbms_output.put_line(v_separator);
dbms_output.put_line('ERROR....: Not an export dumpfile.');
END IF;
dbms_output.put_line(v_separator);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('Disk Path: ?');
dbms_output.put_line('Filetype.: ?');
dbms_output.put_line(v_separator);
dbms_output.put_line('ERROR....: Directory Object does not exist.');
dbms_output.put_line(v_separator);
WHEN no_file_found THEN
dbms_output.put_line('Disk Path: ' || v_path);
dbms_output.put_line('Filetype.: ?');
dbms_output.put_line(v_separator);
dbms_output.put_line('ERROR....: File does not exist.');
dbms_output.put_line(v_separator);
END;
/
2 接下来,我们还以上篇博文里提到的使用EXPDP导出的dumpfile为例,其具体调用方法如下:
SQL> show user;
USER is "SYS"
SQL> select * from dba_directories where directory_name like 'MIG%';
OWNE DIRECTORY_NAME DIRECTORY_PATH
---- --------------- --------------------------------------------------
SYS MIG_DIR /u01/app/oracle/mig_dir
SQL> !ls -l /u01/app/oracle/mig_dir
total 24360
-rw-r----- 1 oracle asmadmin 24797184 Nov 21 17:19 expdp_hr.dmp
-rw-r--r-- 1 oracle asmadmin 3299 Nov 21 17:19 expdp_hr.log
-rw-r--r-- 1 oracle asmadmin 103892 Nov 21 17:23 hr_ddl.sql
-rw-r--r-- 1 oracle asmadmin 1672 Nov 21 17:23 impdp_hr.log
SQL> exec show_dumpfile_info(p_dir=>'mig_dir',p_file=>'expdp_hr.dmp');
----------------------------------------------------------------------------
Purpose..: Obtain details about export dumpfile. Version: 19-MAR-2008
Required.: RDBMS version: 10.2.0.1.0 or higher
. Export dumpfile version: 7.3.4.0.0 or higher
. Export Data Pump dumpfile version: 10.1.0.1.0 or higher
Usage....: execute show_dumfile_info('DIRECTORY', 'DUMPFILE');
Example..: exec show_dumfile_info('MY_DIR', 'expdp_s.dmp')
----------------------------------------------------------------------------
Filename.: expdp_hr.dmp
Directory: mig_dir
Disk Path: /u01/app/oracle/mig_dir
Filetype.: 1 (Export Data Pump dumpfile)
----------------------------------------------------------------------------
...File Version....: 3.1 (Oracle11g Release 2: 11.2.0.x)
...Master Present..: 1 (Yes)
...GUID............: B23C2582426C247EE04010ACBF00579A
...File Number.....: 1
...Characterset ID.: 873 (AL32UTF8)
...Creation Date...: Mon Nov 21 17:19:48 2011
...Flags...........: 2
...Job Name........: "HR"."SYS_EXPORT_SCHEMA_01"
...Platform........: x86_64/Linux 2.4.xx
...Instance........: rac1.localdomain:devdb1
...Language........: AL32UTF8
...Block size......: 4096
...Metadata Compres: 1 (Yes)
...Data Compressed.: 0 (No)
...Metadata Encrypt: 0 (No)
...Data Encrypted..: 0 (No)
...Column Encrypted: 0 (No)
...Encrypt.pwd. mod: 2 (None)
...Master Piece Cnt: 1
...Master Piece Num: 1
...Job Version.....: 11.02.00.00.00
...Max Items Code..: 22
----------------------------------------------------------------------------
PL/SQL procedure successfully completed.
SQL>
可以看到较为详细的信息,其中的Block size 4096表示dumpfile的header为4K。
3 如果,想把该过程的执行权限给普通用户:
GRANT execute ON show_dumpfile_info TO username;
4 如果,想要删除改过程:
DROP PROCEDURE show_dumpfile_info;
5 对于UNIX平台,我们还可以借助操作系统的命令来简单获取一些简单的信息:
rac1-> pwd /home/oracle rac1-> ls -l total 23688 drwxrwxr-x 17 root root 4096 May 26 21:20 12419321 -rw-r--r-- 1 oracle oinstall 15626 Aug 31 14:28 db.rsp -rw-r--r-- 1 oracle oinstall 24166400 Nov 21 16:51 exp_hr.dmp -rw-r--r-- 1 oracle oinstall 2493 Nov 21 16:51 exp_hr.log drwxr-x--- 3 oracle oinstall 4096 Aug 31 15:03 oradiag_oracle -rw-r--r-- 1 oracle oinstall 28766 Nov 21 17:03 show_ddl.log rac1-> cat exp_hr.dmp |head|strings iEXPORT:V11.02.00 RUSERS 8192 Mon Nov 21 16:50:25 2011exp_hr.dmp #G#G rac1->
结合,上一篇,我们算是对如何从dumpfile里获取DDL脚本以及如何获取dumpfile的header deatail information有了一个初步认识。希望这两篇文章可以对网友在学习Oracle数据库逻辑备份带去帮助!
