in

SharePoint Blogs

The Best Place for SharePoint-related Blogs

echef

From the cluttered (and clustered) brain of Josef Nielsen... A great place for Food, Friends, and... uh... SharePoint of course!

October 2007 - Posts

  • Full site customiztion...

    A very interesting topic in that is coming up more and more today.  A customer wants to customize SharePoint, not just the user viewed screens, but also the administrative (Application Pages) functions.  In many cases, creating customer list templates and web parts to view those lists can fullfill the need to customized the consumable portions of a site, and a bit more effort can be put in to customizing the data entry interfaces that the site's content editors will interface with frequently.

    The challenge is that last bit.  In "Teams" or ad-hoc collaboration site generation, it is just not practical to "Wrap" the application pages in that fashion.  We ran in to this very issue, and ended up scrapping (or at least temporarily tabling) a good portion of work for this very reason.  If you haven't read Cameron Moll's Blog Authentic Boredom (He is our lead designer for this effort), he posted a great article there on this problem.

    The bit that really chaps my hide, is that we initially heard that what we were trying to do was fairly unique, and others were not trying to do this.  Since then, this has appearently become a much bigger request and frustration to multiple people.

    If you've ever heard the MS party-line on modifying system/app files (ie, layouts folder items), you'll get a real kick out of thisEric Shupps posted a great article about the new KB944105 (Customizing app pages in the layouts folder).  Yes, you read that right.  Apparently it is now accepatable to do what we are not supposed to do.  Never mind the fact that there are about 400 aspx files in that folder to skin/brand.  It will be interesting to see where this conundrum leads us.

     

  • Pulling site collections details via direct SQL query

    I certainly don't recommend making changes to your content DBs directly in SQL, but there's no harm to be had pulling data from the DB's.  I found that this was the easiest way to poll data about all farm content DBs and Web Apps listed by Site Collection.  Hope you find this useful!

    /* SiteReport.sql
    written by Josef Nielsen
    September 2007 
     
    NOTE: You must create a linked server if you use multiple SQL server to house you content DBs
    */ 
     
    BEGIN
    DECLARE @ts1 varchar(1000), @ConfigDB VARCHAR(128) 
     
    -- Set your Config DB Name here if it is different
    SET @ConfigDB = 'SharePoint_Config' 
     
    -- This creates a temp table to hold the list of content DBs referenced by the Config DB
    CREATE TABLE [#TempDbList]
          (
          DBname VARCHAR(128),
          DBInstance VARCHAR(128),
          DBServer VARCHAR(128)
          ) 
     
    -- Populate the temp table with content DBs
    SET @ts1 = 'INSERT INTO #TempDbList
                      SELECT [DbName].[Name] AS ''DatabaseName'',
                            [Instance].[Name] AS ''DatabaseInstance'',
                            [Server].[Name] AS ''DatabaseServer''
                      FROM '+'['+@ConfigDB+']'+'.[dbo].[Objects] AS [DbName]
                            LEFT JOIN '+'['+@ConfigDB+']'+'.[dbo].[Objects] AS [Instance]
                                  ON [DbName].[ParentId] = [Instance].[ID]
                            LEFT JOIN '+'['+@ConfigDB+']'+'.[dbo].[Objects] AS [Server]
                                  ON [Instance].[ParentId] = [Server].[Id]
                      WHERE [DbName].[Properties] LIKE ''%SPContentDatabase%''
                            AND [DbName].[Properties] NOT LIKE ''%WebApplication%'''
    EXEC (@ts1) 
     
    DECLARE @ts2 VARCHAR(1000) 
     
    --This creates a temp table to hold the end results of the Site Collection lists from all Content DBs
    CREATE TABLE [#TempSiteList](
        FullURL VARCHAR(128),
        WebApp VARCHAR(128),
        DBServer VARCHAR(128),
        DBName VARCHAR(128),
        Megs BIGINT,
        Quotamax VARCHAR(128),
        Quotawarning VARCHAR(128),
        Userquota VARCHAR(128),
        Siteowner VARCHAR(128),
        OwnerEmail VARCHAR(128),
        Sitecreationdate VARCHAR(128),
        Lastcontentchange VARCHAR(128)
    ) 
     
    -- Create a cursor to walk through each content DB
    DECLARE DB_cursor CURSOR
          FOR
                SELECT [DBServer], [DBInstance], [DBName]
                 FROM [#TempDbList] 
    OPEN DB_Cursor
    DECLARE @vDBServer VARCHAR(128)
    DECLARE @vDBInstance VARCHAR(128)
    DECLARE @vDBName VARCHAR(128)
    FETCH NEXT FROM DB_cursor INTO @vDBServer, @vDBInstance, @vDBName
    WHILE @@FETCH_STATUS = 0
          BEGIN
          DECLARE @DBv1 VARCHAR(2000) 
     
    -- Add a backslash for DBServers that are not default instances
          DECLARE @slash VARCHAR(128)
          IF @vDBInstance = ''
                SET @slash = ''
          ELSE
                SET @slash = '\' 
     
    -- Script to insert Site Collection details to the temp site summery table
          SET @DBv1 = 'INSERT INTO [#TempSiteList]
                SELECT [Webs].[FullUrl],
                [ConfigObjects].[Name] AS ''WebApp'',
                (SELECT ''' + @vDBServer+@slash+@vDBInstance + ''') AS ''SQL Server'',
                (SELECT ''' + @vDBName + ''') AS ''Content DB Name'',
                (([Sites].[diskused])/1024)/1024 AS ''Megs'',
                (([Sites].[diskquota])/1024)/1024 AS ''Quota max'',
                (([Sites].[diskwarning])/1024)/1024 AS ''Quota warning'',
                (([Sites].[userquota])/1024)/1024 AS ''User Quota'',
                [User].[tp_login] AS ''Site Owner'',
                [User].[tp_email] AS ''Owner E-mail'',
                CAST([Sites].[timecreated] AS char(30)) AS ''Site Creation Date'',
                CAST([Sites].[lastcontentchange] AS char(30)) AS ''Last Content Change''
          FROM
                ['+@vDBServer+@slash+@vDBInstance+'].['+@vDBName+'].[dbo].[sites] AS [Sites] WITH (NOLOCK)
                LEFT JOIN ['+@vDBServer+@slash+@vDBInstance+'].['+@vDBName+'].[dbo].[webs] AS [Webs] WITH (NOLOCK) ON [Webs].[siteID] = [Sites].[Id]
                LEFT JOIN ['+@vDBServer+@slash+@vDBInstance+'].['+@vDBName+'].[dbo].[userinfo] AS [User]  WITH (NOLOCK) ON [User].[tp_SiteID] = [Sites].[Id]
                LEFT JOIN '+'['+@ConfigDB+']'+'.[dbo].[SiteMap] AS [ConfigSiteMap]  WITH (NOLOCK) ON [ConfigSiteMap].[Id] = [Sites].[Id]
                LEFT JOIN '+'['+@ConfigDB+']'+'.[dbo].[Objects] AS [ConfigObjects]  WITH (NOLOCK) ON [ConfigSiteMap].[ApplicationID] = [ConfigObjects].[Id]
          WHERE
                [Webs].[ParentWebId] IS NULL
                --AND [User].[tp_SiteID] = [Sites].[Id]
                AND [User].[tp_SiteAdmin] = 1
                AND [User].[tp_id] = 1'
          EXEC (@DBv1)
     
    FETCH NEXT FROM DB_cursor INTO @vDBServer, @vDBInstance, @vDBName 
     
    END 
     
    CLOSE DB_cursor 
    DEALLOCATE DB_Cursor 
     
    END 
     
    -- Cursor is closed and released, ad now we select the results of the scan
    SELECT * FROM #TempSiteList ORDER BY [WebApp], [FullURL] GO 
     
    -- Clean up to get rid of those temp tables
    DROP TABLE [#TempDbList]
    DROP TABLE [#TempSiteList] 
  • Good bye Hard Drives... Hello ioDrive!

    A couple of friends of mine, David Flynn and Rick White of Fusion-IO (http://www.fusionio.com), demoed their new product the ioDrive at DEMOfall a few days ago... Very awesome stuff!  It is a Silicon-Based NAND Flash storage solution.  It is a PCIe (x4) card that currently holds up to 640GB of solid state NAND Flash storage with a built in controller. Plans for next year will expand it to 1.2TB.

    640GB ioDrive from Fusion-IO 

    It's got 160 parallel channels to the flash chips and can do about 100,000 IOPS per card, with sustained reads of 700-800 MB/sec and sustained writes of up to 600 MB/sec.  That's about 8-9 times fast that high performance Ultra SCSI disk.  It's also about 40 times faster than Intel's SSD solid state drive. 

    To put it in more directly realized terms, this data rate is equal to copying about 1 full DVD's worth of data in about 8 seconds.  Now that's fast! 

    Add to that the ability to RAID multiple cards together in the same chassis for added performance and storage capacity... 

    Check out the recorded demo and review that TG Daily did at DEMOfall07 with David Flynn, CTO, and Rick White, CEO, of Fusion-IO, here.  You can get the entire demo here, but no review article.

    Here's another interesting review from Techworld.

    Here's a chart of sustained data rates in comparison to the new ioDrive.

    This stuff really rocks.  As with most new technologies, the initial costs are high (currently about $30/GB), but compared to similar breakthrough technologies, fairly comparable (ie initial GB speed network switches, the 1st 1GB hard drive, etc.).  I remembering paying $250 (at a wholesale cost) for a 400MB hard drive back in '93... That's over $600/GB... 

    The future direction of this technology is where it really shakes up our current preceptions.  As more investors come online, as demand drives prices down, and competition tries to mimic this new technology, prices will dip to levels where this stuff can begin to creep in and take over in Extreme Gaming systems, Video Editing/Rendering and Multimedia systems, and high-end Business/Development PCs, as well as just the enterprise servers that are the current primary contact.  And who knows what the future may bring... The team they have at Fusion-IO is working hard on many new ways to break-down the current paridigms of the storage world, and their next announcements will shake it up as much as this one did!


Need SharePoint Training? Attend a SharePoint Bootcamp!

Posts (c) their respective authors. Everything else (c) 2007 SharePoint Experts