Monday, May 05, 2008
I recieved the following question yesterday, and I have had it before, so I decided to blog the answer.

Hiya James

I am not sure if you would be willing to help answer a question on sharepoint?

Sounds really stupid but just using MOSS and I have not had to deal with any SQL database ... so where

can I actually view it or find it?

Thank you

Ray



First up, it's far from a stupid question!  especially is Windows Internal Database (a.k.a SQLEE is used).  Let me explain:

So, there are a couple of choices for setting up the database:

1. Windows Internal Database

It is really easy to set the system up with this option, and frankly, I don't like it for my systems.  The reason I don't like it is because it splits my DR plan.  

For every other application I have a nice unified backup & recovery strategy in SQL Server Management Studio.  Using WIDB for Sharepoint introduces exceptions to the rule, and from my experience, the systems with the most moving parts are the ones that are most likely to fail under pressure, and DR can have pressure!  Of course YMMV.

What is Windows Internal Database?  It is an instance of SQL Server Express configured to be accessed only by services over named pipes, although it is possible to connect to it with SQLCMD or Management Studio Express.  It works just as well as SQL Express, but I feel like I am never fully in control of it.

If you are using SQLEE for your Sharepoint installation and you want to have a look at the database, I'd suggest the following:
  1. Backup your Sharepoint instance using Central Administration
  2. Setup a test instance of Sharepoint using SQL Express
  3. Restore your Sharepoint backup into your new test instance
  4. Use Management Studio to work on your new test database

2. Using "real" SQL Server. 

This is a much easier case.  Log into the Sharepoint Central Admin section and view the content database settings.  That will give you the server & database names that you can connect to with Management Studio.  (please work on a copy, not the production database)

...but...

...is it wise to get hands-on with the MOSS/WSS database?

Well yes, for general curiosity to see how the Sharepoint team decided to implement a system where entities can be so customizable, there is some good, subtle design to learn from.

However for reporting and other fiddling, I'd suggest not.  Once you see the tables I think you will agree that it was not a design goal for the developer community to be accessing them directly.

A good alternative would be learning some CAML or the Object Model first and see if you can leverage that.  Those ways to access the data abstract out the complexity of the physical database and are quite user friendly.

How to setup Sharepoint to use SQL Express rather than SQLEE/WIDB?

It is easy and free to set up a testing environment for Sharepoint:

All you need to do is download the following:

How to setup Sharepoint to use SQL Express rather than SQLEE/WIDB - Part II, The Install...

When installing Sharepoint, choosing Basic/Stand Alone will leave you with a WIDB install of Sharepoint.  To install a it with a "regular" SQL Server, or with SQL Express, first choose Advanced from the installation wizard:





When asked if you want to create a Web Front End server, or a Stand-alone install, choose Web Front End - even if it is your only server:



Continue the install and launch the Sharepoint Product and Technologies configuration wizard.   Choose to create a new server farm.  Enter the database server and database name settings into the wizard when prompted...




Now you have configured Sharepoint to not use WIDB/SQLEE.

If you have already installed SQLEE and now wish to remove it, please see my prior post on uninstalling SQLEE.
Monday, May 05, 2008 12:19:32 AM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [1]  | 
 Saturday, May 03, 2008
I offer the following evidence:




For those not familiar with the idea of a Googlewhack, Urban Dictionary explains it is:

a combination of two words that when searched through the popular search engine "google" only give one result.

Wikipedia goes into more depth, yet is silent on the topic of spelling.

I argue that stsadmin, or it's correct form, stsadm are not words, so can't be typos - and as such I'm claiming it!  :-)
Saturday, May 03, 2008 7:44:25 PM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, April 25, 2008
This is just a quick note with some linkage for anyone who is looking for an easy way to make Sharepoint look less like Sharepoint ;-)

Some sample master pages have been released and are available for download.   They are good examples for basing new master pages on, but also look good too!   For screen shots see the post on the Sharepoint Product Group blog.

I'm using the "Clarity" one now and like it

Also, check out the Templates available at the MOSS site.

Listening to:  ANZAC Day pipes and drums

Friday, April 25, 2008 4:56:26 PM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [0]  | 
 Tuesday, April 01, 2008
This is the first in what I hope will become a series on the new language features in C# 3.0 used in .NET 3.5 / Visual Studio 2008.

One thing I am not intending to cover is LINQ.  Just because the blogosphere has been buzzing with LINQ articles since the early days of "Orcas".  And with good reason I hasten to add!

Where I am starting is with the var keyword.

VB6 veterans will remember the Variant type.  A Variant could contain anything, even Object.  While this was sort of useful, my memory of it is as a synonym for:  I can't be bothered, lets just stick it in a Variant and deal with it later.

There was also a performance impact of using the special Variant type, they were large in memory and have an overhead of extra runtime checking that added up; like when assigned inside a loop for example.  They were also a special case in their un-assigned form, taking on the value Empty (test with IsEmpty()) vs Nothing (test with Is Nothing). 

So when I saw var added to C# I raised my eyebrows in the way a Fed might, when the beagle sits quietly next to your suitcase at the airport.

Most of the time you see it in the samples, it is used when returning an Anonymous Type from a LINQ query.  And this is the clue!  var is not itself a type, but instead it is a signal to the compiler to infer the type of an operation, and substitute in the required type.  It does not even have to be an Anonymous Type.  Consider the following simple example:

var result = 10 / 2.0;
Console.WriteLine(result.ToString());

By the time this code is compiled, var is replaced with double.  In fact, the Intellisense on result will be correct for it being a double.

To confirm this, looking at those lines of the assembly in Lutz Roder's Reflector show the following after disassembly:

double result = 5.0;
Console.WriteLine(result.ToString());


OK, so var can be used independant of Anonymous Types, but why would you want to be less explicit in typing your variables?  Consider the following fictitious example:

DatabaseRequestService req = DatabaseRequestService.CreateFrom(value);

And compare it with the equivalent line using var:

var req = DatabaseRequestService.CreateFrom(value);

Here, var leads itself to much more readable syntax with the same typing, Intellisense, and everything else!

Listening To:  Róisín Murphy

Tuesday, April 01, 2008 9:25:00 PM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [0]  | 
 Tuesday, March 25, 2008
I just wanted to add a note before my next posting to acknowledge that I know this blog has been slow of late.

This isn't because I am bored of it or anything, but it does relate to my own personal rules for blogging, and this might be a reasonable time to mention them :-)

Rule Zero:  Keep it interesting.  Believe it or not, I try and keep this blog interesting.

Rule One: Don’t blog about blogging.  The blogosphere can be one huge echo chamber at times.  If you must inform the world that someone else made a great blog post, consider Twitter.

NB: When I do post linkage I put it in the MLP category, which owes its name to the MLP (a.k.a Mindless Link Propagation) section on the internet culture stalwart Kuro5hin (i.e.  “corrosion”)

Rule Two:  No proprietary information.  This is what I’m talking about today.

Recently, I started a company, and have been working on some IP in the multitenant and SharePoint space.  These are really interesting to me, but there has been a bitlot of business strategy & architecture stuff, and that has to stay internal.

Hope this makes sense, and I really welcome comments on this topic if anyone feels like they have something to share.

Listening To: Ani DiFranco, Canon
Tuesday, March 25, 2008 9:57:46 PM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [0]  | 
 Wednesday, March 05, 2008

One of the things I miss from my Unix/Linux days is Grep.  Previously I have tried things like Cygwin, but was never quite satisfied.  I am quite excited about PowerShell and am always trying to get more PS> in my life :-)

I'm using Powershell almost daily to replace Grep.

To start, this is all based on the Get-ChildItem cmdlet.  The best way to think about Get-ChildItem is it does what the Dir command did in DOS.  One important difference is it is not just for files, and can be used to return all items in a location - and it is up to each provider to decide what a location & item means to it!

For the PowerShell n00bie, you can just use cd around the filesystem and when you type dir, you are really running Get-ChildItem.  In fact when you type cd you are really running Set-Location.  For a full list of aliases for common commands, run Get-Alias.

To search in file names:

The following command searches for .aspx & .ascx files in the current directory that have the word "metro" in the filename.

PS > Get-ChildItem -Include *metro*.as?x

To search inside text files:

The following command searches inside .aspx & .ascx files in every subdirectory that have the word "metro" in the filename, and has the word "train" inside the file.

PS > Get-ChildItem -Recurse -Include *metro*.as?x | Select-String -Pattern train

You are also able to add the -CaseSensitive parameter to the end of the Select-String command, by default it will search case insensitive.

NB:  I have used the full names of the parameters of the commands.  This may look clunky, but:

  1. I wanted the examples to be clear, because this is a blog :-)
  2. The Tab-Completion feature works for parameter names so they are not hard to type
  3. You can use the smallest number of letters that identify a parameter.  For example, if a cmdlet accepts a -Recurse and a -Record param, you would only need to use -Recu and -Reco respectively.

Update: A lot of parameters accept an array as input.  The syntax for listing these is as a comma seperated list.

An example where this applies to our example is searching through multiple file types, i.e. .aspx and .cs.

The following example searches both .aspx/.ascx files and .cs files with the word "metro" in the filename.

PS > Get-ChildItem -Recurse -Include *metro*.as?x,*metro*.cs

Listening To:  Wicket Beat Sound System, Inner Styles

Wednesday, March 05, 2008 10:25:19 PM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, February 15, 2008

Out of the blue I got this message from iTunes today:

iTunes has detected an iPod in recovery mode.  You must restore this iPod before it can be used with iTunes.

Fair enough, foo happens, life goes on.  Or so I thought.  When you restore your iPod and reboot it, the same message comes back!  Over and over.

The solution, it turns out according to the collective wisdom of the blogs, is to change the drive letter of your iPod in Computer Manager.

Mine had, for reasons not yet understood, changed from J: to H: - which was in use as a network-mapped home drive.  This conflict was being reported in iTunes as an iPod in Recovery Mode.

It seems like all I do these days is download iTunes updates, and the messages are not getting any better when it goes belly-up.

Apple, this is turning into a one way relationship!

Listening To:  Zephyr Timbre, Absrtakt Fusion

Friday, February 15, 2008 12:57:52 PM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [2]  | 
 Tuesday, February 12, 2008
Previously I had been using the (formally "Katmai") SQL Server 2008 CTPs that were distributed through MSDN as VHD files ready for Virtual PC.  But today with the arrival of the November CTP (CTP 5) DVD I actually got around to the installation.

I had no problem with the hardware requirements and the install went successfully.  I screen caped the interesting bits as I went...

The Launcher.  First up there are some improvements to the install launcher with all the important stuff easy to find.



The Configuration Check screen is as you would expect based on SQL Server 2005.



An interesting thing to note about the Feature Selection screen is as you add and remove features the remaining steps adjust accordingly



I've skipped the Instace Configuration screen because it is just as you would expect, however the Service Accounts page has been improved with some secure defaults and it guides you towards secure choices. 



Again I have skipped the Instance Configuration because it is much as you would expect.  The Database Engine Configuration screen is again good at guiding you towards good choices.  Interestingly TempDB location is included which is nice.  Always good to have TempDB on seperate IO if possible.



Analysis Services Configuration is much the same as Database Engine Configuration, but nice to see SharePoint integrated mode is available on the Reporting Services Configuration step.  Historically this use to be some black magic.  I'm looking forward to testing out this option in Katmai in greater depth later.



The rest of the steps are much as you would expect based on SQL Server 2005 and not too interactive, so I have saved you the bandwidth. 

And there you have it!  Play time again for me :-)

Listening To: Air - Premiers Symptomes

Tuesday, February 12, 2008 9:44:24 PM (AUS Eastern Standard Time, UTC+10:00)  #    Disclaimer  |  Comments [0]  |