Thursday 16 July 2015

Configuration Settings For SQL Server 2016 Database Engine.



Once you have installed SQL Server 2016, you need to configure the server so that the performance is excellent with also making it highly available and scalable.

To do this, just follow some basic tips

1) In the Memory section, it's best practise to set the  Maximum memory settings. These should to be set as follows.

Physical RAM                           Maximum Server Memory Settings
2GB                                           1500
4GB                                           3200
6GB                                           4800
8GB                                           6400
12GB                                         10000
16GB                                         13500
24GB                                         21500
32GB                                         29000
48GB                                         44000
64GB                                         60000
72GB                                         68000
96GB                                         92000
128GB                                       124000

You should leave the minimum server settings at the default as changing this may cause performance problems.



In some SQL Server Environments, some DBA's enable the 'Boost SQL Server Priority', do not enable this because this can actually cause performance problems and Microsoft has actually recommended not to enable this option. (read more)




Its a good idea to set the default locations where the Data, Log and Backup are stored. This is useful when you create a new database, the data files will go to the correct locations. 



Every other option in the configuration is designed for a specific solution so you can adjust all the other options to suit your need,

Advanced CREATE STORED PROCEDURE Template



When I create a new stored procedure, I tend to use the following code, use it and modify it as much as you like.


CREATE PROC usp_test
/** -----------------------------------------------------------------------------------------------
***
*** Database naming and coding conventions
*** S:\IT\Databases\DRL-IT-SQLServerCodingStandards.docx
***
*** Description :
***                    
***

Example Execution :

    DECLARE @Success INT, @ErrProc nvarchar(4000),  @ErrNum INT, @ErrMsg nvarchar(4000),@ErrSeverity INT,@ErrState INT,@ErrLine INT, @ErrStartDate DATETIME,@ErrEndDate DATETIME
  
       EXEC usp_test
   
    @Success = @Success OUTPUT,
    @ErrProc = @ErrProc OUTPUT,
    @ErrNum = @ErrNum OUTPUT,
    @ErrMsg = @ErrMsg OUTPUT,
    @ErrSeverity = @ErrSeverity OUTPUT,
    @ErrState = @ErrState OUTPUT,
    @ErrLine = @ErrLine OUTPUT,
    @ErrStartDate = @ErrStartDate OUTPUT,
    @ErrEndDate = @ErrEndDate OUTPUT

    select @Success, @ErrStartDate


*** Revision History: 
*** v1.0            Gary Cowan             09 Sep 2000        - Created Stored Procedure
***
** -------------------------------- External Variable Declaration(s) -----------------------------*/






 ----------------------------------- Error Handling Declaration------------------------------------------------

   @Success INT OUTPUT,
   @ErrProc nvarchar(4000) OUTPUT,
   @ErrNum INT OUTPUT,
   @ErrMsg nvarchar(4000) OUTPUT,
   @ErrSeverity INT OUTPUT,
   @ErrState INT OUTPUT,
   @ErrLine INT OUTPUT,
   @ErrStartDate DATETIME OUTPUT,
   @ErrEndDate DATETIME OUTPUT

---------------------------------------------------------------------------------------------------
AS

/* Internal Variable Declaration(s) and Initialation(s)                                           */





/* ---------------------------------------------------------------------------------------------- */

 SET NOCOUNT ON
 SET XACT_ABORT ON
 SET TRANSACTION ISOLATION LEVEL READ COMMITTED


 SELECT @ErrStartDate = GETDATE()

 BEGIN TRY
            BEGIN TRAN
            -- Comment: blah blah blah

         


            SELECT 1/1









            IF @@TRANCOUNT > 0
            COMMIT TRAN
            SELECT @Success = 1, @ErrEndDate = GETDATE()
 END TRY

 BEGIN CATCH

            IF @@TRANCOUNT > 0

            ROLLBACK  
              -- Raise an error with the details of the exception

    

            SELECT     
            @ErrMsg = ERROR_MESSAGE(),
            @ErrSeverity = ERROR_SEVERITY(),
            @ErrState = ERROR_STATE(),
            @ErrEndDate = GETDATE(),
            @ErrProc = ERROR_PROCEDURE(),
            @ErrLine = ERROR_LINE(),
            @ErrNum = ERROR_NUMBER()


            SELECT @Success = 0
            RAISERROR(@ErrMsg, @ErrSeverity, @ErrState)

 END CATCH


Friday 3 July 2015

Useful DBCC commands



As I try to do mainly do SQL Development and not SQL DBA, it's still useful to know useful DBA commands that you may need to perform on a server. Here are some common DBCC commands that you may need. 



1.DBCC CHECKALLOC
DBCC CHECKALLOC checks page usage and allocation in the database. Use this command if allocation errors are found for the database. If you run DBCC CHECKDB, you do not need to run DBCC CHECKALLOC, as DBCC CHECKDB includes the same checks (and more) that DBCC CHECKALLOC performs.


2.DBCC CHECKCATALOG
This command checks for consistency in and between system tables. This command is not executed within the DBCC CHECKDB command, so running this command weekly is recommended.

3.DBCC CHECKCONSTRAINTS
DBCC CHECKCONSTRAINTS alerts you to any CHECK or constraint violations.
Use it if you suspect that there are rows in your tables that do not meet the constraint or CHECK constraint rules.

4.DBCC CHECKDB
A very important DBCC command, DBCC CHECKDB should run on your SQL Server instance on at least a weekly basis. Although each release of SQL Server reduces occurrences of integrity or allocation errors, they still do happen. DBCC CHECKDB includes the same checks as DBCC CHECKALLOC and DBCC CHECKTABLE. DBCC CHECKDB can be rough on concurrency, so be sure to run it at off-peak times.

5.DBCC CHECKTABLE
DBCC CHECKTABLE is almost identical to DBCC CHECKDB, except that it is performed at the table level, not the database level. DBCC CHECKTABLE verifies index and data page links, index sort order, page pointers, index pointers, data page integrity, and page offsets. DBCC CHECKTABLE uses schema locks by default, but can use the TABLOCK option to acquire a shared table lock. CHECKTABLE also performs object checking using parallelism by default (if on a multi-CPU system).

6.DBCC CHECKFILEGROUP
DBCC CHECKFILEGROUP works just like DBCC CHECKDB, only DBCC CHECKFILEGROUP checks the specified filegroup for allocation and structural issues. If you have a very large database (this term is relative, and higher end systems may be more apt at performing well with multi-GB or TB systems ) , running DBCC CHECKDB may be time-prohibitive.
If your database is divided into user defined filegroups, DBCC CHECKFILEGROUP will allow you to isolate your integrity checks, as well as stagger them over time.

7.DBCC CHECKIDENT
DBCC CHECKIDENT returns the current identity value for the specified table, and allows you to correct the identity value if necessary.

8.DBCC DBREINDEX
If your database allows modifications and has indexes, you should rebuild your indexes on a regular basis. The frequency of your index rebuilds depends on the level of database activity, and how quickly your database and indexes become fragmented. DBCC DBREINDEX allows you to rebuild one or all indexes for a table. Like DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC, running DBREINDEX during peak activity times can significantly reduce concurrency.

9.DBCC INDEXDEFRAG
Microsoft introduced the excellent DBCC INDEXDEFRAG statement beginning with SQL Server 2000. This DBCC command, unlike DBCC DBREINDEX, does not hold long term locks on indexes. Use DBCC INDEXDEFRAG for indexes that are not very fragmented, otherwise the time this operation takes will be far longer then running DBCC DBREINDEX. In spite of it's ability to run during peak periods, DBCC INDEXDEFRAG has had limited effectiveness compared to DBCC DBREINDEX (or drop/create index).

10.DBCC INPUTBUFFER
The DBCC INPUTBUFFER command is used to view the last statement sent by the client connection to SQL Server. When calling this DBCC command, you designate the SPID to examine. (SPID is the process ID, which you can get from viewing current activity in Enterprise Manager or executing sp_who. )

11.DBCC OPENTRAN
DBCC OPENTRAN is a Transact-SQL command that is used to view the oldest running transaction for the selected database. The DBCC command is very useful for troubleshooting orphaned connections (connections still open on the database but disconnected from the application or client), and identification of transactions missing a COMMIT or ROLLBACK. This command also returns the oldest distributed and undistributed replicated transactions, if any exist within the database. If there are no active transactions, no data will be returned. If you are having issues with your transaction log not truncating inactive portions, DBCC OPENTRAN can show if an open transaction may be causing it.

12.DBCC PROCCACHE
You may not use this too frequently, however it is an interesting DBCC command to execute periodically, particularly when you suspect you have memory issues. DBCC PROCCACHE provides information about the size and usage of the SQL Server procedure cache.

13.DBCC SHOWCONTIG
The DBCC SHOWCONTIG command reveals the level of fragmentation for a specific table and its indices. This DBCC command is critical to determining if your table or index has internal or external fragmentation. Internal fragmentation concerns how full an 8K page is.
When a page is underutilized, more I/O operations may be necessary to fulfill a query request than if the page was full, or almost full.
External fragmentation concerns how contiguous the extents are. There are eight 8K pages per extent, making each extent 64K. Several extents can make up the data of a table or index. If the extents are not physically close to each other, and are not in order, performance could diminish.

14.DBCC SHRINKDATABASE
DBCC SHRINKDATABASE shrinks the data and log files in your database.
Avoid executing this command during busy periods in production, as it has a negative impact on I/O and user concurrency. Also remember that you cannot shrink a database past the target percentage specified, shrink smaller than the model database, shrink a file past the original file creation size, or shrink a file size used in an ALTER DATABASE statement.

15.DBCC SHRINKFILE
DBCC SHRINKFILE allows you to shrink the size of individual data and log files. (Use sp_helpfile to gather database file ids and sizes).

16. DBCC TRACEOFF, TRACEON, TRACESTATUS
Trace flags are used within SQL Server to temporarily enable or disable specific SQL Server instance characteristics. Traces are enabled using the DBCC TRACEON command, and disabled using DBCC TRACEOFF. DBCC TRACESTATUS is used to displays the status of trace flags. You'll most often see TRACEON used in conjunction with deadlock logging (providing more verbose error information).

17.DBCC USEROPTIONS
Execute DBCC USEROPTIONS to see what user options are in effect for your specific user connection. This can be helpful if you are trying to determine if you current user options are inconsistent with the database options.

Sunday 28 June 2015

Stretch Database - SQL Server 2016



If you have read the previous blog posts, I have outlined what Azure databases are and how you should use them. With SQL Server 2016, you now have the ability to 'Stretch' your database into the cloud from a physical system within your organisation. This will allow you to store historic information that are a rarely accessed so that it can free up resources on your server.

To read more information about the 'Stretch' database feature in SQL Server 2016, just follow the link below.

More Information : Stretch Database

Thursday 25 June 2015

Microsoft Azure SQL Data Warehouse Overview



With Azure, you can also have SQL Server Data Warehouses. This is a great idea if your environment is several gigabits large and you want to be able to increase processing power without installing new hardware.

Just watch this video to find out more

Wednesday 24 June 2015

Microsoft Azure SQL Database Overview



With SQL Server 2016 , it now has the ability to stretch your database to the cloud to a Microsoft Azure SQL Database.

Stretching your database gives you the ability to have some of your data locally within your business and some of your database placed in the cloud which is accessible worldwide.

There are many benefits of putting your databases in the cloud and to see a great overview of what Microsoft Azure SQL Database can do, just watch this video.


Tuesday 23 June 2015

In-memory OLTP in SQL Server

If you want to know a lot of information about in-memory OLTP in SQL Server, then watch these two videos. They both explain how and when to use in-memory technology within your environment.


An overview of in-memory OLTP in SQL Server 2014
 

Microsoft SQL Server 2014: In-Memory OLTP for Database Developers






Friday 19 June 2015

Operational Analytics - SQL Server 2016




With SQL Server 2016, there is now the ability to have operational analytics on OLTP systems.

This is a great idea and watch the video below to find out more.

Wednesday 17 June 2015

Temporal in SQL Server 2016 - Creating/Querying Tables


Below are two example on how to create Temporal tables in SQL Server 2016
They will both store histroic information on data that gets into the table

-- A History table is not specified
CREATE TABLE dbo.Customer
(
    CustomerID        int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
    CustomerName      varchar(50) NOT NULL,

    ValidFrom           datetime2 GENERATED ALWAYS AS ROW START NOT NULL,
    ValidTo             datetime2 GENERATED ALWAYS AS ROW END   NOT NULL,  

    PERIOD FOR SYSTEM_TIME (
        ValidFrom,
        ValidTo
    )  
)
WITH ( SYSTEM_VERSIONING = ON );
GO


-- A History table is specified
CREATE TABLE dbo.Customer
(
    CustomerID        int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
    CustomerName      varchar(50) NOT NULL,

    ValidFrom           datetime2 GENERATED ALWAYS AS ROW START NOT NULL,
    ValidTo             datetime2 GENERATED ALWAYS AS ROW END   NOT NULL,  

    PERIOD FOR SYSTEM_TIME (
        ValidFrom,
        ValidTo
    )  
)
WITH ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.CustomerHistory) );
GO


To query Temporal tables, you can use the code below. The code below will automatically look in the CustomerHistory table if its not in the Customer table.

SELECT * FROM dbo.Customer FOR SYSTEM_TIME AS OF '2015-1-1'

Temporal Tables Limitations

* Usage of Replication technologies is limited.
* INSERT and UPDATE statements cannot reference the SYSTEM_TIME period columns.
* Direct modification of the data in a history table is not permitted.
* Temporal querying over Linked Server is not supported.
* History table cannot have constraints (PK, FK, Table or Column constraints).
* TRUNCATE TABLE is not supported while SYSTEM_VERSIONING is ON
* INSTEAD OF triggers are not permitted on either the tables.


Tuesday 16 June 2015

Temporal in SQL Server 2016


Well I am so looking forward to using Temporal in SQL Server 2016, the ability to track changes in a table without creating triggers and custom history tables in a ad-hoc way sounds awesome.

Watch the video below to see how it works.


Monday 15 June 2015

SQL Server 2016 - Extended Events - Deadlocks Tracking

Below is some code to track deadlocks in your server using Extended Events

CREATE EVENT SESSION [Deadlock Tracking] ON SERVER 
ADD EVENT sqlserver.xml_deadlock_report(
    ACTION(sqlos.task_time,sqlos.worker_address,sqlserver.client_hostname,sqlserver.client_pid,sqlserver.database_id,sqlserver.database_name,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.transaction_sequence,sqlserver.username)) 
ADD TARGET package0.ring_buffer(SET max_memory=(102400))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO

Deadlock tracking is already tracked under the default 'system_health' Session, but if you just wanted  just to track deadlocks by itself, then the above code will work.

Once a deadlock occurs, it will produce a graph like the following so that you can investigate the problem further. 



You can also hover over the symbols to get more information about the deadlocks.


Sunday 14 June 2015

SQL Server 2016 - Creating you own System Health Check Extended Events

With SQL Server 2016, there is a default System Health Check session that is turned on automatically when the system starts. If you wanted to extend this System Health Check session to record additional events, it's not a good idea to modify the existing Session, but instead create a new System Health Check Session.

The code below is a script that you can use to create your new System Health Check Session, you just need to select where you are going to record the data (to a flat file or the ring buffer)

CREATE EVENT SESSION [system_health_New] ON SERVER 
ADD EVENT sqlclr.clr_allocation_failure(
    ACTION(package0.callstack,sqlserver.session_id)),
ADD EVENT sqlclr.clr_virtual_alloc_failure(
    ACTION(package0.callstack,sqlserver.session_id)),
ADD EVENT sqlos.memory_broker_ring_buffer_recorded,
ADD EVENT sqlos.memory_node_oom_ring_buffer_recorded(
    ACTION(package0.callstack,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_stack)),
ADD EVENT sqlos.scheduler_monitor_deadlock_ring_buffer_recorded,
ADD EVENT sqlos.scheduler_monitor_non_yielding_iocp_ring_buffer_recorded,
ADD EVENT sqlos.scheduler_monitor_non_yielding_ring_buffer_recorded,
ADD EVENT sqlos.scheduler_monitor_non_yielding_rm_ring_buffer_recorded,
ADD EVENT sqlos.scheduler_monitor_stalled_dispatcher_ring_buffer_recorded,
ADD EVENT sqlos.scheduler_monitor_system_health_ring_buffer_recorded,
ADD EVENT sqlos.wait_info(
    ACTION(package0.callstack,sqlserver.session_id,sqlserver.sql_text)
    WHERE ([duration]>(15000) AND ([wait_type]>=N'LATCH_NL' AND ([wait_type]>=N'PAGELATCH_NL' AND [wait_type]<=N'PAGELATCH_DT' OR [wait_type]<=N'LATCH_DT' OR [wait_type]>=N'PAGEIOLATCH_NL' AND [wait_type]<=N'PAGEIOLATCH_DT' OR [wait_type]>=N'IO_COMPLETION' AND [wait_type]<=N'NETWORK_IO' OR [wait_type]=N'RESOURCE_SEMAPHORE' OR [wait_type]=N'SOS_WORKER' OR [wait_type]>=N'FCB_REPLICA_WRITE' AND [wait_type]<=N'WRITELOG' OR [wait_type]=N'CMEMTHREAD' OR [wait_type]=N'TRACEWRITE' OR [wait_type]=N'RESOURCE_SEMAPHORE_MUTEX') OR [duration]>(30000) AND [wait_type]<=N'LCK_M_RX_X'))),
ADD EVENT sqlos.wait_info_external(
    ACTION(package0.callstack,sqlserver.session_id,sqlserver.sql_text)
    WHERE ([duration]>(5000) AND ([wait_type]>=N'PREEMPTIVE_OS_GENERICOPS' AND [wait_type]<=N'PREEMPTIVE_OS_ENCRYPTMESSAGE' OR [wait_type]>=N'PREEMPTIVE_OS_INITIALIZESECURITYCONTEXT' AND [wait_type]<=N'PREEMPTIVE_OS_QUERYSECURITYCONTEXTTOKEN' OR [wait_type]>=N'PREEMPTIVE_OS_AUTHZGETINFORMATIONFROMCONTEXT' AND [wait_type]<=N'PREEMPTIVE_OS_REVERTTOSELF' OR [wait_type]>=N'PREEMPTIVE_OS_CRYPTACQUIRECONTEXT' AND [wait_type]<=N'PREEMPTIVE_OS_DEVICEOPS' OR [wait_type]>=N'PREEMPTIVE_OS_NETGROUPGETUSERS' AND [wait_type]<=N'PREEMPTIVE_OS_NETUSERMODALSGET' OR [wait_type]>=N'PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICYFREE' AND [wait_type]<=N'PREEMPTIVE_OS_DOMAINSERVICESOPS' OR [wait_type]=N'PREEMPTIVE_OS_VERIFYSIGNATURE' OR [duration]>(45000) AND ([wait_type]>=N'PREEMPTIVE_OS_SETNAMEDSECURITYINFO' AND [wait_type]<=N'PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL' OR [wait_type]>=N'PREEMPTIVE_OS_RSFXDEVICEOPS' AND [wait_type]<=N'PREEMPTIVE_OS_DSGETDCNAME' OR [wait_type]>=N'PREEMPTIVE_OS_DTCOPS' AND [wait_type]<=N'PREEMPTIVE_DTC_ABORT' OR [wait_type]>=N'PREEMPTIVE_OS_CLOSEHANDLE' AND [wait_type]<=N'PREEMPTIVE_OS_FINDFILE' OR [wait_type]>=N'PREEMPTIVE_OS_GETCOMPRESSEDFILESIZE' AND [wait_type]<=N'PREEMPTIVE_ODBCOPS' OR [wait_type]>=N'PREEMPTIVE_OS_DISCONNECTNAMEDPIPE' AND [wait_type]<=N'PREEMPTIVE_CLOSEBACKUPMEDIA' OR [wait_type]=N'PREEMPTIVE_OS_AUTHENTICATIONOPS' OR [wait_type]=N'PREEMPTIVE_OS_FREECREDENTIALSHANDLE' OR [wait_type]=N'PREEMPTIVE_OS_AUTHORIZATIONOPS' OR [wait_type]=N'PREEMPTIVE_COM_COCREATEINSTANCE' OR [wait_type]=N'PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICY' OR [wait_type]=N'PREEMPTIVE_VSS_CREATESNAPSHOT')))),
ADD EVENT sqlserver.connectivity_ring_buffer_recorded(SET collect_call_stack=(1)),
ADD EVENT sqlserver.error_reported(
    ACTION(package0.callstack,sqlserver.database_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_stack)
    WHERE ([severity]>=(20) OR ([error_number]=(17803) OR [error_number]=(701) OR [error_number]=(802) OR [error_number]=(8645) OR [error_number]=(8651) OR [error_number]=(8657) OR [error_number]=(8902) OR [error_number]=(41354) OR [error_number]=(41355) OR [error_number]=(41367) OR [error_number]=(41384) OR [error_number]=(41336) OR [error_number]=(41309) OR [error_number]=(41312) OR [error_number]=(41313)))),
ADD EVENT sqlserver.security_error_ring_buffer_recorded(SET collect_call_stack=(1)),
ADD EVENT sqlserver.sp_server_diagnostics_component_result(SET collect_data=(1)
    WHERE ([sqlserver].[is_system]=(1) AND [component]<>(4))),
ADD EVENT sqlserver.xml_deadlock_report 
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=120 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)
GO

Saturday 13 June 2015

Extended Events - SQL Server 2016

Well I have playing with Extended Events in SQL Server 2016 and its really good.





























As you can see from above, Extended Events is located in the same place as in SQL Server 2014 within the 'Management' tab.

If you didn't know, Extended Events has been designed to replace SQL Profiler and Trace Flags within SQL Server and SQL Profiler will be disappearing in future versions of SQL Server so you really need to understand Extended Events if you want to troubleshoot and new features that appear in SQL Server going foward.

To set up an new Extended Event session to troubleshoot your system, you can do the following

1) Right click the 'Sessions' tab within the Extended Events section and select 'New Session Wizard'
2) Selecting this will open up a wizard screen that will take you through setting up the extended event.

Once your Event has been set-up, it will appear in the 'Sessions' section.



If you didn't select the option to start the extended event session when you created the extended event, you can start it now by right-clicking the event and selecting 'Start Session'

You can view live event data that happens within your system by selecting the extended event and selecting 'Watch Live Data'

That is it for setting up Extended Events Session, very easy to do and a vast improvement to SQL Trace and SQL Profiler.

Thursday 11 June 2015

SQL Server 2016 - Installation

Today, I finally found time to install SQL Server 2016 - CTP2 on a Window 8.1 Desktop PC

The software can be found here

http://www.microsoft.com/en-gb/server-cloud/products/sql-server-2016/

Installation was just like every other installation of SQL Server so you shouldn't have any trouble installing it if you have installed SQL Server before.

The only extra thing I had to install on my desktop was Java SE Runtime Environment

At the time of writing the latest version can be found here

http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

Other than that, it should be straightforward.

Friday 23 January 2015

SQL Server 2014 Comparisons

Want to know what is the difference between the different SQL Server 2014 editions, then click on the link below

SQL Server 2014 Comparisons

Wednesday 21 January 2015

Download SQL Server 2014 Express


Download SQL Server 2014 Express

These links are quick and easy ways of downloading SQL Server Express 2014


Useful SQL Server Information.



This is an great SQL Script to find out loads of information about your SQL Server Instance and operating system. Click on the link below to download.

It works from SQL Server 2008 R2 onwards.

SQL Server Information Download Link

Tuesday 20 January 2015

Software Developer C# (Up to £45,000pa)


Software Developer C# (Up to £45,000pa)

Role: Permanent
Reporting To : Team Lead
Salary : Up to £45,000 Negotiable dependent on Experience – (We are recruiting at all levels junior and above)
Hours: Monday – Friday 9.00am – 5.30pm


What’s the Software Developer role all about?
As we are a leading online retailer, millions of customers each year.


What will you get from us……
  • We will give you the opportunity to learn and hone the best engineering practices including Continuous Integration, Test Driven Development and SOLID principles.
  • Career progression opportunities
  • Personal development paid for by ao.com (Guaranteed 5 days each year)
  • The opportunity for International project experience
What will my responsibilities be as a Software Developer?
We have dedicated teams who work together to deliver software across the entire journey for our customers.
We have vacancies across teams involved in building software for every area of the ecommerce business including logistics, order processing systems, websites, supply chain and more.

  • Uncovering non-functional requirements – (“How many of these need processing in an hour”)
  • Choosing technology tools – “Have you guys seen this new java test runner?”
  • Choosing the best solution for the problem – “A spread sheet is not the best tool for this task”
  • Designing the solution – “Time to get the CRC cards out”
  • Implementing the solution – “cutting code”
  • Building quality in – red/green/refactor – TDD
  • Constantly improving our software processes – “How could we get more value out of our daily stand up?”
  • Constantly improving our engineering processes – “Is this a suitable candidate for automation?”
What skills do I NEED to have as a Software Developer?
We are looking for developers with experience in web based technology and development of both front end and back end systems
  • A degree in computing science or related subject is an advantage but not compulsory
  • We use the following technologies a lot, so commercial experience with them is beneficial, although you don’t need to be a master at them:
C# .Net (This is the bread and butter of the role and you will need a strong knowledge of the syntax)
ASP.Net
MVC
Javascript
HTML5
WCF
NUnit, Moq, ReSharper, SpecFlow
MS SQL 2008

If you can offer the following or are chomping at the bit to work alongside other likeminded team mates, keep reading.
  • Solid understanding of the practical application of agile development methods
  • Significant software development and infrastructure architecture experience in designing and architecting enterprise web applications
  • You will be the heart of an autonomous delivery team, so you should be proactive and great at problem solving
  • We prefer close collaboration over long-winded documentation, so you need to be a great communicator and have solid interpersonal skills
  • Nurture a close relationship with your internal customer and helping elicit requirements
  • Be an inspiration of innovation to the client
  • Maintain strong expertise and knowledge of current and emerging technologies and products
  • Have a desire to improve as a developer and be lifelong learner