Friday, May 27, 2011

CHECKPOINT in SQL Server

 

What is CHECKPOINT?

As per BOL definition “ Writes all dirty pages for the current database to disk.
Dirty pages are data pages that have been entered into the buffer cache and modified, but not yet written to disk.
Checkpoints save time during a later recovery by creating a point at which all dirty pages are guaranteed to have been written to disk”

This minimizes the active portion of the log that must be processed during a full recovery of a database.

What are the Events that causes CHECKPOINT?

1. Before Database Backup

Before a database backup, the Database Engine automatically performs a checkpoint so that all changes to the database pages are contained in the backup.

2. Active Log exceeds recovery interval

The active portion of the log exceeds the size that the server could recover in the amount of time specified in the recovery interval server configuration option.

3. The log becomes 70 percent full, and the database is in log-truncate mode.

A database is in log truncate mode when both these conditions are TRUE: the database is using the Simple recovery model, and, after execution of the last BACKUP DATABASE statement that referenced the database, one of the following events occurs:

  • BULK_LOG Recovery: A minimally logged operation is performed in the database, such as a minimally logged bulk copy operation or a minimally logged WRITETEXT statement is executed.
  • An ALTER DATABASE statement is executed that adds or deletes a file in the database

4. Stopping a SQL Server issues a checkpoint in each database on the server

5. CHECKPOINT:
A CHECKPOINT statement is explicitly executed. A checkpoint occurs in the current database for the connection.

6. Database Shutdown
An activity requiring a database shutdown is performed. For example, AUTO_CLOSE is ON and the last user connection to the database is closed, or a database option change is made that requires a restart of the database.

 

Thursday, May 19, 2011

SQL Server Management Studio – SSMS is a 32 bit application


SQL Server Management Studio – SSMS is a 32 bit application. Even when we install 64 bit SQL Server Database Engine, we will get 32 bit SSMS installed on the server.

Default SSMS install location

32 Bit Server C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE
64 Bit Server C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE

Monday, May 16, 2011

Maintenance Plan Error: Alter failed for Server SQLServer_Instance

 

Error message: Alter failed for Server ‘SivaSQL2008’

image 

When I ran SQL Profiler and checked why its failing, observed;
Errors when it was trying to execute

SP_CONFIGURE 'USER OPTION',0 ;
RECONFIGURE

Error: 5808, Severity: 16, State: 1
Ad hoc update to system catalogs is not supported.

The reason for why AD HOC UPDATE TO SYSTEM CATALOGS is not supported.
Why it is trying to change SYSTEM CATALOGS at first place?

In SQL Server 2000 and older, this option allowed users to make updates directly to the system tables.
In SQL Server 2005 and higher, the system tables are, replaced with the Resource Database and system views.
This option is no longer supported in SQL Server 2005 and higher version, and though we can set Allow Updates to 1 with no error. As soon as we run RECONFIGURE, we will receive the error that ad hoc updates are not supported.

Because Allow Updates had been set to 1 and my Maintenance Plan runs the RECONGIFURE statement, this error was thrown and the Maintenance Plan failed.

As per Books On Line:

Changing the allow updates option will cause the RECONFIGURE statement to fail. Changes to the allow updates option should be removed from all scripts.

Resolution:
So to resolve is configured ALLOW UPDATE back to 0 and again ran Maintenance Plan and it executes fine.

sp_configure 'allow update', 0
reconfigure

How to create scripts for an entire database or specific object in SQL Server 2008?


In this post I would like to address the requirement of;

  • How to create scripts for an entire database ?
  • How to create scripts limit it to specific objects?
  • How to restore SQL Server 2005 database on SQL Server 2000?

SQL Server Database Publishing Wizard enables the deployment of SQL Server databases into a hosted environment on either a SQL Server 2000 or 2005 server.

It generates a single SQL script file which can be used to recreate a database (both schema and data) in a shared hosting environment where the only connectivity to a server is through a web-based control panel with a script execution window.

If supported by the hosting service provider, the Database Publishing Wizard can also directly upload databases to servers located at the shared hosting provider.

We can use the Generate and Publish Scripts Wizard to create scripts for transferring a database from one instance of the Database Engine to another. You can generate scripts for a database on an instance of the Database Engine in your local network, or from SQL Azure.

The generated scripts can be run on another instance of the Database Engine or SQL Azure. 

We can also use the wizard to publish the contents of a database directly to a Web service created by using the Database Publishing Services.

We can create scripts for an entire database, or limit it to specific objects.

What version of SQL Servers are supported on this?

  Source Database Target Database 
SQL Server Instance Version Supported
  • SQL Server 2005
  • SQL Server 2008
  • SQL Server 2008 R2
  • SQL Azure
  • SQL Server 2005
  • SQL Server 2008
  • SQL Server 2008 R2
  • SQL Azure
  • SQL Server 2000
Permission needed db_ddladmin db_ddladmin
Pre-existence   The target database must be created at the hosting provider before the source database is published.
Publishing overwrites objects in that existing database

Supported Objects for Publishing

The following table lists the objects that can be published and the versions of SQL Server on which they are supported by the Generate and Publish Scripts Wizard.

Database object

SQL Server 2008 R2

SQL Server 2008

SQL Server 2005

SQL Server 2000

Application role

Yes

Yes

Yes

Yes

Assembly

Yes

Yes

Yes

No

CHECK constraint

Yes

Yes

Yes

Yes

CLR (common language runtime) stored procedure1

Yes

Yes

Yes

No

CLR user-defined function

Yes

Yes

Yes

No

Database role

Yes

Yes

Yes

Yes

DEFAULT constraint

Yes

Yes

Yes

Yes

Full-text catalog

Yes

Yes

Yes

Yes

Index

Yes

Yes

Yes

Yes

Rule

Yes

Yes

Yes

Yes

Schema

Yes

Yes

Yes

No

Stored procedure1

Yes

Yes

Yes

Yes

Synonym

Yes

Yes

Yes

Yes

Table

Yes

Yes

Yes

Yes

User2

Yes

Yes

Yes

Yes

User-defined aggregate

Yes

Yes

Yes

No

User-defined data type

Yes

Yes

Yes

Yes

User-defined function

Yes

Yes

Yes

Yes

User-defined table

Yes

Yes

No

No

User-defined type

Yes

Yes

Yes

No

View1

Yes

Yes

Yes

Yes

XML schema collection

Yes

Yes

Yes

 

1 Published without encryption.
2 Any non-system users that exist in the database are published as Roles.

How to generate SQL Scripts using Generate and Publish Scripts Wizard

We can create Transact-SQL scripts for multiple objects by using the Generate and Publish Scripts Wizard.. You can also generate a script for individual objects or multiple objects by using the Script as menu in Object Explorer.

Use the Generate and Publish Scripts Wizard to create a Transact-SQL script for many objects.
The wizard generates a script of all the objects in a database, or a subset of the objects that you select. The wizard has many options for your scripts, such as whether to include permissions, collation, constraints, and so on.

Step 1:

In Object Explorer, expand Databases, right-click a database, point to Tasks, and then click Generate Scripts. Follow the steps in the wizard to script the database objects.

image

image 

Step 2: On the Choose Objects page, select the objects to be included in the script


Script entire database and all database objects
Click to generate scripts for all objects in the database and to include a script for the database itself.

image

Step 1.3: On the Set Scripting Options page, select Save scripts to a specific location.

image

Select Save scripts to a specific location

image
Summary:

image

Click Finish.

To generate the Script for the Data on the table:

Set “Script Data: True “

 image

Select specific database objects
Click to limit the wizard to generate scripts for only the specific objects in the database that you choose.

For example I have selected Tables Object

 image

Within Tables Object, I have chosen HumanResources.Employee Table

image 

Select Save scripts to a specific location

image

Script Wizard Summary
image 

image

View of the Output file generated:

image 

References:

Using the Generate and Publish Scripts Wizard

How to: Generate a Script (SQL Server Management Studio)

Wednesday, May 11, 2011

Useful Microsoft SQL Server websites on SQL Server


Here, is the list of useful Microsoft SQL Server Websites.

Title Description / Content Website
Microsoft SQL Server
Commercial Site
Buy, About Pricing, Edition, License
Positioning whitepapers
Case Study
Edition
Product Information
Customers
Partners
Support
http://www.microsoft.com/sqlserver/en/us/default.aspx
SQL Server Books On Line ( BOL ) Books On Line - BOL http://msdn.microsoft.com/en-us/library/ms130214.aspx
MSDN SQL Server Forum SQL Server Online Community Forum http://social.msdn.microsoft.com/Forums/en/category/sqlserver/
  SQL Server Training Webinars
Community Blogs
Learning Resources
http://msdn.microsoft.com/en-us/sqlserver/default.aspx
SQL Server Technet Troubleshoot an issue
Top Support Solutions
http://technet.microsoft.com/en-us/sqlserver/default.aspx
SQL Server Certification Certification Path
Certification Title
Courses
http://www.microsoft.com/learning/en/us/certification/cert-sql-server.aspx

Msg 3701, Level 11, State 5, Line 1 Cannot drop the trigger ‘ ‘, because it does not exist or you do not have permission.

 

I got the error message below, when i was playing with DDL Trigger on SQL Server 2008.
The trigger exists, i have cross verified querying;

select *
from master.sys.server_triggers
where name = 'connection_limit_trigger'


select objectproperty(1435152158, 'isTrigger') isTrigger
       ,objectproperty(1435152158, 'ownerid') ownerID

Error Message:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the trigger 'connection_limit_trigger', because it does not exist or you do not have permission.

Resolution:

After scratching my head, i found the resolution. It is simple !

If the trigger is DATABASE Level scope use below

Drop TRIGGER connection_limit_trigger on Database

Otherwise if it is Server Level scope please try below;

Drop TRIGGER connection_limit_trigger on all server

Cause:
The lost bold command i.e. scope level makes the different.
When we use DDL Trigger and trying to drop using the DROP command, we should match the scope level of the trigger when it created.

Tuesday, May 10, 2011

The server principal is set as the execution context of a trigger or event notification and cannot be dropped.

 

I got error message below when i try to drop a login named ‘test_login’

Error Message:
Msg 15186, Level 16, State 1, Line 1
The server principal is set as the execution context of a trigger or event notification and cannot be dropped.

It means that there are  execute as username in a stored procedure or function or triggers, and that is why it will not allow me to drop the user.

EXECUTE permission - a check is made to see if this permission is granted. If yes the user is allowed to run the stored procedure

EXECUTE AS - when the stored procedure is run, it will run under the context of the user specified in the clause rather than the context of the user who has run it.

Use the query below find the execute as object

select object_name(object_id)
from sys.sql_modules
where execute_as_principal_id = user_id('test_login')

How to find the Dynamic Management Views on SQL Server Management Studio?

 

Expand the Views –> System Views on each database nodes.

image

Tuesday, May 03, 2011

Change Tracking Vs. Change Data Capture ( CDC ) in SQL Server 2008

 

Here we find the difference between the Change Track vs Change Data Capture in SQL Server 2008. Both helps in tracking the table changes and security compliance.

Change Track Change Data Capture – CDC
It is about fact:
It captures only the fact as the tracking table has changed. It does NOT capture the data.
Therefore, change tracking is more limited in the historical questions it can answer compared to change data capture. However, for those applications that do not require the historical information, there is far less storage overhead because of the changed data not being captured
It is about the Data:
Change data capture provides historical change information for a user table by capturing both the fact that DML changes were made and the actual data that was changed.

Storage:
Internal tables are placed on the same filegroup as the parent entity. You could use the sys.internal_tables catalog view to show all the internal tables and parent entities. For example:
select name, object_name(parent_id) as parent_object from sys.internal_tables

Storage:
When change data capture is enabled for a database, a few things are added to the database, including a new schema (called cdc), some metadata tables, and a trigger to capture Data Definition Language (DDL) events.

The two function names are, respectively, fn_cdc_get_all_changes_ and fn_cdc_get_net_changes_, with the capture instance name appended. Note that (like the change tracking feature) this functionality requires the table to have a primary key or other unique index.
Supported on “Simple” recovery model also.
It is recommended that you use snapshot isolation when change tracking is enabled. Snapshot isolation itself can add significant workload overhead and requires much more careful management of tempdb.
Prevents Log truncation.
Forces full logging of some bulk operations.

One major point to note here is that once change data capture is enabled, the transaction log behaves just as it does with transactional replication—the log cannot be truncated until the log reader has processed it. This means a checkpoint operation, even in SIMPLE recovery mode, will not truncate the log unless it has already been processed by the log reader.
It uses synchronous tracking mechanism.
once a database is enabled for change tracking, a version number is instituted, which allows ordering of operations
Change Data Capture (CDC) uses the asynchronous process that reads the transaction log.
Change Tracking has minimal impact on the system. It has almost nil impact as it asynchronous mechanism reads from the transaction log.
It uses TempDB heavily It uses transaction log.
DDL Restriction:
There are restrictions on the DDL that can be performed on a table being tracked. The most notable restriction is that the primary key cannot be altered in any way. The other restriction worth calling out here is that an ALTER TABLE SWITCH will fail if either table involved has change tracking enabled.
No such DDL restriction
SQL Agent not needed It requires SQL Agent to be running.
SQL Agent Job & Transaction Replication:
Two SQL Agent jobs may be created: the capture job and the cleanup job. I say "may be created" because the capture job is the same as the one used for harvesting transactions in transactional replication.
If transactional replication is already configured, then only the cleanup job will be created and the existing log reader job will also be used as the capture job
Permission required to enable: SYSADMIN Permission required to enable: DBOwner

 

Reference:

Comparing Change Data Capture and Change Tracking

Tracking Changes in your Enterprise

Monday, May 02, 2011

How to find the status of Backup / Restore in SQL Server 2000


To know the status of backup or restore in SQL Server 2000 ;

1. Find the SPID which is restoring the DB using sp_who2 or from sysprocesses

2. Execute dbcc outputbuffer(SPID)

From the output get the %completed status:

image