{"id":789,"date":"2006-05-07T12:00:00","date_gmt":"2006-05-07T12:00:00","guid":{"rendered":"http:\/\/orcldoug.com\/blog\/?p=789"},"modified":"2006-05-07T12:00:00","modified_gmt":"2006-05-07T12:00:00","slug":"dude-wheres-my-data","status":"publish","type":"post","link":"http:\/\/orcldoug.com\/blog\/2006\/05\/07\/dude-wheres-my-data\/","title":{"rendered":"DUDE, Where&#8217;s My Data?"},"content":{"rendered":"<p>One of my highlights of the Hotsos Symposium 2006 was meeting <a href=\"http:\/\/www.ora600.nl\/info.htm\">Kurt Van Meerbeeck<\/a>. There are some people I think I&#8217;m going to be friends with as soon as I meet them. Kurt is one of the those guys. It turns out we have quite a lot of tastes and views in common (and I don&#8217;t just mean smoking &#8211; something that Kurt has given up now but certainly made an impressive job of in the past. Read that page and you&#8217;ll see what I mean!). However, unlike me, he&#8217;s an \ufffdber-geek! He won&#8217;t like me for saying this because he&#8217;s a pretty modest guy who keeps a low profile, but he&#8217;s one of the few people I&#8217;ve met who operates at the same level as the best games programmers I used to work with.<\/p>\n<p>He&#8217;s the author of a tool that I&#8217;d been vaguely aware of in the past called jDUL which was a tool designed to do a similar job to Oracle&#8217;s own tool, DUL. I think I probably first heard about it on Pete Finnigan&#8217;s website. It&#8217;s been renamed now to <a href=\"http:\/\/www.ora600.nl\/introduction.htm\">DUDE<\/a> &#8211; Database Unloading by Data Extraction.<\/p>\n<p>DUDE and other DUL-type utilities are tools of last resort when you&#8217;ve been a bad DBA and find yourself with a corrupt database and inadequate backups. Reading data directly from your data files (because the database is unlikely to be open at this stage), it gives you one last chance of recovering the situation by building SQL*Loader compatible data files containing your data. Hopefully you&#8217;ll then be able to load the data into a working database. It&#8217;s not a cool alternative to exports or fast data unloaders, but a serious recovery tool.<\/p>\n<p>I offered to help Kurt test it out on my server at home because it would give me an opportunity to learn more about the tool, should I ever need to use it. I was just interested in it, too. That involved Kurt building a special time-limited server-specific version of the tool, which is one way you can buy it. I&#8217;ll come back to that later. During the testing the main things I learned are<\/p>\n<p>1) You need to do a bit of up-front configuration. It&#8217;s not too hard and it&#8217;s all in a single dude.cfg file but, let&#8217;s face it, we&#8217;re not in SQL Developer territory here &#128521;<\/p>\n<p>2) It works best with Sun&#8217;s JDK rather than some Linux open source variant. This one had us stumped for ages &#8211; firing emails back and forward until I got Kurt access to my server and he solved it the same evening. He does some very smart security obfuscation stuff with Java classes and the like which my Linux Java Runtime Environment didn&#8217;t like.<\/p>\n<p>3) Once the configuration has been done it&#8217;s a breeze, once you get used to having a space and semi-colon at the end of all the command lines. Here&#8217;s how it looks (and remember, all of this is happening on a closed or corrupt database)<\/p>\n<pre>[oracle@ISP4400 dude]$ java -Xmx512m dude<br\/>License information :<br\/>User : Doug Burns<br\/>Email : dougburns@yahoo.com<br\/>Company : Independent<br\/>Phone : +44-495-xxxxxxx<br\/>Fax : +32-15-xxxxxxx<br\/>Host : ISP4400.localdomain (127.0.0.1)<br\/>Platform : Linux i386<br\/>Valid for 30 days.<br\/><p><\/p><br\/><br\/>Current size logfile = 1274037 bytes<br\/><p><\/p><br\/>jDUL\/DUDE : 2.3.3<br\/><p><\/p><br\/>NOT FOR DISTRIBUTION 2001 - 2005 Kurt Van Meerbeeck - ORA600 -<br\/>dude@ora600.org<br\/>FOR EDUCATIONAL USE ONLY !<br\/>PERSONAL COPY of Doug Burns \/ Independent \/ dougburns@yahoo.com<br\/><p><\/p><br\/>Roads ? Where we're going we don't need roads ...<br\/><p><\/p><br\/>DUDE&gt; Initialising ...<br\/>DUDE&gt; DEMO MODE - restrictions apply !<br\/>DUDE&gt; Init : creating filenumber map ...<br\/>DUDE&gt; Scanning tablespace SYSTEM : BLOCKSIZE = 8192<br\/>DUDE&gt; File : \/home\/oracle\/product\/10.2.0\/oradata\/TEST1020\/system01.dbf<br\/>resolves to number : 1<br\/>DUDE&gt; Scanning tablespace DUDE : BLOCKSIZE = 8192<br\/>DUDE&gt; File : \/u01\/oradata\/TEST1020\/dude_01.dbf resolves to number :<br\/>10<br\/>DUDE&gt; Init : checking datafile blocksizes ...<br\/>DUDE&gt; DATAFILE =<br\/>\/home\/oracle\/product\/10.2.0\/oradata\/TEST1020\/system01.dbf OK : BLOCKSIZE<br\/>= 8192 equals internal blocksize !<br\/>DUDE&gt; DATAFILE = \/u01\/oradata\/TEST1020\/dude_01.dbf OK : BLOCKSIZE =<br\/>8192 equals internal blocksize !<br\/>DUDE&gt; Init done.<br\/>DUDE&gt; dump dictionary ;<br\/>DUDE&gt; Dumping OBJ$...<br\/>VALID1 = 1146002293000 tsl = 1145981242000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestampsVALID1 =<br\/>1146002293000 tsl = 1145981242000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestampsVALID1 =<br\/>1146002293000 tsl = 1145981243000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestampsVALID1 =<br\/>1146002293000 tsl = 1145981243000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestampsVALID1 =<br\/>1146002293000 tsl = 1145981242000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestampsVALID1 =<br\/>1146002293000 tsl = 1145981242000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestampsDUDE&gt; Reading<br\/>blocks done !<br\/>DUDE&gt; Please wait for output stream to finish ...<br\/>DUDE&gt;<br\/>Normal rows    = 10533<br\/>Migrated rows  = 0<br\/>Chained rows   = 0<br\/>Deleted rows    = 16 (not extracted!)<br\/>Skipped rows   = 0 (not extracted!)<br\/><p><\/p><br\/>DUDE&gt; Done !<br\/>DUDE&gt; Dumping TAB$...<br\/>DUDE&gt; Reading blocks done !<br\/>DUDE&gt; Please wait for output stream to finish ...<br\/>DUDE&gt; Done !<br\/>DUDE&gt; Dumping COL$...<br\/>DUDE&gt; Reading blocks done !<br\/>DUDE&gt; Please wait for output stream to finish ...<br\/>DUDE&gt; Done !<br\/>DUDE&gt; Dumping USER$...<br\/>DUDE&gt; Reading blocks done !<br\/>DUDE&gt; Please wait for output stream to finish ...<br\/>DUDE&gt; Done !<br\/>DUDE&gt; create dictionary ;<br\/>DUDE&gt; show users ;<br\/>DUDE&gt; user# = 30  -  name = PERFSTAT<br\/>DUDE&gt; user# = 19  -  name = DIP<br\/>DUDE&gt; user# = 18  -  name = SCHEDULER_ADMIN<br\/>DUDE&gt; user# = 17  -  name = GLOBAL_AQ_USER_ROLE<br\/>DUDE&gt; user# = 16  -  name = AQ_USER_ROLE<br\/>DUDE&gt; user# = 15  -  name = AQ_ADMINISTRATOR_ROLE<br\/>DUDE&gt; user# = 14  -  name = LOGSTDBY_ADMINISTRATOR<br\/>DUDE&gt; user# = 13  -  name = GATHER_SYSTEM_STATISTICS<br\/>DUDE&gt; user# = 12  -  name = RECOVERY_CATALOG_OWNER<br\/>DUDE&gt; user# = 11  -  name = OUTLN<br\/>DUDE&gt; user# = 10  -  name = IMP_FULL_DATABASE<br\/>DUDE&gt; user# = 9  -  name = EXP_FULL_DATABASE<br\/>DUDE&gt; user# = 8  -  name = DELETE_CATALOG_ROLE<br\/>DUDE&gt; user# = 28  -  name = PLUSTRACE<br\/>DUDE&gt; user# = 7  -  name = EXECUTE_CATALOG_ROLE<br\/>DUDE&gt; user# = 27  -  name = TESTUSER<br\/>DUDE&gt; user# = 6  -  name = SELECT_CATALOG_ROLE<br\/>DUDE&gt; user# = 26  -  name = WM_ADMIN_ROLE<br\/>DUDE&gt; user# = 5  -  name = SYSTEM<br\/>DUDE&gt; user# = 25  -  name = WMSYS<br\/>DUDE&gt; user# = 4  -  name = DBA<br\/>DUDE&gt; user# = 24  -  name = DBSNMP<br\/>DUDE&gt; user# = 3  -  name = RESOURCE<br\/>DUDE&gt; user# = 23  -  name = OEM_MONITOR<br\/>DUDE&gt; user# = 2  -  name = CONNECT<br\/>DUDE&gt; user# = 22  -  name = OEM_ADVISOR<br\/>DUDE&gt; user# = 1  -  name = PUBLIC<br\/>DUDE&gt; user# = 21  -  name = TSMSYS<br\/>DUDE&gt; user# = 0  -  name = SYS<br\/>DUDE&gt; user# = 20  -  name = HS_ADMIN_ROLE<br\/>DUDE&gt; create blockmap for tablespace DUDE ;<br\/>DUDE&gt; ID := 0 BLOCKMAPPER for TABLESPACE NAME = DUDE<br\/>OFFSET = 0<br\/>ASSM = true<br\/>BIGFILE = false<br\/>BLOCKSIZE = 8192<br\/>NUMBER = 10 FILENAME = \/u01\/oradata\/TEST1020\/dude_01.dbf IBS = 8192<br\/><p><\/p><br\/><br\/>DUDE&gt; Datafile \/u01\/oradata\/TEST1020\/dude_01.dbf : start reading<br\/>blocks ...<br\/>DUDE&gt; Datafile \/u01\/oradata\/TEST1020\/dude_01.dbf : reading blocks done<br\/>!<br\/>DUDE&gt; Please wait for output stream to finish ...<br\/>DUDE&gt; Done !<br\/>DUDE&gt; dump tablespace DUDE ;<br\/>DUDE&gt; Found table : OWNER = TESTUSER NAME = DUDE<br\/>OBJECTID = 10751 DATA OBJECTID = 10751<br\/>COL 1 [1] PK_ID NUMBER<br\/>COL 2 [2] NUM_CODE NUMBER<br\/>COL 3 [3] STR_PAD VARCHAR2<br\/>start dumping ...<br\/>VALID1 = 1146002293000 tsl = 1145981246000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestampsVALID1 =<br\/>1146002293000 tsl = 1145981246000 VALID2 = 1148594293000<br\/>ORA600:10 - timestamps do not match probed timestamps<br\/>DUDE&gt; Reading blocks done !<br\/>DUDE&gt; Please wait for output stream to finish ...<br\/>DUDE&gt;<br\/>Normal rows    = 1599984<br\/>Migrated rows  = 0<br\/>Chained rows   = 0<br\/>Deleted rows    = 0 (not extracted!)<br\/>Skipped rows   = 0 (not extracted!)<br\/><p><\/p><br\/>DUDE&gt; Done !<br\/>DUDE&gt; OBJECTID is not a table :10750<\/pre>\n<p>The result is a SQL*Loader data file like this. (Note that this is a table I use during PX testing which contains a couple of numeric columns and a long, random string. So that garbled-looking data is, in fact, the real thing.<\/p>\n<pre>\"1\",\"1\",\"orwRVUTmTQMKHOVkPhRAvgLtvYTCLnVevaBxXrnXoAWdfIIZXyRdVFmkPPTgHoQOrOHeGIHDhoeaoTTSWlggtIOLqV<br\/>dfgDlfOeIl\"|||<br\/>\"2\",\"2\",\"RQdFmwEKZGCmBzMAxfZhjlJmMtjwTnLGkxXJikqSORxsVqgdjKNxQSYeJNBFkPQJDavkkCTLwWaEcpQwExujFjktLY<br\/>OSAGbRrtcF\"|||<br\/>\"3\",\"3\",\"tzpghoCsIoaOLvppzADOzKClJudoQDKVpFcmlxbNYKIWUDIzHegrDfrCtSUyrNNxuCAwsQDXLLkTOKkRZKgTiBXjYw<br\/>kcKpLSMITM\"|||<br\/>\"4\",\"4\",\"ULXTqRLRqbUTcARZPlgTzkZDGOqYTEgiWIkPbrlYdrCBxCCaarlMstPaaOrJVrAMkEiEsDytdiUxmcdhGckMxwJwXc<br\/>ZwjmkOwkFq\"|||<br\/>\"5\",\"5\",\"FAUEaGJfVtHhrbVSnJIIgHBbpjIZTansdxlhjtrSpRdPEuPXvtXdsGRvjcdtgwXzrsOaVNldbmXlCQylcfDLhEnNZO<br\/>bQqORhKsqZ\"|||<\/pre>\n<p>There&#8217;s a lot more information on Kurt&#8217;s website, including a full <a href=\"http:\/\/www.ora600.nl\/DUDE_PRIMER.pdf\">DUDE primer in PDF format<\/a>.<\/p>\n<p>Most people, most of the time, aren&#8217;t going to need a tool like DUDE but every DBA should at least know that it exists in case they ever need it. If you do, there are several options. One is to licence DUDE for a short while and do the recovery yourself. That will involve Kurt putting together a server-specific build for you to run yourself that is time-limited. You could also get Kurt or the guys at <a href=\"http:\/\/www.miracleas.dk\/index.asp?sprog=2\">Miracle<\/a>to do the recovery for you. Now that I&#8217;ve played around with it for a while I would suggest you go for the latter approach when your business depends on it. (Then again, if your business depends on your unrecoverable database, you might ask yourself how you got in that situation in the first place.) Kurt is a super-smart guy with insane levels of commitment to his tool and your data. When we were at Hotsos, he would be working late into the night to help people out in different timezones. I won&#8217;t go into details of costs, but the DUDE approach is likely to be substantially cheaper than getting Oracle consulting in to do the job. In any case, I think the rates are more than reasonable for those situations when the doo-dah hits the fan.<\/p>\n<p><span style=\"font-style: italic\">Just to emphasise, you can always go to Oracle Consulting for this service, but DUDE is another option.<\/span><\/p>\n<p>In closing, I wanted to point out that the positive nature of this review is entirely down to my personal experiences and perhaps a little friendship mixed in with the respect I have for Kurt and absolutely nothing, I repeat <span style=\"font-weight: bold\">nothing<\/span> to do with being bribed &#128521;<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/oracledoug.com\/images\/dude.jpg\" onblur=\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\"><img decoding=\"async\" alt=\"\" border=\"0\" src=\"https:\/\/i0.wp.com\/oracledoug.com\/images\/dude.jpg?w=750\" style=\"margin: 0pt 10px 10px 0pt; float: left; cursor: pointer\" data-recalc-dims=\"1\"\/><\/a>Trust me, Kurt offered me this because he was having some test T-Shirts printed and because he&#8217;s a warm, friendly guy. It was nothing to do with this blog. Having said that, I&#8217;m absurdly chuffed with this T-shirt, which only goes to prove I might be a bit more of a geek than I thought I was &#128521;<\/p>\n<p>Kudos to Kurt &#8211; I wish I&#8217;d written something like DUDE in my spare time!<\/p>\n<p>P.S. To turn a common British joke around a bit &#8211; there <span style=\"font-style: italic\">are<\/span> some good things to come out of Belgium apart from chocolate and beer &#128521;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of my highlights of the Hotsos Symposium 2006 was meeting Kurt Van Meerbeeck. There are some people I think I&#8217;m going to be friends with as soon as I meet them. Kurt is one of the those guys. It turns out we have quite a lot of tastes and views in common (and I&hellip; <a class=\"more-link\" href=\"http:\/\/orcldoug.com\/blog\/2006\/05\/07\/dude-wheres-my-data\/\">Continue reading <span class=\"screen-reader-text\">DUDE, Where&#8217;s My Data?<\/span><\/a><\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-789","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":1423,"url":"http:\/\/orcldoug.com\/blog\/2008\/08\/03\/dude-its-a-blog\/","url_meta":{"origin":789,"position":0},"title":"dude &#8211; it&#8217;s a blog","date":"August 3, 2008","format":false,"excerpt":"Well, I'm back from two weeks holiday away from the net and a pile of blog comments and emails to catch up on. I'll leave those for tomorrow. A quickie for now, though. I see that Kurt van Meerbeeck (yeah, OK, Kurt the DUDE guy) has finally started a blog.\u2026","rel":"","context":"Similar post","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1297,"url":"http:\/\/orcldoug.com\/blog\/2007\/07\/16\/todays-links\/","url_meta":{"origin":789,"position":1},"title":"Today&#8217;s Links","date":"July 16, 2007","format":false,"excerpt":"Here are a few interesting blog postings I've been reading this week.Jonathan Lewis on another Statspack example.Nuno Souto on SQL Server - in three parts. What I particularly like about these postings is that the man has used both and is honest about their relative strengths and weaknesses, rather than\u2026","rel":"","context":"With 3 comments","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1426,"url":"http:\/\/orcldoug.com\/blog\/2008\/08\/11\/advert-more-seminar-dates\/","url_meta":{"origin":789,"position":2},"title":"Advert &#8211; More Seminar Dates","date":"August 11, 2008","format":false,"excerpt":"As previewed by Kurt on his blog, I'll be giving the 10g Performance seminar for Oracle Belgium on the 16th and 17th October (Oh, and thanks for the kind words, Kurt). The reason I didn't mention it before now was because I needed to update the agenda to reflect the\u2026","rel":"","context":"Similar post","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1549,"url":"http:\/\/orcldoug.com\/blog\/2009\/12\/02\/ukoug-2009-day-2\/","url_meta":{"origin":789,"position":3},"title":"UKOUG 2009 &#8211; Day 2","date":"December 2, 2009","format":false,"excerpt":"That's more like it!Well yesterday was much better, although not very successful in terms of number of achievements or educational experiences, but I cheered up a hell of a lot. (Some might suggest that would be a good idea in general.)I woke up fairly late because of the previous night's\u2026","rel":"","context":"With 8 comments","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/18.133.199.212\/wp-content\/uploads\/recovered\/marco_tshirt.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1571,"url":"http:\/\/orcldoug.com\/blog\/2010\/03\/02\/video-ukoug-conference-series-technology-e-business-suite-2009\/","url_meta":{"origin":789,"position":4},"title":"Video: UKOUG Conference Series Technology &#038; E-Business Suite 2009","date":"March 2, 2010","format":false,"excerpt":"What a great video!I present my evidence, Your Honour ...0:50 - You get a sense of how scary it might be to speak in Hall 1.0:59 - Kurt the DUDE guy falls asleep whilst listening to a keynote.1:32 - Tony Davis, ex-Apress editor points out that it's the networking, stupid!2:12\u2026","rel":"","context":"With 5 comments","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1440,"url":"http:\/\/orcldoug.com\/blog\/2008\/09\/23\/oow-day-3\/","url_meta":{"origin":789,"position":5},"title":"OOW Day 3","date":"September 23, 2008","format":false,"excerpt":"Well, 2.5 too, I suppose. I spent most of Monday afternoon 'networking'. i.e. Sitting around the OTN lounge chatting away to several people I know, most of them the strange old gents who like to complain about things a lot \ud83d\ude09I did, however, attend Andy Mendelsohn's General Session, or keynote\u2026","rel":"","context":"Similar post","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/posts\/789","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/comments?post=789"}],"version-history":[{"count":0,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/posts\/789\/revisions"}],"wp:attachment":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/media?parent=789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/categories?post=789"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/tags?post=789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}