Friday, December 29, 2006

ApexSQL Log 2005.03 released

Today we have released ApexSQL Log 2005.03. It's been six months since the last release and there are several major features that we packed in 2005.03, of which the most important, and definitely the most anticipated by our users, is full x64 support. This includes support for SQL Server 2005 x64 and for 32-bit SQL Server 7/2000/2005 running on Windows x64 operating systems (including online transaction log reading). Beside this we have added BLOB support to our Recovery Wizard (only when recovering from MDF files though, not from transaction log files) and we have greatly improved performance of MDF recovery. There is a host of other smaller features accompanied with another host of really important bug fixes.

I almost forgot that we have also created a separate installer for server-side components. This is now our recommended way to install server-side components since it allows uninstallation directly from Add/Remove Programs. Of course, remote installation/uninstallation from the client is still supported in GUI and CLI.

So, if you are interested in top-of-the-line transaction log reader (reading online and detached transaction logs and transaction log backups) and recovery tool (allowing recovery of deleted, dropped, truncated and even corrupted data and database objects from transaction log files or database files) for SQL Server 7, 2000 and 2005 (as of 12/29/2006 the only such tool on the market to support SQL Server 2005) that works equally well on your 32-bit and 64-bit SQL Servers, you may want to download here a 30 day evaluation version of ApexSQL Log 2005.03 and give it a go. While you are at it, maybe you will also want to check out our Universal Studio, packing all 9 of our tools with 1 year of full support and 1 year of major upgrades for just USD 1,999.

The full list of features and fixes of ApexSQL Log 2005.03 follows.

----------------------------------------------------
RELEASE 2005.03.0417
DATE: 29 December 2006
DESCRIPTION: Major Enhancement/Fix release
----------------------------------------------------

Enhancements:
- Added support for Windows 64-bit and SQL Server 2005 64-bit for x64 CPUs (MAJOR ENHANCEMENT)
- Added BLOB support in recovery of deleted rows and rows in truncated and dropped tables when using database sources for recovery (online database files and MDF files) (MAJOR ENHANCEMENT)
- Significantly improved performance of data recovery from MDF files, online or detached (MAJOR ENHANCEMENT)
- Added support for online transaction log and database files on drives mounted as NTFS folders.
- Added support for in-row values for BLOB types.
- Added SERVER_NAME column to Connection Monitor table allowing for filtering by the name of the server where transaction log was created.
- Added xp_ApexSqlLogMonitor_Enable and xp_ApexSqlLogMonitor_Disable extended procedures.
- In generation of UNDO/REDO statements:
- Added SET IDENTITY_INSERT ON/OFF for INSERT operations.
- Added transaction wrapping for DELETE operations.
- Changed preference for construction of WHERE statments to primary key over clustered index.
- For heap tables, added generation of WHERE clause from values of all non-BLOB fields.
- Added skipping of BLOB and TIMESTAMP fields.
- In recovery from detached MDF files, added loading of meta-data from a live database when such is unaivalable in MDF files.
- For recovery on SQL Server 2005, modified algorhitms to improve chances of success in suboptimal recovery scenarios.
- Added SET NOCOUNT ON to recovery scripts.

Changes:
- Last used filter now is stored per server and database.
- Added server name to login information captured by Connection Monitor.

Fixes:
- A problem with conversion of _variant_t to __int64 (MAJOR FIX)
- A problem with memory over-consumption (MAJOR FIX)
- A problem with activation not taking immediate effect on the server side (MAJOR FIX)
- A problem with old ID mapping feature (MAJOR FIX)
- A problem with multiple value switches in CLI (MAJOR FIX)
- Parsing of table names in command line interface (table names can now be specified with within angular brackets)
- A problem with NULL values in WHERE statements.
- A problem with UNICODE table names and table names with quotes in CLI and Recovery Wizard.
- A problem with Connection Monitor with automatic restart.
- A problem with Connection Monitor sometimes failing to flush rows from temporary login table.
- A rare problem with table names on case-sensitive databases.
- A problem with user ID showing as N/A even when it's known.
- A problem with refreshing of transaction log operations grid.
- A problem with NULL/NOT NULL flag in table DDL scripts.
- A rare problem with transaction log reading.
- A rare unhandled NULL exception.
- A rare problem of mistaken table ID for dropped tables on SQL Server 2005.
- An exception in About box when not connected to any server.
- Several errors in captions and messages.
- Several icons in the Log Filter dialog.

Wednesday, November 22, 2006

Freedom

It strikes me as interesting that my last two posts were both, in an indirect way, posts on freedom. First I posted on SQL Server Central being bought by an industry vendor and losing its independence. Then I posted on passing away of Milton Friedman. And I think there is a connection between these two things.

Mr. Friedman believed, as I do, in free and unregulated markets in which this kind of move that Red-Gate made is nobody's business but of the parties involved directly in the transaction. I couldn't agree more. So why are we and others making any noise about it? My answer is simple - to stop the spin and pretenses currently being woven by Red-Gate's spin doctors. Red-Gate bought a site and they bought it for the brand, the membership list and, I believe, the control of information on the site (and probably some other things I didn't think of.) So why not just say so? Because it would be a terrible PR to just go and say "we won't publish negative reviews of our tools, we won't publish positive reviews of the tools of our competitors, we won't allow advertising from our competitors" and so on. Since Red-Gate won't say it - I guess somebody else has to say it.

Milton Friedman has passed away

Milton Friedman died last week. It was big news in U.S. and it was big news here in Chile, one of the countries most influenced by Mr. Friedman's teachings. The country I today live in (and hope to some day call mine not only extra-officially) has been transformed in the last 30 years thanks to free market policies that were implemented first by so called Chicago Boys (a group of Chilean economists educated in the 50s in "Chicago School of Economics") during the regime of Augusto Pinochet and then continued successfully after the transition of Chile back to civilian rule.

I have read several eulogies on Milton Friedman this past week but the one I liked the most by far is in Reason Magazine: It's Milton Friedman's World: We're Just Living Freely in It. There isn't much I can add to this except to say that I personally feel grateful to Mr. Friedman for all that he has done for humanity.

Monday, November 20, 2006

Red-Gate buys SQL Server Central

The title of this blog is "Developing SQL World" but today I feel compelled to talk about something that might be considered an un-development in SQL world. As you may have seen already in the news from SQL industry, Red-Gate has bought SQL Server Central. Before you go on reading, I want to disclose that I'm not free of personal interest here as I'm a partner in ApexSQL LLC, a competitor of Red-Gate.

For the record, I think it's reasonable that guys from SQL Server Central want to sell their site to the highest bidder and I think it's valid for Red-Gate to want to buy such a site (or any other site for that matter.) These are all consenting adults, so nothing to see there. I also do not hold any illusions about the publishing business and believe that owners of the site have the right to publish whatever the hell they want. However, I have to wonder... what will happen to the community to which this site is purportedly dedicated? What will happen to the independent reviews of SQL Server tools? And what about the honesty and transparency of site's moderators and the forums they moderate? Some people from Red-Gate are saying that "SQL Server Central will maintain its independent voice". But knowing some of the tactics that Red-Gate has employed in the past, there is little doubt in my mind that SQL Server Central will become just another cog in their propaganda machinery.

Other people from Red-Gate* are saying that there is no true freedom in publishing anyway so it doesn't really matter. If so, then why buy the site? It matters a great deal more if owner has a conflict of interest than when an advertiser has a problem with content. Everybody knows it, including the entire community, so they are not fooling anybody. And what is this spin that goes from "it doesn't matter" to "nothing will change"? I know they won't call spade a spade but we don't have to be naive about it.

* 2006-11-25, correction: Phil Factor doesn't work for Red-Gate but blogs and writes articles on Simple-Talk, another one of Red-Gate's publishing sites. This information influences the rest of the paragraph but I have left it as it was originally.

At the end, I believe that free market of ideas will prevail. There are other sites and there will be other sites. But this is a loss for community - let's make no mistakes about it.

Thursday, October 19, 2006

Changes in REDO/UNDO in ApexSQL Log

We had a great thread on ApexSQL Log support forum today regarding the issues on REDO/UNDO generation for tables with no unique indexes. Due to this thread we have already made some changes in REDO/UNDO generation (these will be included in the upcoming service release of the product.) Based on the feedback from our users, we have also implemented changes in the way ApexSQL Log handles identity columns for INSERT statements. These two changes together make the need to manually edit generated REDO/UNDO scripts considerably less likely than before.

Saturday, October 14, 2006

DST bug in (some versions of) Windows

Last night I have been hit again with Daylight Saving Time bug in Windows. All my PCs are in the GMT-4:00 Santiago TZ. But for some reason ever since Windows 2000 (if I remember correctly), DST switching for my TZ happens a day before than it really should. So I keep DST turned off on all my PCs... except for the newest one running Windows 2003. For some reason I thought that Microsoft has actually fixed this bug (apparently I was in Daylight Dreaming Time when I installed the OS) so I left DST turned on. At 12AM Windows smoothly switched to 1AM thus producing a cascade of updates (through my own doing) on all other PCs and clocks. Only this morning I remembered that the switch is done on Sunday morning, not Saturday morning (I usually check the official time page for Chile but I forgot to do that last night - such is the power of my belief in Windows ;) Well, no harm done this time, it's just annoying (some of the household members woke up an hour earlier but figured out the situation quickly... after all the TV is never wrong! ;)

UPDATE: Some good news - MS fixed this bug in Vista! I just checked on my RC1 and this is what I get:


This is cool. Finally some transparency in the matter!

Thursday, October 12, 2006

Running .NET 2.0 applications under 64-bit Windows (x64)

By default Visual Studio 2005 compiles .NET executables under "Any CPU" compilation target (the exception is C++/CLI where you have to choose 32-bit or 64-bit target). This allows the same binaries to run as 32-bit or 64-bit binaries depending on the operating system .NET framework is running on. However, if your executable compiled thus depends on 32-bit components (either .NET 1.1 assemblies, 32-bit native DLLs, C++/CLI .NET 2.0 assemblies under 32-bit target, etc.) it will crash when run on 64-bit operating system (and vice versa; if it depends on 64-bit native DLL for example it will crash on 32-bit operating system - but that's not the usual case.) The reason for this is that in Windows 64-bit processes cannot load 32-bit components and vice versa. So what can be done about this?

There are several ways to solve this:
1. Compile all your binaries under "32-bit" target in VS2005. This is the easiest thing to do but it prevents .NET framework from optimizing your code (on the fly of course) to utilize fully 64-bit CPUs. Also, if you are developing assemblies that need to be run in 64-bit processes then this option is out.
2. Convert all 32-bit dependencies to "Any CPU" dependencies. Depending on your situation this can range from easy to impossible to do (e.g. if you are using 3rd party 32-bit native DLLs, it won't help to ask the vendor to recompile for 64-bit or even for .NET - you will need to find a .NET 2.0 library compiled as "Any CPU" to do the same job)
3. Obtain all dependencies as 32-bit and 64-bit versions and install them accordingly. This can also range from easy to impossible to do (e.g. you are using 32-bit native DLLs from a now defunct closed source vendor) but it does allow you to run both managed and native code, if you have such, as fully 64-bit.
4. Move all 32-bit dependencies to a separate 32-bit executable and communicate with it from your 64-bit process through some form of IPC (e.g. shared memory). Yet again this can range from simple to impossible to do (e.g. using 32-bit components in GUI would be a tough to implement through any IPC) But it's a great solution when you are using critical 32-bit components whitout any chance on getting them as 64-bit components. Variant of this solution is out-of-process COM library.

Now that I'm thinking about it, we at ApexSQL in our efforts to bring 64-bit support in all our apps, had the opportunity to implement all four solutions at one time or another. Please feel free to comment on these - I must have missed some alternative solution. I would be most interested in hearing other experiences.

Finally, for those that need to support users running their "Any CPU" applications dependent on 32-bit components on 64-bit operating systems (that's a mouthful!) I recommend reading this article: Setting Platform dependency bits in .Net 2.0. It shows how to use a utility from .NET 2.0 SDK to force application to always run as a 32-bit process.

Monday, October 09, 2006

Using ISNULL() for parametrized filtering

Alex Grinberg over at SQL Server central wrote an article named "Self Eliminated Parameters" on how to avoid building dynamic SQL in queries that filter by more than one optional parameter. The technique boils down to the following use:

(COLUMN_NAME = @PARAM_NAME OR @PARAM_NAME = DEFAULT_VALUE)

and he shows the example for Northwind database:

(Products.ProductName = @prodname OR @prodname Is Null)

I have been using this technique for years but with a twist: instead of doing my own OR operation I leverage T-SQL ISNULL() command. Like this:

Products.ProductName = ISNULL(@prodname, Products.ProductName)

However, not that I'm looking at it I'm wondering if it's not too "cute". In any case from my tests the performance is on par or a tiny bit better than with OR condition.

Friday, October 06, 2006

Open source search engines

If you are anything like me you like leveraging implementations that are publicly available and not re-intenting the wheel all the time. Here are three source code search engines to help you with that:

Koders

Google Code Search

Krugle

Personally, the tool I use is plain vainilla Google but I have used Koders from time to time. Now Google Code Search comes along (it was released just today) so I'll be sure to check that out. I didn't even hear about Krugle before today but it looks slick - I will check it out as well.

While I'm on the subject of use of open source I can't but mention the absolutely best open source C++ library out there: Boost!

Wednesday, August 23, 2006

Video: Recovery without transaction log

I have posted a video showing how to recover deleted, dropped and truncated data without corresponding transaction log in SQL Server using features found in ApexSQL Log. There is no voice in the video but it's easy to follow as I go through all three types of recovery. The database I used in the video is Northwind sample database that comes with (almost) all installations of SQL Server (if you don't have it you can download it here)

Wednesday, August 02, 2006

DO NOT repeat DO NOT try to compete with Brian Lockwood...

...unless you want to lose! Brian and I had a pending 1 on 1 basketball match since... well, since forever it would seem. So yesterday we finally came around to it on his home's court. The end result... well, we had to leave it on 7 to 0 for him 'cause he drove the back of his head to my upper lip! (unintentionaly) My upper lip is all swollen but I'll survive (and hopefully my girlfriend will recognize me when I go back) I wanted to continue the match (we don't just go down in ApexSQL) but Brian called a break.

Just to give you an idea how embarassing that 7 to 0 is, I'm 7 years younger than Brian, about 6 to 8" taller, weight at least 30 lbs more in a pretty good physical shape (probably the best shape I ever was in my life) Not to mention that I'm from Serbia, the greatest basketball nation in the world... well, almost the greatest basketball nation in the world.... But Brian has the game... and a head of steel! So ye be warned.

I'll be wanting a rematch in the next few days. Today I'll just limit myself to shooting some hoops.

Tuesday, August 01, 2006

Chapel Hill Invaded!

It's been a while since I blogged. Beside the work which has been hectic I've been busy with settling in my new house and with preparing for invading our HQ offices in Chapel Hill. Well, I'm here now and it's great to be in the States again - I always enjoy that immensely.

I haven't been in Northern Hempishere summer since 1999 and weather here in North Carolina is much more similar to the weather of my native Belgrade (hot, very humid) than of my lovely Santiago (not as hot, very dry.) So this is a nice change... especially considering that it's winter in Santiago now!

Thursday, July 20, 2006

Moderating comments

I just deleted the first comment spam to appear on this blog. Since I have no plans on wasting much time on moderating the comments I have decided to change the comments policy in two ways:
1. I have enabled word verification option so posting will require entering CAPTCHA displayed by the blog site. This will raise the bar on ease of commenting but I hope it will be acceptable.
2. I have enabled posting comments by non-members of blogspot. This is intended to balance the raised bar on ease of commenting due to the 1st policy change.

On the move...

On Sunday I moved to new house. It's my first house and I'm very happy for it. But only today my ISP connected me back to Internet so I'm finally back working at home! You should have seen me hunting down some very weak WiFi signal the other day at 5AM.... but on the second thought it's probably better that no one saw me!

Saturday, July 15, 2006

Eric Sink on coding addiction

Hi, my name is Ivan, and I'm a coding addict.

Eric's post is really about WPF but he starts with admiting his addiction so I thought I do the same. I have to admit that I feel ill when I don't write enough code during a day. Couple of days like that and I'm ready to go nuts. I remember after my 8th grade (I was 14 years old at the time) I went to a vacations with my family and each day there I wrote Zilog Z80 assembler programs on paper (and of course I read loads of SF) The absolutely first thing I did when we came back home was to turn on my faithful ZX Spectrum and type it all in. I think it was an intro (as demos were called back then) that did some cool image manipulation (or it seemed cool at the time :) IIRC it translated correcly and worked right from the start but I had to tweak it some more to get an even cooler effect (or it seemed cooler at the time :)

Monday, July 10, 2006

Cryptonomicon 2 and 3?!

Yesterday a friend pointed out to me that Cryptonomicon 2 and 3 were available on Amazon. Since Cryptonomicon is one of my favorites books this left me with my mouth watering almost literaly.... until I realized that this is really a publishing strategy imployed by the publisher of Cryptonomicon in Spanish language: splitting one book into three and selling them separately. I heard about this before but didn't remember it immediately. It did however remind me on just how hard it was to come by SF and other reading material (say books on programming?) before the advent of Amazon.com and credit cards (I'm talking about situation in then Yugoslavia in the '80s and '90s) Most of people used to totally depend on the few and sorry translations of local publishers (I was one of the lucky ones - but more on that in another post) From what I hear situation is much better these days exactly because the local publishers these days have to compete with Amazon.com and the likes.

Wednesday, July 05, 2006

Hitting the maximum simultaneously open files at the stdio - Part II

As you may have read in the I part of this post in certain cases we have hit a limit of maximum simultaneously open files in Visual C++ stdio library. Since axLog engine is implemented in Visual C++ and uses iostream library to abstract IO this means that we had to raise this limit somehow and _setmaxstdio helped there. However, the hard upper limit of open files is 2,048 and since during recovery we are opening one file per table, recovery for databases with more than 2,048 tables would fail (actually less than that since there are always other open files like standard streams but you get my meaning). The solution was to use Win32 API for reading files and thus deal with OS and not library limitations. In both Windows 2000 and Windows XP the default number of open user handles per process is set to 10,000 which seemed a much more reasonable limit. And if this limit is ever reached it can be changed as described here and here (as both articles warn this should not be done lightly)

During implementation phase the most important thing to us was keeping IO stream library abstraction intact so that we didn't have to change anything elsewhere in the code (which uses throughout IO stream library interfaces) This left us with only once choice: implementing IO streams classes for files using Win32 API file managment functions. The clearest inspiration came from the handle_stream library that I found researching previous art. We couldn't use this library directly since it didn't support wide characters, it wasn't working correctly in VC++ 7.1 (VS.NET 2003) and its license status was not clear (it seems public domain but we couldn't confirm it) But it was enough to understand that what we really wanted to do is implement IO streams abstraction based on Window's handle concept. This allowed us to move opening of files to a higher level (conceptually) and not complicate further the interface of our IO stream classes (e.g. with all parameters for CreateFile) I will post implementation details in the next post.

Tuesday, July 04, 2006

The Declaration of Independence

My warmest regards and best wishes for their Republic to my US friends and colleagues. I'm neither US citizen nor resident but I'm deeply grateful to be living in the world where political ideals set in the Declaration are prevaling. To the gentlemen that wrote and ratified this document and pledged their Lives, Fortunes and sacred Honour goes my eternal gratitude and respect.

Hitting the maximum simultaneously open files at the stdio

We are working on new version of axLog that will sport some rather important changes in recovery model. Probably the biggest one is switching from single recovery file to multiple recovery files (one per table) We have a customer with immediate need for this so I sent them a modified version that was opening one file per recovery table. And it worked fine until it would suddenly fail to open a file with well formed file name, with no limitations on the directory and with enough free space on the drive. After taking several shots at solving the issue in my own code ("when you see hoofs think horses, not zebras") I finally had a moment of clarity to realize that this could be a library limitation (Log's engine is implemented in Visual C++) on the number of simultaneously open files - so I tested for it. And sure enough by default I couldn't create more than 508 file streams. I checked the results using CreateFile and that of course worked fine for any number of files that I threw at it. I started searching on the net for similar problems and soon found the following function _setmaxstdio from Microsoft Run-Time Library. As you can see this function allows setting "new maximum for the number of simultaneously open files at the stdio level." Great... except that the hard upper limit is 2,048 files and there is no going beyond that. We lucked out with this particular customer as they had to recovery a bit above 1,700 tables. But to solve this generically we had to come up with something else - more on that in next post.

Btw, since this is Microsoft Visual C++ Run-Time library specific limitation, if you use a development tool that uses STDIO from MSVCRT internally - you have this same limitation as well.

Saturday, July 01, 2006

Mounting CD-ROM images in Windows XP

If you ever need to mount a CD-ROM image as a virtual drive instead of burning it, try this unsupported Microsoft utility. The utility supports ISO and several other formats and works great. You can find a short description on how to use it here.

You can also check DAEMON Tools. I haven't tested it but seems to support more formats, works with DVDs and even works on Windows 2000. It's freeware for personal use.

Friday, June 30, 2006

Unix command line utilities for Windows

I'm not a very experienced UNIX developer by any stretch of imagination but I enormously appreciate its command line utilities and just how much they make my life easier. I grew up using DOS command line (and before that ZX Spectrum's line editor!) and to this day the task I most commonly run (Win+R) is "cmd". On top of that, the very first thing I install on a new box is "Open Command Window Here" Explorer context menu option! So even though I got exposed to UNIX relatively late in my career (so far) I quickly learned to love its tools (except vi!) Since I've been exposed to them I had to start using UNIX command line tools on Windows as well. The port I use is called UnxUtils and can be found here. It's not a full port but it works for me. Actually seems to be a set of ports of GNU utilities and as we all know "GNU's Not Unix" but whatever - it works great for me.

Btw, I'm looking forward very much to Windows PowerShell (The Shell Formerly Known As Monad) A very very cool piece of technology (with now a very lame name but that's a lack of geekiness in MS marketing divisions for you) Microsoft is finally getting its game up for command line. I just wish this was released already!

"The Power of the Marginal" by Paul Graham

A new essay by Paul Graham titled "The Power of the Marginal" is up (you can find it here) As always Paul is a joy to read. Even when I don't agree with him (usually I do and very much so) his esseys never fail to make me think through the issues he's writing about.

New info on upcoming version of ApexSQL Log

I have just left a small post on over on our corporate blog about three major features that will be available in the upcoming version of ApexSQL Log (a.k.a. the-only-SQL-Server-2005-transaction-log-reading-tool amongst those in the known)

Monday, June 26, 2006

ApexSQL Log 2005.02 has been released

We have posted the new version of axLog - 2005.02. Here are the release notes for it:
----------------------------------------------------
RELEASE 2005.02
DATE: 26 June 2006
DESCRIPTION: Major Enhancement/Fix release
----------------------------------------------------

Enhancements:

- Added "User Id" and "Login Time" columns to grid.
"User Id" column shows either UID or SID depending on
SQL Server version.
"Login Time" column shows the time of the login of the
connection on which the transaction was made.
- Added selection of available transaction log backups.
- Added selection of heterogenous log sources to GUI.
- Added in Row Details icons indicating columns that are
part of table's clustered index or primary key.
- Added difference viewer for UPDATE operations.
- Added internal viewer of column values for INSERT and
DELETE operations.
- Added column level regular expressions filter for tables
in log operations grid.
- Added support for user defined types (non-CLR).
- Added milliseconds to to/from filters in CLI.

Changes:

- Limited the number of rows recovered by Recovery Wizard
during product evaluation.

Fixes:

- A problem with user filtering (MAJOR FIX)
- A major performance issue (MAJOR FIX)
- A problem with CLR user defined types (MAJOR FIX)
- A problem with IS NULL row filter when used from GUI.
- A problem with reading of aborted transactions.
- A problem with showing application tab in task bar.
- A problem with opening new filtered log.
- A rare problem with remote installation failing on
local server.
- A rare problem with UPDATE reconstruction.
- A problem with remote online transaction log auditing
with files over 2Gb in size.
- A rare problem with server side logs not being found
in system32 folder.
- An unhandled exception thrown by Field Values Filter
with no continuation operator.
- A problem with BLOB fields appearing in UNDO/REDO
statements.
- A problem with REDO/UNDO not taking into account the
primary key on tables with no clustered index.
- A rare problem with row reconstruction.
- A rare problem with dropped table recovery when
recovering from online database data.
- A problem with adding servers with expired trial version
to the server tree.
- A problem with copying from REDO/UNDO tabs to clipboard.
- A problem with closing log window.
- Several minor GUI issues.
This release was all about fixing any problems that were reported in the last 3 and so months since the relase of 2005.01 but we also added some enhancements. Two biggest enhancements are User ID and Login Time columns in the audit grid and support of heterogenous transaction log sources in GUI (it was already suppored in CLI) The next major release will be all about new features and improvements. I can tell you that this next version has been in development for some time now and should be out in Q3. I will blog more on upcoming features soon - there is a lot of stuff already done and much more in the works.

Saturday, June 24, 2006

Recoverying data from large dbs

As you can see from this forum thread some of ApexSQL Log (aka axLog) users are having performance problems with recovery of large dbs from detached (and in this case seemingly corrupted) MDF files. In this case it's a db with 220gb of data split in 4 files. In the current version of axLog (2005.02, which is comming out tomorrow) recovery process makes one pass through MDF files per recovered table. On the other hand we don't offer selection of tables to be recovered. Put these two things together and you get performance problems on very large dbs. We have been aware of this for a while so in next major version we will offer:
  1. Selection of tables to recover.
  2. Output of recovered data for each table into separate files.
This will allow users to select only what they need to recover and have it recovered in only one pass. We will offer this for recovery from detached MDF files and for the upcoming recovery from database backups.

SQL Server Storage Engine blog

Folks from SQL Server Engine Team have been blogging since recently. So far mosts posts are by Paul Randal, Lead Program Manager. The content is really top notch and in these 3 weeks since they started blogging I can honestly say that it has become a required reading for those of us that are interested in internal workings of SQL Server.

Friday, June 23, 2006

Output to console from .NET GUI apps

I have posted on ApexSQL's blog an article on output to console from .NET GUI apps.