Bare Metal Restore Part 2

I blogged previously about how Windows 2008 R2 has native "bare metal restore"   http://sqlblogcasts.com/blogs/grumpyolddba/archive/2011/05/13/windows-2008-r2-bare-metal-restore.aspx , see the Core Team's blog post here;  http://blogs.technet.com/b/askcore/archive/2011/05/12/bare-metal-restore.aspx

Well since then I’ve actually had the chance not only to put the process to the test but to see if I could go one step further.

I have a six identical IBM Servers, part of the development infrastructure, which I am rebuilding with windows 2008 R2, when one of these died I wondered if I could use the bare metal backup from a preciously built server to rebuild this one.
Creating images for building servers is nothing new, however I've never built a server this way before and I'm not aware of this feature ever being available out of the box in a windows o/s.


Just to recap on why you might want to to do this, when I built my first server I applied security patches and service pack 1 plus a number of other changes before I made my backup. This means the restore applied to another server avoids me having to go through all that again.


So the big question is can you use the windows 2008 R2 backup to build servers? The answer is yes it works perfectly and very quickly.
Did I have any problems? Yes as the backup wasn't created with this in mind so the computer name and ip addresses were duplicated which entailed a little bit of work.
When I build my next Server I will not name the server, leave it on dhcp and not add it to the domain; then I'll make my backup which I can use to build the remaining three servers as and when.

If you're wondering how easy it is to use this technique, I needed the o/s install dvd, a usb drive with the server storage drivers and another usb drive with the backup files created earlier, these were just under 11GB in my case.

If you're also wondering what this has to do with SQL Server, well you can use this backup to make an after install image for any SQL Server you've just built, it could also allow you to perform testing and then put it back where it was before. Obviously the more drives and applications the bigger your backup and I don't have a way to test if it works with SAN drives, but I see no reason why it shouldn't.

Despite some of the frustrations of "where is xxxx now !" I think praise is is due to microsoft for the advances in windows 2008 R2

SSMS Built in Reports for Server and Database Monitoring

This is a long post which I hope will format correctly – I’ve placed a pdf version for download here  http://www.grumpyolddba.co.uk/sql2008/ssmsreports_grumpyolddba.pdf

I sometimes discover that the built in reports for SQL Server within SSMS are an unknown, sometimes this is because not all the right components were installed during the server build, other times is because generally there’s never been great reporting for the DBA from the SQL Team so no-one expects to find anything useful for free!

We did get the performance dashboard with SQL 2005 and this can be made to work with SQL 2008 with just a few code changes.

We also have the MDW database/management reports, but although I have this running on a couple of servers I’ve never really fallen in love with it.

( Once upon a time you could download the rdls for these reports but as far as I can tell the links are no longer available, I don’t know if this is deliberate. )

I use a few of these reports now and again, I have my own dashboards, reports and queries which are customised to particular environments, but if I’m faced with an “unknown” server then these reports will often be my first port of call.

Like anything using the dmvs remember that under pressure dmvs may shed or stop collecting data. Data is usually cumulative since last service restart, is cleared on a service restart and certain data may be cleared under specific circumstances.

The only way to collect dmv data for analysis is to take regular snapshots of the data into permanent tables of your own and work from there. At best some dmv data can lead you into believing you have problems where you don’t.

The relationships between dmvs can sometimes be confusing; obtaining information about partitioned tables is a good example of where it’s not as easy as you might wish.

Anyway Reports are available by context when you right click in SSMS object explorer; here I’m clicking on the actual instance/server.

( Note that to protect the innocent names and data have been changed/blanked where appropriate )

1. Reports by Server/Instance

To start off open SSMS, register your Server and right click on the instance/server

Choose Reports – Standard Reports - to view available reports for that context.



Here’s the list of Standard Reports for the instance, 23 reports in all and appearing to cover a number of useful areas.

Click on the individual report you wish to run to bring it to screen.



  • I’m not going to screenshot every report but I will include a few examples.
  • The main problem is that some of what might appear useful take too long to drill down and your actual chance of finding what you’re looking for is very slim, unless you only have a few connections.
  • Some reports I’ve never been able to entice into producing an output.
  • I’ll summarize this briefly below.

Server Dashboard

  Lacks functionality

Configuration Changes

  Never managed to get this to show anything

Schema changes

  Only ever worked after installing Sharepoint when it listed every table/index installed, or so it seems.

Scheduler Health

  Takes far too long to find anything interesting – has some value

Activity - xxxx

  I find it takes too long to find anything really useful.

  It will depend upon your environment of course.

Memory Consumption

  Could be better

Top Transactions by xxxx

  I have better ways to get this information.

  Top Transactions by Age does allow you to drill into the sql statement concerned, however it shows   statements, which is fine, but no object id or name so doesn’t reference the stored procedure containing the statement.

Performance - xxxx

  • Often ( very ) slow to run.
  • There are better ways to view this type of data.
  • It does allow you to see how much rubbish msdb produces which doesn’t parameterise and takes up valuable memory.
  • Certainly the TOP xxxx reports are interesting
  • A Top Procedures would be useful, only returning statements whilst useful doesn’t pin point that proc which is performing badly.
  • Charts don’t have click through to link to statement.

Service Broker

  I don’t use so can’t tell

Log Shipping

  I don’t use Microsoft log shipping so can’t comment.


Starting with Server Dashboard which sounds better than it is:

  • There are 24 databases on this server and as you can see the two charts do not display correctly, in fact I am totally unable to make them display correctly and neither the export or print option will produce a correctly formatted report.
    • Right click to export to pdf or excel, pdf never formats correctly
    • I personally would have like web archive as an option here.
  • There’s no drill down and to be honest not a great deal of much use.


Non Default Configuration Options expand to show server options – I’m not sure I quite agree with “ Non Default” this sort of infers you’re not running a standard box, anyway this is from a production box showing what you might see. ( these are my “non default” settings! )

  

You might like to compare to the front screen of the Performance Dashboard which drills down on just about everything and also auto refreshes.

( Note that this report has been visually formatted to give a look and feel which matches other reports I use )

Back to SSMS Reports - Here’s the memory report, there’s drill down by object type too, not shown here.

Here’s one of my own reports: ( sorry can’t make it smaller and readable ! )

   
 

The Processes Report – generally far too unwieldy. ( drill down  just too many clicks  shown after )


Top Queries ( statements ) by cpu:

  • · Can’t click on the chart to select a statement
  • · Statements are abridged
  • · Drill down does give object ID so you can track back to the procedure.

    2. Reports by Database – right click on a user database for these


Disk Usage xxxx

  The first three reports are probably the only reports I ever use, however that said I do have a fairly  comprehensive reporting structure of my own.

Backup and Restore Events

  If you have nothing else it’s good.

xxxx Transactions

There’s better ways to extract transaction/user data.

On my systems I didn’t find these reports useful at all, assuming they returned any information. Again far too many clicks to drill down to information of dubious use.

Resource Locking Statistics

Again on my systems am unable to find any useful output

Object Execution Statistics

The Object Execution Statistics are ok but top xx type reports are better ; on a production server this report lists nearly 2,000 objects which is just too much.

Database Consistency

Does what it says

Index Usage Statistics

Index Physical Statistics

The index usage reports are ok, but in the end you’ll probably want to write your own, they’re also cumulative so for real time diagnostics the averages are little use if your server has been running for several months.

:)  One area these reports do work is where there are many tables, I support a well-known Financials and HR application, sadly there are in excess of 87,000 tables created in the database so SSMS just dies if you attempt to open up the tables TAB.

Schema Changes

I’ve found this to be inconsistent across my environments so it’s not something I’m likely to use.

User statistics

Never found this useful


The basic disk usage report is useful, especially as it shows autogrow activity – which should never be like this for a production database – but I don’t fully administer this system. ( as usual names changed to protect the innocent! )


Backup information.

Successful operations list each backup with file details etc. If your logs back up every 5 mins then this is a lengthy report!


Execution Stats:

 

  3. Reports for SQL Agent

Right clicking on the SQLAgent will show the following two reports.




Top Jobs report is interesting, I’m not sure about the Job Steps !


   4. Reports for Management

There are also two reports available from Management, but I am unable to see what value they have.

To summarise; If you have no reporting and you didn’t know these reports were available then you will probably find these better than nothing.

The main advantage these have over a query is that most are graphical and that well known phrase “ A picture paints a hundred words ” still holds true.

© www.grumpyolddba.co.uk May 2011
download as a pdf here  http://www.grumpyolddba.co.uk/sql2008/ssmsreports_grumpyolddba.pdf

Scheduled Jobs on strike ??

I had an interesting situation with agent jobs stopping running without failure.
I don't want to go into attempting to describe our infrastructure but siffice it say we had a few issues.
None of my SQL Servers went down but there were problems and when the system picked up I had some interesting situations on a number of SQL 2008 and SQL 2005 Servers.
Essentially jobs which ran at short time intervals were just not running whilst jobs with time intervals of over an hour were all running fine.
As you might guess t-log backups tend to run at short time intervals but i also have a number of monitoring jobs which collect data every 5 minutes, these store data locally on the servers involved.
If we consider a t-log backup job as an example:-

  • This had stopped some hours previously, but without an error.
  • Other jobs were still running however.
  • The Server had not failed over
  • The Server was still running.
  • Users were happily back in the application and accessing the server.
  • I have a query, to be further examined, which will list a scheduled job which has not run when it should, this listed nothing!
  • The jobs were not disabled
  • The schedules were not disabled
  • I ran the job manually, fine, but the schedule did not pick up.
  • In the end I took the agent service offline and then brought it back online.
  • In every case, cluster or standalone, this resolved the problem.

I'm at a bit of a loss to fully understand why this happened this way, as I say it seemed that those jobs scheduled in minutes all stopped.
Most other nightly jobs ran, but not all of them and not to any particular pattern that I can see.
It is possible that maybe the time server put out some supect times, a few other servers had some strange times for a while I believe.

The only observation I have is that it is wise to check everything when there is a problem and not just assume because the Agent Service is running without errors that all is well!

Posted by GrumpyOldDBA with 2 comment(s)
Filed under:

Windows 2008 R2 Bare Metal Restore

I don't know how many DBAs work with the o/s but I work at o/s level a lot and currently build our dev servers, a collection of IBM x346, HP DL580s and DL585s. I'm currently working through rebuilding them with windows 2008 R2 and I've been making a system backup after the install so if the box dies I can put it back as it was, however it seems I was just one checkbox away from a bare metal restore backup ( don't have to re-install o/s to restore ) so I'm grateful for Core team for this post

http://blogs.technet.com/b/askcore/archive/2011/05/12/bare-metal-restore.aspx

Windows 2008 R2 has some cool features, one of my other most useful bits is the ability to resize a disk partition on-line, and yes it works a dream as I've tried it out!

DMVs – What they can do for you

Users :

· How you deal with user activity on a server may depend upon your application(s), there’s always been sp_who and sp_who2 although I rarely ever use them.

· So why don’t I use these handy procedures and do I have my very own sp_who3 for example? Well the short answer is no because I tend to have worked with web facing applications, this doesn’t mean these are public applications but corporate applications that use a typical n-tier architecture.

· For this reason I’ve rarely been interested in who is connected to my database but more a case of what is connected.

· I’m also usually concerned with performance, monitoring and trending in an attempt to be pro-active rather than re-active, to this end I still have my eye on real time data mining as a way to predict potential issues with the production platform(s).

· So if you have 1,000 users and they all connect as “sa” or “AppUser” and/or you have a number of databases on your instance then sp_who and derivitives are probably not going to be too much use to you.

· I mentioned being pro-active and by this I mean I have processes to alert me if I think there’s going to be a problem, these are based upon thresholds of “normal” use and I have a dashboard which updates every 10 seconds to give me a visual heads up.

· Anyway, these are some of the queries concerned with user connections that I have to hand. I store useful scripts in a common location on all servers and my workstations, mostly I work in rdp sessions on the servers themselves, the reasons for this are out of scope here.

First up there’s a query which relies upon sys.sysprocesses, but if you’re still working with SQL Server 2000 this query will work if you change the table name from sys.sysprocesses to dbo.sysprocesses ( I don’t have a copy of SQL 2000 to test this on so apologies if I am incorrect )

--
select Count(*) from master.sys.sysprocesses where status='runnable' and dbid=7  and spid>50 ;
go
select right(convert(varchar,last_batch),7) as [Time],rtrim(loginame) as [LogonName],spid,open_tran as [Tran],kpid,blocked as [blocker],waittype,waittime
,lastwaittype,rtrim(waitresource) as [Resource],db_name(dbid) as DB,cpu,physical_io,[memusage],rtrim(status) as [Status]
,hostname,program_name,cmd,left(nt_username,20) as [NTuser] from master.sys.sysprocesses with (nolock) where 
--dbid=7 and 
spid > 50
order by --status asc, 
blocked desc,waittime desc,[tran] desc
go

Why is a query better than a procedure? Because I can customise it to whatever situation I’m looking at, I can also change column order and add/remove columns depending upon my requirements.

My first query ( above ) just returns the number of active processes, in certain circumstances spid 50 can actually be a system process so you may wish to change this to spid 51, you may of course wish to include system processes anyway.

The following queries use dmvs only:

--
-- get what's running
--
select 
dess.last_request_start_time as 'Last Batch Start', 
dess.last_request_end_time as 'Last Batch End',
dess.login_name, 
dess.session_id as 'SPID',
der.open_transaction_count as 'Open Tran',
der.blocking_session_id as 'Blocker',
isnull(der.wait_type,'') as 'Current Wait',
der.wait_time as 'Wait Time',
isnull(der.last_wait_type,'') as 'Last Wait',
isnull(der.wait_resource,'') as 'Waiting ON',
ISNULL(db_name(der.database_id),'') as 'Database',
dess.cpu_time as 'CPU Time',
dess.logical_reads as 'Reads',
dess.writes as 'Writes',
dess.[status],
dess.[host_name],
dess.[program_name],
der.command as 'Command',
eqp.query_plan
from sys.dm_exec_sessions dess 
join sys.dm_exec_connections decc on decc.session_id = dess.session_id
join sys.dm_exec_requests der on dess.session_id = der.session_id
CROSS APPLY sys.dm_exec_query_plan(der.plan_handle) eqp
where dess.session_id>50
order by Blocker desc;

Like the previous example you can filter or sort for specifics, again I’m usually troubleshooting here. This query ( above ) eliminates the clutter of non running connections and also presents the option of examining the query plan of what is running.

This query also works on SQL 2005 but you will need to save the xml from the queryplan with a file extension of .sqlplan then open it in SSMS to see the graphical plan, in SQL 2008 you see the graphical plan.

--
-- get what's connected
--
select 
dess.last_request_start_time as 'Last Batch Start', 
dess.last_request_end_time as 'Last Batch End',
dess.login_name, 
dess.session_id as 'SPID',
der.open_transaction_count as 'Open Tran',
der.blocking_session_id as 'Blocker',
isnull(der.wait_type,'') as 'Current Wait',
der.wait_time as 'Wait Time',
isnull(der.last_wait_type,'') as 'Last Wait',
isnull(der.wait_resource,'') as 'Waiting ON',
ISNULL(db_name(der.database_id),'') as 'Database',
dess.cpu_time as 'CPU Time',
dess.logical_reads as 'Reads',
dess.writes as 'Writes',
dess.[status],
dess.[host_name],
dess.[program_name],
der.command as 'Command',
eqp.query_plan
from sys.dm_exec_sessions dess 
join sys.dm_exec_connections decc on decc.session_id = dess.session_id
left outer join sys.dm_exec_requests der on dess.session_id = der.session_id
OUTER APPLY sys.dm_exec_query_plan(der.plan_handle) eqp
where dess.session_id>50
order by last_request_start_time desc;

This query ( above ) is similar to the sysprocesses query and lists all user connections.

Also works on SQL 2005 but with the same conditions for viewing the query plans.

--
-- to get the last command run you need to pass the handle from dm_exec_connections to sys.dm_exec_sql_text
-- including the sql text can make for some big result sets
--
select 
dess.last_request_start_time as 'Last Batch Start', 
dess.last_request_end_time as 'Last Batch End',
est.[text],
eqp.query_plan,
dess.login_name, 
dess.session_id as 'SPID',
der.open_transaction_count as 'Open Tran',
der.blocking_session_id as 'Blocker',
isnull(der.wait_type,'') as 'Current Wait',
der.wait_time as 'Wait Time',
isnull(der.last_wait_type,'') as 'Last Wait',
isnull(der.wait_resource,'') as 'Waiting ON',
ISNULL(db_name(der.database_id),'') as 'Database',
dess.cpu_time as 'CPU Time',
dess.logical_reads as 'Reads',
dess.writes as 'Writes',
dess.[status],
dess.[host_name],
dess.[program_name],
der.command as 'Command'
from sys.dm_exec_sessions dess 
join sys.dm_exec_connections decc on decc.session_id = dess.session_id
join sys.dm_exec_requests der on dess.session_id = der.session_id
CROSS APPLY sys.dm_exec_query_plan(der.plan_handle) eqp
CROSS APPLY sys.dm_exec_sql_text(decc.most_recent_sql_handle) est
where dess.session_id>50
order by Blocker desc;

This query ( above ) lists out the last sql run along with the query plan, I use this mostly when there are blocking issues or I’m concerned something isn’t quite right, such as a serialised procedure plan.

Works with SQL 2005 as before.


--
-- connections by host
--
select  isnull(ses.[host_name],'TOTAL') as HostName,count(*) as Logins
from  master.sys.dm_exec_sessions ses with (nolock)
where ses.session_id > 50 
and ses.[host_name] not in('') -- you might want to add the actual server to eliminate system sessions
group by ses.[host_name]
with rollup;

A slightly different query ( above ) I use this within a dashboard and to monitor connections.

Typically you may have a number of n-tier servers, for instance a number of web servers , SSRS servers and application servers this query groups by host and uses the rollup to give a grand total.

I’ve been known to run this every minute as a scheduled job to put the output into a table, this allows me to then plot the use by host server; e.g. if you have four load balanced application servers did they maintain a similar number of connections all day?

The “ not in “ allows you to filter out say the cluster node; on the other hand you can quickly identify any workstations connecting to your server!

I’ve used this technique previously linked to an alert when I encountered issues with connection pooling not working correctly from a server; the number of connections kept increasing and essentially performed a denial of service attack on the server, by monitoring the count of connections I could alert when a threshold was reached.

If you saw my presentation on creating real time dashboards for production systems this was part of one of the dashboard reports.

--
-- open transactions
--
select count(*) as [Trans]
from sys.dm_tran_session_transactions tst
join sys.dm_tran_active_transactions tat on tat.transaction_id = tst.transaction_id
join sys.dm_tran_database_transactions tdt on tst.transaction_id = tdt.transaction_id
join sys.dm_exec_sessions dess on dess.session_id = tst.session_id
where tst.session_id>50;

The query above counts open transactions; too many open transactions can be an indication of an issue, I use this for monitoring against SSRS, these have users too but perhaps not in the same way as more conventional application databases.

Another proactive query, my experience has shown that for my SSRS Servers a value of 10 or more shows I have slow running reports, over 30 usually indicates timeouts and other user unfriendly effects.

© www.grumpyolddba.co.uk May 2011

Posted by GrumpyOldDBA with no comments
Filed under:

The Devs, The Bad and The Ugly – you choose!

How many times have you heard a DBA describing the teams they work with I wonder?

Well here’s my proof.

 

Posted by GrumpyOldDBA with no comments
Filed under:

Not thinking it through - the sequel ( Part 1 )

A few years ago I did a series of posts entitled "Not thinking it through" which were really cause and effect situations where an attempt to resolve a problem only caused another problem.

If you like to consider the route between business and application/database each request/requirement has the ability to become corrupted by each person or group of persons that come in contact with it. It's not exactly a new topic and it's not a criticism of any client past or present but an observation of process. I've seen so often managers who make decisions about what an application needs for its users, without actually asking the users of course, so what happens is that IT delivers what the users do not actually want, the users then often find a way around an application to get what they want, but usually what the application wasn't written to do.

My issue here,  leading wildcard searches and minimal searches. Leading wildcard searches do not scale, that's a fact, the end result is a table or index scan which can be really bad news if your table contains a few hundred million rows. I'd raised an issue concerning a search, where the user had entered a single s.  My point was that would I perform a google search for Virgin Airlines by entering a single v as my search criteria? My somewhat "grumpy" description was picked up and passed back up the tree so to speak from the developement team, I'd basically said that searching for anything by a single letter was absurd ( said I was grumpy! ) . Sadly the suggested solution was to allow a single letter search as long as one other criteria was also searched for, say another single letter! 

I also have the minor issue of a "contains" a single letter search. I'm struggling to understand how you wouldn't know more than a single letter, I mean it's not as if when you go the railway ticket office to buy a ticket from London to Bracknell you ask for a "Return to B, please" is it??  Please feel free to contradict me.

For reasons I can't go into full text is not an option, yet, but even if I build full test indexes is the ability to search for s going to be practical?  I'm not being disrespectful to any of those in the business and analysis process but it is a concern when no-one other than the DBA it seems understands the consequences of a decision. So not thinking it through -  don't allow users to search on a single letter - is it ok if they search on two fields like that ?

Posted by GrumpyOldDBA with 1 comment(s)
Filed under:

Windows doesn't like Squirrels ?

Strange goings on when setting a sevrice account password ^^  I was setting a service account for a dev  SQL server and wished to change the account password from that which it had been created with.

I can list all of this as I'm not giving away server names or passwords I use < grin >  So I opened up AD tools and set the password to  DEV08Thesquirrel  only to have it rejected as not meeting the complexity requirements.  Now I sort of remembered having some problems with passwords which were too long but couldn't remember if it was at work but decided to shorten the password to 14 characters , so DEV08Thesquirr  this was accepted without an issue. I pinged off an email asking if we had such a policy on password length, you might think this is an odd question but I had some considerable issues with my tesco.net email accounts where I keep forgetting you can only have, I think, a password of 8 characters, the problem is that it will happily accept a longer password but truncates it, very tricky!!

Anyway I had an answer that we actually accept passwords up to 127 in length. Must have some conditions around numbers and capitilisation and such - which my password complied with. I tried OneFlew2008cabbage and  OneFlew2008Thesquirrel    so perhaps squirrels weren't a problem, back to  DEV08Thesquirrel   nope still rejected, DEV08Thesquirrel#  nope   DEV08Thesquirre   nope   DEV08Thesquirr  yup.  Then I saw that we shouldn't use any more than 2 consecutive letters from tha account name - aha!  the account name started DEV08_  so that was that then, but hang on what about DEV08Thesquirr  ...  I tried DEV07Thesquirrel  and yes that was accepted.

Now many years ago I wrote a whole front end to handle passwords, just like this, and I too tried to stop users making use of their login name in passwords, but it was a daft idea trying to take small numbers of letters, any Andrew can't have  and   ,I'm colinleversuch work out the variations of words/passwords you can't use there!

So obviously it was asilly idea for me to start the password with the same start as the service account name, but it's a dev server and the domain account has no rights globally - so there you have it, a complete conundrum, squirrels notwithstanding.

Partitions and FullText - not an option

I'm a strong advocate of partitioning having deployed solutions through SQL 2000, 2005 and 2008, in fact federated servers is about the only aspect of partitioning which I've not deployed in a production environment.

Recently I've been applying partitioning to a logging table, approx 2 million rows a day, I have an automated solution which handles archiving and removing aged data through partition switching (  part of the subject matter of my presentation to VBUG "Gone in 60 nano seconds" ). 

Having resolved the partitioning I decided that fulltext indexing would now be very useful, sigh!, sadly fulltext indexing requires a single column unique index and I've not deployed many solutions where the partitioning column is also the ( single column ) primary key and as you'll know all unique indexes on a partitioned table must include the partitioning column. I just can't figure why a Primary Key, no matter the column makeup, isn't acceptable to fulltext. There are many irritations with native partitioning, the unique index issue being the most irritiating which forces me to use either triggers or indexed views to maintain uniqueness in a single column on a partitioned table.

You can create a unique index if you don't make it part of the partitioning schema ( e.g. on the primary filegroup ) but that means your partition switching will not work any longer. Partitioned views don't suffer this way but of course you can't do partition switching. So I'm in a bit of a catch 22 situation where I need two incompatible features to work together.

In the tests I carried out using an index on a seperate filegroup I was pleasantly pleased to see how much better fulltext indexes perform compared to when I last tried with SQL 2000,

While I'm having a gripe I'd also warn that by default SSMS does not script partitioning options, so if like me you write your create scripts in SSMS and then script the object back out to get all the drop and options SSMS will kindly not refer to partitioning at all and when you rerun the generated script you get a non partitioned table, and it's not as if these options are the most easy to find either in SSMS, it's a bit like using a route planner which by default leave out the road numbers and town names ( If you're only of the sat-nav generation then route planners provided printed instructions and a map - think of it as you providing the vocie over for your sat-nav - oh and maps are like google   bing maps but on paper )

Tech Days in UK

There's a series of Tech days announced  http://uktechdays.cloudapp.net/techdays-live.aspx

including one for Database  on 26th May in London, http://uktechdays.cloudapp.net/techdays-live/mission-critical-database.aspx

If these days follow the standard set by the BI Seminar earlier this month in Reading then this is something you probably shouldn't miss.

 

Posted by GrumpyOldDBA with no comments
Filed under:
More Posts « Previous page - Next page »