# Thursday, June 14, 2007

... and here's a good reason why:

Every time I attempt to search, I get the error "Sorry, Unable to process request at this time -- error 999."  This has been occurring for at least the past 30 minutes.  However, I pinged a friend of mine, Brad Younge, and he can search just fine.  Quite strange!

A quick search via Google (and no, I've never received an "unable to process request at this time" error from Google) shows that a LOT of people have this problem.

So, I can safely say that no, I don't Yahoo!.

Anyone know why this happens?

[Update]

I found an excellent description of this error on Murray's Binary Bit Bucket.  It appears that the most common reason for this error is some sort of bandwidth limiting that Yahoo! put in place on their servers.  The idea is to prevent both DoS (Denial of Service) attacks and automated processes that would pummel their servers with requests.

Wonder why it targeted me?

[Update 2]

About an hour after posting I can now search again.  We'll see if I can purposely cause this to occur again!!

[Update 3]

Yep, I was able to purposely cause Yahoo! to prevent my from issuing searches.  I wrote a little application that does the following:

string url = "http://search.yahoo.com/search?p=wade+wegner&fr=yfp-t-501&toggle=1&cop=mss&ei=UTF-8";
for (int i = 0; i < 1000; i++)
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
   request.Method = "GET";
   request.AllowAutoRedirect = false;
   request.Proxy = WebProxy.GetDefaultProxy();
   request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
   WebResponse response = request.GetResponse();
}

So, evidently Yahoo! doesn't appreciate it if you make 1000 calls in a short period of time.  Interesting!

posted on Thursday, June 14, 2007 4:09:41 PM (Central Standard Time, UTC-06:00)  #    Comments [0]

One of the more manually intense steps in the installation of Commerce Server is setting up the appropriate SQL logins and Database Role User Mapping.  This task can easily take 30 - 60 minutes to complete if done manually.  Futhermore, it's likely that this is the easiest step to make a mistake, which will cause problems for you down the road.

So, to make this process quicker and less prone to errors, I've created an SQL script that you can run against your database.  This script performs two tasks:

  1. Creates the SQL login accounts (e.g. COMPUTERNAME\CatalogWebSvc).
  2. Associates the SQL login accounts to database roles.

Note: this script is only for SQL Server 2005.  SQL Server 2000 uses a different set of database roles.

Take a look the Grant Web Applications and Window Services Access to the Databases section of the Installation Guide for Commerce Server 2007, and you'll see that the number of role assignments is quite extensive.

Rather than pasting the entire SQL script into this post, I am only going to upload the .SQL file.  You can modify this file as necessary in order to adapt it to your environment (e.g. changing the computer name, you may have different names for logins, or don't need services like the direct mailer).

CreateCSLoginsAndAssignRoles.sql.txt (12.54 KB) (just remove the .txt extension)

I hope this helps!

[Update]

I found it useful to create an abbreviated verion of this script that is used for adding new sites.  Whereas the script "CreateCSLoginsAndAssignRoles.sql.txt" is for brand new installations of Commerce Server 2007, the following script is useful for when you add a new site and re-use users and logins.

CreateCSLoginsAndAssignRolesForNewSites.sql.txt (8.42 KB) (just remove the .txt extension)

posted on Thursday, June 14, 2007 10:46:59 AM (Central Standard Time, UTC-06:00)  #    Comments [0]

Holy moly, I've gone script crazy!

Here's another little script that helps with the installation of Commerce Server 2007 (perhaps when I'm all done, I'll consolidate them all into an uber-script).  This script creates the Business Management Administrator Windows groups, which are used to control authorization roles within the Authorization Manager.

This script creates four Windows groups (CatalogAdminGroup, MarketingAdminGroup, ProfilesAdminGroup, and OrdersAdminGroup) and then assigns users to those groups.

Without further ado, here's the script:

' ===================================================================
' Author:      Wade Wegner
' Create date: 06/14/2007
' Description: Automate the creation and assigning of Windows Groups
' File Name:   CreateAndAssignCSGroups.vbs
' ===================================================================

' Set the local computer name. Unlike other examples, use the computer name,
' rather than "."; the AssignUserToGroup method requires the actual name
strComputer = "CS2007"

strCatalogAdminGroup = "CatalogAdminGroup"
strMarketingAdminGroup = "MarketingAdminGroup"
strProfilesAdminGroup = "ProfilesAdminGroup"
strOrdersAdminGroup = "OrdersAdminGroup"
strIISWorkerProcessGroup = "IIS_WPG"

' Run the Load method
Load

' Encapsulates the processing of this script
Sub Load()

   ' Create the windows groups
   CreateWindowsGroup strCatalogAdminGroup, "Catalog administration group"
   CreateWindowsGroup strMarketingAdminGroup, "Marketing administration group"
   CreateWindowsGroup strProfilesAdminGroup, "Profiles administration group"
   CreateWindowsGroup strOrdersAdminGroup, "Orders administration group"

   ' Add any users you desire
   AssignUserToGroup "Administrator", strCatalogAdminGroup
   AssignUserToGroup "Administrator", strMarketingAdminGroup
   AssignUserToGroup "Administrator", strProfilesAdminGroup
   AssignUserToGroup "Administrator", strOrdersAdminGroup

   ' This adds the various service accounts to the IIS_WPG group, so that the
   ' services can run as the identity for IIS app pools
   AssignUserToGroup "RunTimeUser", strIISWorkerProcessGroup
   AssignUserToGroup "CatalogWebSvc", strIISWorkerProcessGroup
   AssignUserToGroup "MarketingWebSvc", strIISWorkerProcessGroup
   AssignUserToGroup "OrdersWebSvc", strIISWorkerProcessGroup
   AssignUserToGroup "ProfilesWebSvc", strIISWorkerProcessGroup

   Msgbox "Complete!"

End Sub

' Create the Windows group
Sub CreateWindowsGroup(groupName, description)

   Set objComputer = GetObject("WinNT://" & strComputer & "")
   Set objGroup = objComputer.Create("group", groupName)

   objGroup.Description = description
   objGroup.SetInfo

End Sub

' Assign the user to the Windows group
Sub AssignUserToGroup(userName, groupName)

   Set objGroup = GetObject("WinNT://" & strComputer & "/" & groupName & ",group")
   Set objUser = GetObject("WinNT://" & strComputer & "/" & userName & ",user")

   objGroup.Add(objUser.ADsPath)

End Sub

Pretty straightforward.  Nothing too fancy or flashy.

CreateAndAssignCSGroups.vbs (1.98 KB)

I hope someone fiinds this helpful!

posted on Thursday, June 14, 2007 9:01:00 AM (Central Standard Time, UTC-06:00)  #    Comments [2]
# Wednesday, June 13, 2007

Okay, so here's another useful script. 

Commerce Server 2007 requires you to give service accounts write permissions to various files and folders.  This script assigns the write permissions to the Catalog Web service, the Temporary ASP.NET folder, and the Windows Temporary folder.  These permission allow you to run the Business User applications through the Business Management Web services.

In order to run this script, you must have the XCACLS.vbs file available.  Learn more about this VBScript here, and download it here.

Here's the script:

' ==========================================================
' Author:      Wade Wegner
' Create date: 06/13/2007
' Description: Automate the task of assigning permissions
' File Name:   AssignCSPermissions.vbs
' ==========================================================

' Declare the users
Dim users(4)
users(0) = "RunTimeUser"
users(1) = "CatalogWebSvc"
users(2) = "MarketingWebSvc"
users(3) = "OrdersWebSvc"
users(4) = "ProfilesWebSvc"

' Run the Load method
Load

Sub Load()

   ' Write permissions to the catalog auth role
   strObject = "C:\Inetpub\wwwroot\CatalogWebService\CatalogAuthorizationStore.xml"
   UpdatePermissions strObject, users(1)

   ' Write permissions to temporary ASP.NET folder
   strObject = "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files"
   For Each user IN users
      UpdatePermissions strObject, user
   Next 

   ' Write permissions to the Windows temporary folder
   strObject = "C:\WINDOWS\Temp"
   For Each user IN users
      UpdatePermissions strObject, user
   Next

End Sub

' Update the permissions of the folder/file
Sub UpdatePermissions(strLocation, strUser)

   Set objShell = CreateObject("Wscript.Shell"
   ' Make sure to have the xcacls.vbs file available. Download from:
   ' http://download.microsoft.com/download/f/7/8/f786aaf3-a37b-45ab-b0a2-8c8c18bbf483/xcacls_installer.exe
   objShell.Run "xcacls.vbs """ + strLocation + """ /G " + strUser + ":XW /E", 2, True

End Sub

* Note that, in order to run this script, you may have to run "cscript.exe /h:cscript" from the command prompt, which changes the default scripting engine from Wscript to Cscript.

After running this script, you will have updated the permissions and you didn't have to do it manually!

AssignCSPermissions.vbs.txt (1.5 KB)

I hope this helps!

posted on Wednesday, June 13, 2007 10:21:33 PM (Central Standard Time, UTC-06:00)  #    Comments [2]

I was browsing one of my new favorite websites, Microsoft's Script Repository, when I came upon the Add "Command Prompt Here" to Windows Explorer" Web page.  This script adds a "Command Prompt Here" command to the Windows Explorer system menu, so that if you select the command, a command window will open up in the same folder.  Nifty, eh?  Yes, I know, this has been around for quite awhile and is nothing new.  But, with a little twist, this can become a lot more useful.

Personally, I never use "cmd.exe" by itself.  I always use the "Visual Studio 2005 Command Prompt", as it has all the useful and fun PATHs already added to it.  So, with a small tweak to the script, we get the following enhancement:

Very handy!

Here's the script (it's so simple that I'm embarassed to share it!):

Set objShell = CreateObject("WScript.Shell")

objShell.RegWrite "HKCR\Folder\Shell\MenuText\Command\", _
    "cmd.exe ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86 /k cd " & chr(34) & "%1" & chr(34)
objShell.RegWrite "HKCR\Folder\Shell\MenuText\", "VS.NET Command Prompt Here"

As I said, pretty simple, but oh so useful!

CommandPromptHere.vbs (.29 KB)

I hope this helps!

posted on Wednesday, June 13, 2007 8:40:11 PM (Central Standard Time, UTC-06:00)  #    Comments [0]

I'll be honest ... I'm lazy.  I hate doing repetitive things over, and over, and over again.  So, while I was going through and installing Commerce Server 2007 on a new virtual machine, I decided to script out the creation of the local user accounts.  Before we get to the script, a little background ...

It is recommended that you create multiple accounts to handle the various roles within Commerce Server (such as the four web services, staging, etc).  In a production environment, these should be created as Domain accounts; however, in development (or the virtual world) you may not have access to, or wish to use, a domain. Consequently, you can create these users as local accounts as well.

Below is a script that will go ahead and create these local users for you (if I have time I'll create a similar script for domain accounts).  Copy the text (or download the link) and save it to a .vbs file.  You should be able to simply double-click the file, and then open up Local Users and Groups under Computer Management to double-check.

' =====================================================
' Author:        Wade Wegner
' Create date:   06/13/2007
' Description:   Automate the creation of CS 2007 users
' File Name:     CreateCS2007LocalUsers.vbs

' =====================================================

' Set the local computer name
strComputer = "."

' Run the Load method
Load

' Encapsulates the processing of this script
Sub Load()

   ' Create the CS 2007 users
   CreateUser "CatalogWebSvc","Pa$$w0rd","Account for running the Catalog Web service"
   CreateUser "CSDMSvc","Pa$$w0rd","Account for running the Commerce Server Direct mailer service"
   CreateUser "CSHealthMonitorSvc","Pa$$w0rd","Account for running the Commerce Server health Monitoring service"
   CreateUser "CSLOB","Pa$$w0rd","Account for running the Commerce Server adapters"
   CreateUser "CSStageSvc","Pa$$w0rd","Account for running the Commerce Server Staging service"
   CreateUser "MarketingWebSvc","Pa$$w0rd","Account for running the Marketing Web service"
   CreateUser "OrdersWebSvc","Pa$$w0rd","Account for running the Orders Web service"
   CreateUser "ProfilesWebSvc","Pa$$w0rd","Account for running the Profiles Web service"
   CreateUser "RunTimeUser","Pa$$w0rd","IIS account for accessing a Commerce Server site or application"

   MsgBox "Complete!"

End Sub

' Create the local user
Sub CreateUser(userName, password, description)

   ' Check to see if the user exists; if so, then skip
   If NOT CheckIfUserExists(userName) Then
      Set objComputer = GetObject("WinNT://" & strComputer & "")
      Set objUser = objComputer.Create("user", userName)

      objUser.SetPassword password
      objUser.FullName = userName
      objUser.Description = description
      objUser.Put "UserFlags", 65600 ' Sets Password Never Expires to TRUE
      ' and sets User Can't Change Password to TRUE
      objUser.SetInfo
   Else
      MsgBox userName & " already exists!"
   End If

End Sub

' Check to see if user exists
Function CheckIfUserExists(userName)

   Set objComputer = GetObject("WinNT://" & strComputer & "")
   objComputer.Filter = Array("user")
   intFound = 0

   For Each User In objComputer
      If lcase(User.Name) = lcase(userName) Then
         intFound =
      End If 
   Next

   If intFound = 1 Then
      CheckIfUserExists = True
   Else
      CheckIfUserExists = False
   End If

End Function

And there you have it!

CreateCS2007LocalUsers.vbs (2.46 KB)

I hope someone else finds this useful!

posted on Wednesday, June 13, 2007 3:24:52 PM (Central Standard Time, UTC-06:00)  #    Comments [5]

As I was preparing a new virtual machine for Commerce Server 2007 (one capable of utilizing the Commerce Server Adapters with BizTalk Server 2006 and Data Warehousing), I ran into a problem when configuring SQL Server Reporting Services.

I had taken a virtual machine that I use as my base installation (e.g. Windows Server 2003 R2, IIS, .NET 2.0, Visual Studio 2005, and the SQL Server 2005 Database Engine) and was following the Commerce Server 2007 Pre-install Requirements and Procedures from the Installation Guide when I encoutered the following error:

The database version (C.0.8.40) does not match your reporting services installation.  You must upgrade your reporting services database.

Couldn't generate the upgrade script.  There is no upgrade script available for this version.

Turns out that that I had installed Service Pack 2 after I originally installed the Database Engine but before I installed Reporting Services.  Consequently, when I went to configure a reporting database under the Database Setup step it complained that the versions were incorrect.

To resolve the problem, I simply ran the Microsoft SQL Server 2005 Service Pack 2 installation again, and updated the Reporting Services instance.  This allowed me to finish the configuration of SQL Reporting Services without any problems.

A simple little problem, but one that had me baffled for a little while (it's probably just the sleep deprivation caused by the little one).

I hope this helps!

posted on Wednesday, June 13, 2007 1:09:32 PM (Central Standard Time, UTC-06:00)  #    Comments [7]
# Monday, June 11, 2007

Katelyn Skye Wegner was born at 1:47 am last Friday (6/8/07), weighing 7 lbs 8 oz and measuring 20.5 inches.  She has short brown hair, blue eyes, and the cutest pouty face I've ever seen.  She's alert, healthy, and in reasonably good spirits given what she's been through.

Teri is well, although tired and sore.  While labor was relatively short, it was intense.  She did a fantastic job.

Katelyn Skye Wegner

More photos can be found here.

posted on Monday, June 11, 2007 8:40:44 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
# Tuesday, June 05, 2007

I often find myself curious as to what my rank/position on Google is, given a set of keywords.  For example, I know that if I search on my name "Wade Wegner" this blog comes up second (my personal site being first).  However, I sometimes wonder where my blog falls for other keywords, such as "commerce server 2007" or "biztalk server 2006".

So, I wrote this little tool to tell me!

This tool allows you to specify your URL (e.g. "http://blog.wadewegner.com/") and some keywords (e.g. "commerce server 2007") and tells you what number you are.  Currently, I have it scan only the first 1000 Google entries.

Useful, yes?

I realize it's a simple interface, but I just quickly slapped it together.

Any one know if this violates any of Googles terms of use?  I hope not!

Enjoy!

posted on Tuesday, June 05, 2007 10:17:21 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
# Saturday, June 02, 2007

Having recently purchased a new server, I found myself configuring and setting up the various virtual machines I use for software development.  After I setup my development virtual machine, I moved some of my projects over to the D drive and double-clicked one of the project files.  After the IDE opened up, but before the project loaded, I received the following dialog message:

NotTrusted

"The project location is not trusted.  Running the application may result in security exceptions when it attempts to perform actions which require full trust."

This is something I've had to setup and configure many times, but since it's not something I do every day I had to go look up the command to add my D drive as a group with full trust.  To accomplish this, do the following:

  1. Select Start -> All Programs -> Microsoft Visual Studio 2005 -> Visual Studio Tools -> Visual Studio 2005 Command Prompt.  This opens up a command prompt with all the Visual Studio program folders in the PATH (type "path" to see).
  2. Type the following command:
caspol -q -machine -addgroup 1 -url file://d:/* FullTrust -name "D Drive"

That's it.  You have now added the D drive to your .NET runtime security policy with the Full Trust permission set.  You will not receive any security exceptions when running your .NET applications.

If you open up the .NET Framework 2.0 Configuration MMC, and browse to My Computer -> Runtime Security Policy -> Machine -> Code Groups -> All_Code, you will see the "D Drive" code group.

I hope this helps!

posted on Saturday, June 02, 2007 3:09:28 PM (Central Standard Time, UTC-06:00)  #    Comments [26]
# Monday, May 28, 2007

Yesterday, I detailed how to setup an Oracle database server on Windows Server 2003 in Oracle for Microsoft Developers, Part I: Installing Oracle 9.2 on Windows Server 2003.  Today, I want to step back  a little, take a look at some of the conceptual differences between Oracle and SQL Server, and then provide steps you can take to setup an Oracle database that you can use within your applications.

You may be saying to yourself, "Why should I care how to setup an Oracle database server and database?  I work with SQL Server, .NET, and could care less!  Let the DBAs concern themselves with Oracle!"  Now, I can't discount your sentiments - I've been there myself!  However, over the years, I've discovered two compelling reasons to take the time to learn more about Oracle: 1) it's always good to have more tools in your tool belt, and 2) getting DBAs to respond to your requests can occasionally be a long and arduous process.  If you have the know-how and acumen to setup an Oracle environment for yourself, I believe you'll find your ability to deliver on your development projects will be greatly enhanced.

Okay, that said, let's take a look at some important Oracle concepts.

Oracle Concepts

Tablespace

The Oracle tablespace is the lowest logical layer of the Oracle data structure. The tablespace consists of one or more datafiles, which are typically files on the operating system filesystem.  The space specified for a tablespace is allocated on the filesystem, but is not used until somebody creates a file or saves some data.

Think of the Tablespace as functionally equivalent to the data file (MDF) and log file (LDF) in SQL Server

Schema

A schema is a collection of objects associated with the database.  These objects are abstractions or logical structures that refer to database objects or structures. Schema objects consist of such things as clusters, indexes, packages, sequences, stored procedures, synonyms, tables, views, and so on.

I find it difficult to exactly correlate an Oracle schema to a concept in SQL Server.  I suppose it would be safe to say that a schema is similar to an object within SQL Server (such as a table or view) that's attached to a particular owner (such as dbo).

Data Dictionary

The data dictionary is a set of tables Oracle uses to maintain information about the database. The data dictionary contains information about tables, indexes, clusters, and so on.

The data dictionary is similar to the system tables that exist within SQL Server.

Database

The physical layer of the database consists of three types of files:

  • One or more datafiles
  • Two or more redo log files
  • One or more control files

The logical layer of the database consists of the following elements:

  • One or more tablespaces.
  • The database schema, which consists of items such as tables, clusters, indexes, views, stored procedures, database triggers, sequences, and so on.

The database is divided into one or more logical pieces known as tablespaces. A tablespace is used to logically group data together. Tablespaces consist of one or more datafiles. By using more than one datafile per tablespace, you can spread data over many different disks to distribute the I/O load and improve performance.

As part of the process of creating the database, Oracle automatically creates the SYSTEM tablespace for you. Although a small database can fit within the SYSTEM tablespace, it's recommended that you create a separate tablespace for user data. The SYSTEM tablespace is where the data dictionary is kept.

Administrative accounts

  • INTERNAL - The INTERNAL account is provided mainly for backward compatibility with earlier versions of Oracle, but is still used for key functions such as starting up and shutting down the instance.
  • SYS - Automatically created whenever a database is created. Used primarily to administer the data dictionary. This account is granted the DBA role, as well as CONNECT and RESOURCE roles.
  • SYSTEM - Automatically created whenever a database is created. This account is used primarily to create tables and views important to the operation of the RDBMS

Administrative roles

  • DBA
  • OSOPER - Assigned to special accounts that need OS authentication, which can be done only when the database is open; allows users to run commands like STARTUP and SHUTDOWN, and ALTER DATABASE
  • OSDBA - OSOPER plus additional permissions such as CREATE DATABASE or ADMIN OPTION

Oracle instances

An Oracle instances is identified by a SID (system identifier), and is functionality equivalent to a SQL Server database.

(I must credit the following Web sites for much of the previous content, as I certainly did not know much of this until I visited: http://vsbabu.org/, http://www.fredshack.com/, and http://www.rocket99.com/.)

Setting Up Your Oracle Database

Now that we've provided a high-level discussion of Oracle, and some of the differences from SQL Server (and yes, I realize that this is not a comprehensive analysis or comparison - you can find plenty of those elsewhere), let's look at some of the steps you need to take in order to work with Oracle.

1. Install the Oracle database server.  See Oracle for Microsoft Developers, Part I: Installing Oracle 9.2 on Windows Server 2003 for detailed steps on installing Oracle 9.2.

2. Use SQL*Plus and log into the Oracle database server.  I prefer to login as "system" when defining tablespaces, users, etc.

3. Create a new tablespace.  The following script creates a tablespace called "ts_name" at the root of the drive that Oracle is installed on (e.g. C:\), has logging turned on, a default size of 32 MBs that automatically extends to 2 GBs.

create tablespace ts_name
  logging
  datafile '/ts_name.dbf'
  size 32m
  autoextend on
  next 32m maxsize 2048m
  extent management local;

4. Create a new user (or user schema) that has access to this tablespace.  The following script creates a user named "alfred" with a password of "pword".

create user alfred identified by pword;

You can also define the default and temporary tablespace for this uses, as well as the quota.  Note: you can specify a numeric value for the quota (such as 10) or unlimited, which defines an unlimited quota.

create user alfred identified by pword
  default tablespace ts_name temporary tablespace ts_name quota unlimited on ts_name;

Failure to define a quote for your user within the tablespace will prevent the user from actually writing data into the database.  Make sure you don't miss this step!

5. Grant the user privileges, such as creating a session, table, views, etc.

grant create session to alfred;
grant create table to alfred;
grant create view to alfred;
grant create trigger to alfred;
grant create procedure to alfred;
grant create sequence to alfred;
grant create synonym to alfred;

6. Close SQL*Plus, cause you're done!

At this point you should be set!  You've created a tablespace, a user, and given the user the privileges necessary to create tables, procedures, and more!

Realize again that I am not an Oracle DBA, and I would never think about configuring a production environment for Oracle.  The purpose of this blog is to familiarize Microsoft developers with Oracle, as it's very likely you'll have to work with it sooner or later.  The ability to setup and define your development environment should not be underrated and marginalized, as it will not only help you with your delivery, but also make you more marketable!

Best of luck!

posted on Monday, May 28, 2007 7:35:19 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
# Sunday, May 27, 2007

There comes a time in every Microsoft developers life that he/she will have to work with an Oracle database.  I hope that you find this to be a good experience; my experiences have thus far been a mixed bag, mostly because of my own ignorance.  Nevertheless, I've picked up a few things here and there, and figured that it would be worthwhile to post some of the top tips and tricks I've learned over the years.

In this post, I want to discuss how to setup an Oracle database server.  I am going to follow-up with a post on how to create an Oracle database.  I use those terms loosely, because the terminology within the Oracle world is different from the SQL Server world.  I promise I'll do my best to get it right, but chances are I'll make a mistake or two - please feel free to point out my gaffes.

So, without further ado, let's see go through the steps needed to install Oracle 9.2 (sorry, I don't have 10+) on Windows Server 2003 32-bit (note: there are many differences between 32-bit and 64-bit Windows, and my experience has shown that the following steps will not work in 64-bit Windows.  Perhaps I'll follow-up in the future if I figure out how to get it to work ...)

  1. Secure a copy of Oracle 9.2.  I assume that you have a copy available through work.
  2. Start the Oracle Universal Installer.  Click the Next button.


  3. Confirm the installation destination (you'll need at least 3 GBs available for the installation) and click Next.


  4. Select "Oracle9i Database 9.2.0.1.0", and click Next.


  5. Select "Enterprise Edition", and click Next.  (Why?  Well, I don't have any compelling reason here - it's just what I've used to get things working ...)


  6. Select "General Purpose", and click Next.


  7. Leave the Port Number as 2030, and click Next.


  8. Define the Global Database Name.  I choose "orcl", but feel free to choose whatever.  Make sure that the SID is unique - it's probably easiest to make it the same value as the Global Database Name.  Click Next.


  9. Specify the Directory for Database Files.  I choose to leave the default value.  Click Next.


  10. Unless you have a reason to change it, leave the "default character set" selected, and click Next.


  11. On the Summary screen, click Install.  This installation process will take a little while.  Be patience.  Read one of my other posts, while you're waiting.


  12. The next screen to appear is the Database Configuration Assistance.  On this screen, specify the SYS and SYSTEM passwords.  Do NOT click OK yet.


  13. Before you click OK, click the Password Management Button.  Specify passwords for SYS, SYSTEM, and DBSNMP (SCOTT too, if you'd like).


  14. Once you get to the End of Installation, click Exit.


  15. After you click Exit, the Oracle Enterprise Management Console will start.  Check and make sure you can log into your Oracle database server by expanding databases, right-click ORCL (or whatever you called it) and click Connect.  Enter the "system" Username, and change Connect as from "Normal" to "SYSDBA".  Click OK.


  16. If you were able to successfully connect to the Oracle database server, then restart Windows.  There's a number of reasons to do this, including updates to the PATH environment variable.

And that's it!

Now, I realize that this installation procedure pretty much accepts the defaults, and clicks next.  However, at least you have the benefit of knowing that this procedure does work, and will prepare you for the next step: configuring Oracle databases, tablespaces, users, and user access.

Best of luck!

posted on Sunday, May 27, 2007 9:34:04 PM (Central Standard Time, UTC-06:00)  #    Comments [0]

Have you ever received the following error when you tried to access a UNC path?

XXXXXXX is not accessible. You might not have permission to use this network resource. Access is denied.

I found that if I logged into some of our production servers, I was unable to connect to a UNC path on the file server (a different machine), even though I was able to access these resources locally.  The only difference I could find was that in order to access the production servers I had to use a different login than my local login (e.g. my local login had acess to the file share, but not the login I used for the production boxes).  And, as I do not have administrative rights in this domain (nor were any administrators available to assist) I couldn't change the rights to the file server to give my production user access.

So, I needed to find a way to access the file share as my local account.  Unfortunately, I couldn't log into the production server with my local account (a good thing, actually), and I couldn't get Explorer.exe to runas my local account while on the server.

Then I decided to try and mount the share as a driver.  Here are the steps I took:

  1. Opened up My Computer, the click Tools --> Map Network Drive ...
  2. For the folder, specify your UNC share.  Then, instead of clicking finish, click the "Connect using a different user name".


  3. In the Connect As screen, specify your local account that has the ability to access the UNC share.


  4. Click OK, then Finish.

These steps mount the UNC share using your local account.  As a result, I was able to access the file server on the production server, which I previously hadn't been able to do.

If you find yourself in a similar situation, these steps may provide you with a temporary work around.

I hope this helps!

posted on Sunday, May 27, 2007 1:30:19 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
# Thursday, May 24, 2007

I awoke to see a very encouraging post from Ryan Donovan on the future of Commerce Server.

Some key points to take away:

  • Microsoft is committed to their e-commerce platform, and has no plans to roll Commerce Server into another server product (for those of you who follow, there has been a lot of speculation and rumors about Microsoft not being fully committed to Commerce Server - this really helps to dispel those rumors).
  • Microsoft plans to provide "successors for the current Commerce Server SKUs"
  • The standard support life cycle for Commerce Server 2007 ends 07/12/2011.
  • Microsoft plans to find more and better ways to align Commerce Server to major product revisions in the Windows Server, SQL Server, .NET Framework, and BizTalk Server spaces.
  • The team also plans to add incremental updates and features "on an interim a la carte basis".

So, as I said, very encouraging.

Some things I'd like to see in future releases ...

  • A fully managed stack; get rid of COM dependencies
  • Replace pipelines with Windows Workflow
  • Replace DTS tasks with SSIS
  • There's more, but it's early and my brain is not working yet ...

Given the major enhancements Commerce Server 2007 has made over previous versions, I'd say we can expect to see a lot of great things from the Commerce Server team.

Best of luck!

posted on Thursday, May 24, 2007 6:58:55 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
# Wednesday, May 23, 2007

As a consultant, I often have to spend a great deal of time diagnosing issues that are confronting my clients.  Over the years I've used some of the tools available from Sysinternals, but I honestly never put a lot of energy or time into really learning to use them.  On my most recent project, however, I've found them to be tremendously helpful, and I'm now a confirmed believer!

There are a number of useful tools available, and I don't profess to have used or mastered them all.  There are a few, however, that I strongly encourage you to familiarize yourself with:

  • Process Monitor - This montioring tool monitors the file system, Registry, processes, threads, and DLL activity in real-time.  Ever need to track down where data is getting written?  Ever wonder why you try to write or read from the Registry and receive errors?  This utility will help you track that down.  Process monitor is a combination of two older tools (Filemon and Regmon), and adds a whole slew of additional features such as rich and non-destructive filtering, comprehensive event properties such session IDs and user names, reliable process information, full thread stacks with integrated symbol support for each operation, simultaneous logging to a file, and more.

  • Process Explorer - Find out what files, registry keys and other objects processes have open, which DLLs they have loaded, and more. This utility will even show you who owns each process.  This tool is excellent for tracking down programs or processes that have locked files and directories.  It also has some powerful search capability that shows you which processes have handles opened or DLLs loaded.

  • BlueScreen Screen Saver - Okay, so this isn't a monitoring tool, but it's part of the Sysinternals suite and it's great!  Just load this up as the screen saver for your favorite person at work, sit back, and enjoy the show!

Take the time to explore the various tools that are available on the Sysinternals Web site.  There are a lot of tools that will make debugging and problem solving less of a hassle.

Best of luck!

posted on Wednesday, May 23, 2007 7:47:56 PM (Central Standard Time, UTC-06:00)  #    Comments [2]