Simon's SQL

SQL,DBA,tuning,Trouble Shooting,Performance

Bulk recovery model – Concerning about Point-in-time recovery.

Posted by Simon Cho on 08/01/2016

https://technet.microsoft.com/en-us/library/ms190692.aspx

Compared to the full recovery model, which fully logs all transactions, the bulk-logged recovery model minimally logs bulk operations, although fully logging other transactions. The bulk-logged recovery model protects against media failure and, for bulk operations, provides the best performance and least log space usage.

However, the bulk-logged recovery model increases the risk of data loss for these bulk-copy operations, because bulk logging operations prevents recapturing changes on a transaction-by-transaction basis. If a log backup contains any bulk-logged operations, you cannot restore to a point-in-time within that log backup; you can restore only the whole log backup.

 

Solution : We can run Log backup more frequently during a minimal logging operation.

https://technet.microsoft.com/en-us/library/ms190203(v=sql.105).aspx

For a database that uses full recovery, switching to the bulk-logged recovery model temporarily for bulk operations improves performance. However, point-in-time recovery is not possible with bulk-logged model. Therefore, if you run transactions under the bulk-logged recovery model that might require a transaction log restore, these transactions could be exposed to data loss. To maximize data recoverability in a disaster-recovery scenario, we recommend that you switch to the bulk-logged recovery model only under the following conditions:

  • Users are currently not allowed in the database.
  • All modifications made during bulk processing are recoverable without depending on taking a log backup; for example, by re-running the bulk processes.

If you satisfy these two conditions, you will not be exposed to any data loss while restoring a transaction log that was backed up under the bulk-logged recovery model.

We recommend that:

  • Before switching to the bulk-logged recovery model, you back up the log.This is important because, under the bulk-logged recovery model, if the database fails, backing up the log for bulk operations requires access to the data.
  • After performing the bulk operations, you immediately switch back to full recovery mode.
  • After switching back from the bulk-logged recovery model to the full recovery model, you back up the log again.

Posted in Common | Tagged: , , | Leave a Comment »

7/23/2016 SQL Saturday at Sacramento

Posted by Simon Cho on 07/23/2016

http://www.sqlsaturday.com/540/EventHome.aspx

It was the first session in the moring.

Thank you for joining.

 

Presentation File

 

SQLSaturday_Sancramento

 

 

Posted in Common | Tagged: , | Leave a Comment »

SQL.LA presentation file 7/21.

Posted by Simon Cho on 07/22/2016

Thank you all.

Here are the presentation file and script.

 

http://sql.la/

2016-07-22_12-14-12

Posted in Common | Tagged: | Leave a Comment »

SSIS Catalog Execution with T-SQL

Posted by Simon Cho on 06/10/2016

I create one SP to execute SSIS Catalog using T-SQL.

It sometimes helps to execute SSIS package dynamically.

Full script download link.

 

exec [dbo].[USP_EXEC_SSIS_Catalog]
@folder_name NVARCHAR(128)
, @project_name NVARCHAR(128)
, @package_name NVARCHAR(260)
, @Multi_CustomValue VARCHAR(MAX)= NULL –“<ParamName>|#|<ParamValue>|##|<ParamName>|#|<ParamValue>… Ex. “SyncBack_Period_DD|#|-14|##|BackupFolder|#|X:\Test”
, @reference_id BIGINT = NULL
, @use32bitruntime BIT = 0
, @execution_id BIGINT = NULL OUTPUT

Posted in Common | Tagged: , , , , | Leave a Comment »

I’m going to Speak at South Florida, 6/18 – Update Download link

Posted by Simon Cho on 06/10/2016

Please register it on SQL Saturday page

http://www.sqlsaturday.com/524/eventhome.aspx

  1. Build ETL efficiently (10x) with Minimal Logging : Presentation
  2. Myths and Truths about SQL Server Transaction : Presentation, Demo

@sqlsatSoFla #sqlsat524 #sqlsaturday

Posted in Common | Tagged: , , | Leave a Comment »

SQL Server 2016 installation

Posted by Simon Cho on 06/03/2016

SQL Server 2016 is released at 6/1.

https://www.microsoft.com/en-us/server-cloud/products/sql-server/

 

SQL Server 2014/2016 Developer edition are free after joining  Visual Studio Dev Essentials.

https://www.microsoft.com/en-us/server-cloud/products/sql-server/

 

Before install Please read release note. They ask VC runtime update before installation.

https://msdn.microsoft.com/en-us/library/dn876712.aspx


 

Install Patch Requirement (GA)

Issue and customer impact: Microsoft has identified a problem that affects the Microsoft VC++ 2013 Runtime binaries that are installed as a prerequisite by SQL Server 2016. An update is available to fix this problem. If this update to the VC runtime binaries is not installed, SQL Server 2016 may experience stability issues in certain scenarios. Before you install SQL Server 2016, check to see if the server needs the patch described in KB 3138367 – Update for Visual C++ 2013 and Visual C++ Redistributable Package.

KB 3138367 is required if the build version of msvcr120.dll is not 12.0.40649.5 or higher. To check the file build version:

  1. Open Windows Explorer.
  2. Navigate to %SystemRoot%\system32\msvcr120.dll.
  3. Right-click the file and then click Properties.
  4. Click the Details tab.
  5. Verify the file version is 12.0.40649.5 or higher.

If the build version of msvcr120.dll is not 12.0.40649.5 or higher you need to install KB 3138367.

Resolution: To install this required update, download and run the appropriate vcredist_*.exe based on your system language and architecture from KB 3138367.

If you have SQL Server 2016 installed on a computer that needs KB 3138367, do the following steps in order:

  1. Download the appropriate vcredist_*exe.
  2. Stop the SQL Server service for all instances of the database engine.
  3. Install KB 3138367.
  4. Reboot the computer.

 

Posted in Common | Tagged: , , | Leave a Comment »

“Myths and Truths about SQL Server Transaction” at Saturday Night SQL, 5/7 6:00 PM PST.

Posted by Simon Cho on 05/02/2016

http://saturdaynightsql.sqlpass.org/

Presentation file download link.

Script file download link.

This is all about SQL error handling and nested transaction issue.

 

 

I’ll do a presentation for “Myths and Truths about SQL Server Transaction” at Saturday Night SQL, 5/7 6:00 PM PST.

This is Virtual Chapter. So, you can join on online.

Posted in Common | Leave a Comment »

Recommended updates and configuration options for SQL Server 2012 and SQL Server 2014 with high-performance workloads

Posted by Simon Cho on 04/04/2016

https://support.microsoft.com/en-us/kb/2964518

 

Must read who is using SQL Server 2012 or SQL Server 2014.

Posted in Common | Leave a Comment »

4/9 Silicon Valley to speak on SQL Saturday.

Posted by Simon Cho on 03/30/2016

Presentation file is here.
20160409_BestPracticeForETL-MinimalLogging

http://www.sqlsaturday.com/493/Sessions/Schedule.aspx

I’m going to Silicon Valley to Speak on SQL Saturday.

Topic: “Best Practice for ETL – How to use minimal logging, and when? “

Location : Microsoft Technology Center, 1065 La Avenida, Mountain View, California, 94043, United States

SiliconValley_speak

Posted in Common | Leave a Comment »

checkDB detail

Posted by Simon Cho on 01/25/2016

http://www.sqlskills.com/blogs/paul/checkdb-from-every-angle-complete-description-of-all-checkdb-stages/

 

http://www.sqlskills.com/blogs/paul/corruption-bug-that-people-are-hitting-msg-8914-pfs-free-space/

 

Thanks, Paul

Posted in Common | Leave a Comment »

understading status column of sysfiles and sysaltfiles view

Posted by Simon Cho on 01/04/2016

First of all, let’s take a look system view

sp_helptext ‘sys.sysfiles’
sp_helptext ‘master.dbo.sysaltfiles’

<Sys.sysfiles – SQL2014>

CREATE VIEW sys.sysfiles AS
SELECT
fileid = convert(smallint, fileid & 0x7fff),
groupid = convert(smallint, grpid),
size = isnull(FilePropertyById(fileid, ‘size’), size),
maxsize, growth,
status = convert(int,
case filetype when 1 then 66 else 2 end — x_eft_SQLLog, FCB_LOG_DEVICE, FCB_DSK_DEVICE
+ (status & 8) * 2 — FCB_READONLY_MEDIA
+ (status & 16) * 256 — FCB_READONLY
+ case filestate when 6 then 268435456 else 0 end — OFFLINE, FCB_OFFLINE
+ (status & 256) * 2097152 — FCB_SPARSE_FILE
+ (status & 32) * 32768), — FCB_PERCENT_GROWTH
perf = convert(int, 0),
name = lname,
filename = pname
FROM sys.sysprufiles
WHERE filetype IN (0, 1) — x_eft_SQLData, x_eft_SQLLog (bwkcmpt types)
AND filestate NOT IN (1, 2, 3) — x_efs_Dummy, x_efs_Dropped, x_efs_DroppedReusePending

 

<master.dbo.sysaltfiles – SQL2014>

CREATE VIEW sys.sysaltfiles AS
SELECT fileid = convert(smallint, f.fileid & 0x7fff),
groupid = convert(smallint, f.grpid),
f.size, f.maxsize, f.growth,
status = convert(int,
case f.filetype when 1 then 66 else 2 end — x_eft_SQLLog, FCB_LOG_DEVICE, FCB_DSK_DEVICE
+ (f.status & 8) * 2 — FCB_READONLY_MEDIA
+ (f. status & 16) * 256 — FCB_READONLY
+ case when f.filestate in (1, 2, 3, 6) then 268435456 else 0 end — OFFLINE, FCB_OFFLINE
+ (f.status & 256) * 2097152 — FCB_SPARSE_FILE
+ (f.status & 32) * 32768), — FCB_PERCENT_GROWTH
perf = convert(int, 0),
dbid = convert(smallint, f.dbid),
name = f.lname, filename = f.pname
FROM master.sys.sysbrickfiles f
WHERE f.filetype IN (0, 1) AND has_access(‘MF’, 1) = 1 — x_eft_SQLData, x_eft_SQLLog (bwkcmpt types)

 

You can find out the source code looks like below for status

status = convert(int,
case filetype when 1 then 66 else 2 end — x_eft_SQLLog, FCB_LOG_DEVICE, FCB_DSK_DEVICE
+ (status & 8) * 2 — FCB_READONLY_MEDIA
+ (status & 16) * 256 — FCB_READONLY
+ case filestate when 6 then 268435456 else 0 end — OFFLINE, FCB_OFFLINE
+ (status & 256) * 2097152 — FCB_SPARSE_FILE
+ (status & 32) * 32768), — FCB_PERCENT_GROWTH

 

This is bit operation. So, it need to convert back using same operation.

SELECT *
, status
, status & 2 AS [FCB_DSK_DEVICE]
, status & 66 AS [FCB_LOG_DEVICE]
, status & (8 * 2) AS [FCB_READONLY_MEDIA]
, status & (16 * 256) AS [FCB_READONLY]
, status & (268435456) AS [OFFLINE, FCB_OFFLINE]
, status & (256 * 2097152) AS [FCB_SPARSE_FILE]
, status & (32 * 32768) AS [FCB_PERCENT_GROWTH]
FROM master..sysaltfiles

This query equivalent with below query

/*
SELECT CONVERT(VARBINARY(8), 2)
SELECT CONVERT(VARBINARY(8), 66)
SELECT CONVERT(VARBINARY(8), (8 * 2))
SELECT CONVERT(VARBINARY(8), (16 * 256))
SELECT CONVERT(VARBINARY(8), 268435456)
SELECT CONVERT(VARBINARY(8), (256 * 2097152))
SELECT CONVERT(VARBINARY(8), (32 * 32768))
*/
SELECT *
, status
, status & 0x2 AS [FCB_DSK_DEVICE]
, status & 0x42 AS [FCB_LOG_DEVICE]
, status & 0x10 AS [FCB_READONLY_MEDIA]
, status & 0x1000 AS [FCB_READONLY]
, status & 0x10000000 AS [OFFLINE, FCB_OFFLINE]
, status & 0x20000000 AS [FCB_SPARSE_FILE]
, status & 0x100000 AS [FCB_PERCENT_GROWTH]
FROM master..sysaltfiles

BOL saying “0x40 = Log file.” since this is bit operation.

I realized it. It’s due to “FCB_DSK_DEVICE” included. So, 0x40+2 = 0x42.

So, 0x40 is for FCB_LOG_DEVICE

https://msdn.microsoft.com/en-us/library/ms178009.aspx

 

Final query

SELECT *
, status
, CONVERT(BIT, status & 0x2) AS [FCB_DSK_DEVICE]
, CONVERT(BIT, status & 0x40) AS [FCB_LOG_DEVICE]
, CONVERT(BIT, status & 0x10) AS [FCB_READONLY_MEDIA]
, CONVERT(BIT, status & 0x1000) AS [FCB_READONLY]
, CONVERT(BIT, status & 0x10000000) AS [OFFLINE, FCB_OFFLINE]
, CONVERT(BIT, status & 0x20000000) AS [FCB_SPARSE_FILE]
, CONVERT(BIT, status & 0x100000) AS [FCB_PERCENT_GROWTH]
FROM master..sysaltfiles

 

 

 

Posted in Common | Tagged: , | Leave a Comment »

Between 4096 and 512 sector size issue.

Posted by Simon Cho on 11/16/2015

There are 2 issues in case of primary server has 512 sector size, and secondary server has 4096 sector size

  • You may see below message in the SQL server error log

There have been 170613760 misaligned log IOs which required falling back to synchronous IO.  The current IO is on file

  • If you are using Log Shipping with standby mode on secondary server, standby mode may fail frequently.

Msg 9004, Level 16, State 6, Line 7
An error occurred while processing the log for database ‘MessageExchange_Sanpedro’. If possible, restore from backup. If a backup is not available, it might be necessary to rebuild the log.

 

Please check 4k and 512 basic concept in below url.

http://blogs.msdn.com/b/saponsqlserver/archive/2014/10/02/message-misaligned-log-ios-which-required-falling-back-to-synchronous-io-in-sql-server-error-log.aspx

http://blogs.msdn.com/b/psssql/archive/2011/01/13/sql-server-new-drives-use-4k-sector-size.aspx

http://blogs.msdn.com/b/psssql/archive/2013/05/15/sql-server-storage-spaces-vhdx-and-4k-sector-size.aspx

 

Solution

https://support.microsoft.com/en-us/kb/3009974 : I don’t know how it work internally. It might force the primary to 4K alignment. Please fully test it out and apply it.

Note After you apply this hotfix, you have to turn on the trace flag 1800 to make this hotfix work correctly.

https://support.microsoft.com/en-us/kb/2987585 : This one is great. Need to turn on trace flag 3057

 

Thanks Bob ward and Robert Dorr for investigation.

Posted in Common | Tagged: , , , , | Leave a Comment »

Speak at Huntington Beach 4/11/2015

Posted by Simon Cho on 08/20/2015

download link

SQLSaturday_HuntingtonBeach_20150411

Posted in Common | Leave a Comment »

SSIS package unexpected Termination

Posted by Simon Cho on 07/08/2015

SQL server 2012 or 2014.

1. Please check service pack first.

SQL server 2012
https://support.microsoft.com/en-us/kb/2837964

SQL server 2014
https://support.microsoft.com/en-us/kb/2993859

 

2. If you have still problem, please check that memory pressure. You may can find warning on event log.

<Unexpected termination>

Unexpected_Termination

Unexpected_Termination

<EventLog>

Unexpected_termination_EventLog

Unexpected_termination_EventLog

Posted in Common | Tagged: , , | Leave a Comment »

AlwaysOn AG group status check

Posted by Simon Cho on 06/15/2015

SELECT replica_server_name
, d.role_desc
, d.connected_state_desc
–, endpoint_url
–, availability_mode_desc
–, failover_mode_desc
–, session_timeout
–, backup_priority
–, secondary_role_allow_connections_desc AS Secondary_Readable
, Pri_Check.pri_Status
–, Pri_Check.Sec_Status
–, Pri_Check.Sync_Status
, d.operational_state_desc
, d.recovery_health_desc
, d.synchronization_health_desc AS Sync_Status
, d.last_connect_error_description AS ErrorMsg
, DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), GETDATE()), d.last_connect_error_timestamp) AS ErrorDateTime
FROM sys.availability_replicas r
OUTER APPLY (
SELECT 1 AS IsPrimary
, c.ip_address AS listnerIP
, c.state_desc AS listnerStatus
, a.primary_recovery_health_desc AS pri_Status
, a.secondary_recovery_health_desc AS Sec_Status
, a.synchronization_health_desc AS Sync_Status
FROM sys.dm_hadr_availability_group_states a
JOIN sys.availability_group_listeners B
ON A.group_id = B.group_id
JOIN sys.availability_group_listener_ip_addresses c
ON b.listener_id = c.listener_id
WHERE primary_replica = r.replica_server_name
) Pri_Check
JOIN sys.dm_hadr_availability_replica_states d
ON r.replica_id = d.replica_id
/*
WHERE d.role NOT IN (1,2) — 1:Primary, 2:Secondary, 0:Resolving
OR d.operational_state <> 2 –0 = Pending failover, 1 = Pending, 2 = Online, 3 = Offline, 4 = Failed, 5 = Failed, no quorum
OR d.recovery_health <> 1 –0:In progress. At least one joined database has a database state other than ONLINE ( database_state is not 0).1- Online. All the joined databases have a database state of ONLINE ( database_state is 0).
OR d.synchronization_health <>2 — 0 = Not healthy. At least one joined database is in the NOT SYNCHRONIZING state.
— 1 = Partially healthy. Some replicas are not in the target synchronization state: synchronous-commit replicas should be synchronized, and asynchronous-commit replicas should be synchronizing.
— 2= Healthy. All replicas are in the target synchronization state: synchronous-commit replicas are synchronized, and asynchronous-commit replicas are synchronizing.
OR d.connected_state <> 1 –0 Disconnected. The response of an availability replica to the DISCONNECTED state depends on its role, as follows:
— On the primary replica, if a secondary replica is disconnected, its secondary databases are marked as NOT SYNCHRONIZED on the primary replica, which waits for the secondary to reconnect.
— On a secondary replica, upon detecting that it is disconnected, the secondary replica attempts to reconnect to the primary replica.
— 1 Connected
OR d.last_connect_error_number IS NOT NULL
*/

Posted in Common | Leave a Comment »

SQL 2014 service pack for SP1 or CU7?

Posted by Simon Cho on 06/15/2015

https://support.microsoft.com/en-us/kb/2936603

SQL service pack SP1 is announced.

https://support.microsoft.com/en-us/kb/2936603

And CU7 and SP1 both of the latest build for now.

 

The problem is, SP1 has higher version. But, it looks not containing CU6 and CU7.

CU6 and CU7 include very critical KB as well.

You may not want to apply SP1. Please check CU6 and CU7 first.

 

 

ServicePack VSTS bug number KB article number Description Fix area
CU6 4067265 3016165 FIX: Arithmetic overflow error occurs when you add manually initialized subscriptions for publication in SQL Server SQL service
CU6 4067300 3021757 FIX: Duplicate sequence value is generated when you run sp_sequence_get_range in parallel with NEXT VALUE FOR function SQL service
CU6 3986465 3024815 Large query compilation waits on RESOURCE_SEMAPHORE_QUERY_COMPILE in SQL Server 2014 SQL performance
CU6 3915402 3025845 FIX: The transaction isolation level is reset incorrectly when the SQL Server connection is released in SQL Server 2014 SQL service
CU6 4067260 3026082 FIX: SOS_CACHESTORE spinlock contention on system table rowset cache causes high CPU usage in SQL Server 2012 or 2014 SQL service
CU6 4067263 3026083 FIX: SOS_CACHESTORE spinlock contention on ad hoc SQL Server plan cache causes high CPU usage in SQL Server 2012 or 2014 SQL service
CU6 3856439 3029762 FIX: Access violation occurs when you delete rows from a table that has clustered columnstore index in SQL Server 2014 SQL service
CU6 4067312 3029825 FIX: DBCC CHECKDB and DBCC CHECKTABLE take longer to run when SQL CLR UDTs are involved in SQL Server 2012 or SQL Server 2014 SQL performance
CU6 3885366 3030041 FIX: Error occurs when you connect to the database engine after you install CU4 for SQL Server 2014 Setup & Install
CU6 3749961 3030619 FIX: Incorrect data returned when you use DATE data type as a qualifier in a query in SQL Server 2014 SQL service
CU6 4072235 3034615 FIX: Memory leak occurs when you run DBCC CHECKDB against a database in SQL Server 2014 SQL service
CU6 4045776 3034679 FIX: AlwaysOn availability groups are reported as NOT SYNCHRONIZING High Availability
CU7 4210782 3042544 FIX: A query that requires nested loops join takes longer to complete in SQL Server 2014 SQL performance
CU7 4326599 3044958 FIX: Rollback recovery on a snapshot fails when you run DBCC CHECKDB and then SQL Server shuts down unexpectedly SQL service
CU7 4326597 3032476 FIX: Memory leak in USERSTORE_SCHEMAMGR and CPU spikes occur when you use temp table in SQL Server 2012 or 2014 SQL service
CU7 4336264 3037624 FIX: Complex parallel query does not respond in SQL Server 2012 or SQL Server 2014 SQL performance
CU7 4265652 3042370 An AlwaysOn secondary replica crashes or raises error 3961 when the AlwaysOn database has CLR UDT in SQL Server 2014 SQL service
CU7 4326600 3042135 FIX: Access violation and “No exceptions should be raised by this code” error occur when you use SQL Server 2012 or SQL Server 2014 SQL service
CU7 4056944 3048752 FIX: A SELECT query run as a parallel batch-mode scan may cause a deadlock situation in SQL Server 2014 SQL service
CU7 4302739 3052404 FIX: You cannot use the Transport Layer Security protocol version 1.2 to connect to a server that is running SQL Server 2014 SQL connectivity
CU7 4329649 3048856 FIX: Error 3624 occurs when you execute a query that contains multiple bulk insert statements in SQL Server 2014 SQL service
CU6 4067280 3011465 FIX: Sequence object generates duplicate sequence values when SQL Server 2012 or SQL Server 2014 is under memory pressure SQL service

 

Posted in Common | Leave a Comment »

Parallelism

Posted by Simon Cho on 02/24/2015

http://blogs.msdn.com/b/craigfr/

Posted in Common | Leave a Comment »

misaligned log ios which required falling back to synchronous io between 4096 and 512e

Posted by Simon Cho on 02/13/2015

https://kb.netapp.com/support/index?page=content&id=1010881
https://kb.netapp.com/support/index?page=content&id=3011193
https://kb.netapp.com/support/index?page=content&id=1014111
http://www.netapp.com/us/system/pdf-reader.aspx?m=tr-3428.pdf&cc=us
http://www.netapp.com/us/system/pdf-reader.aspx?m=tr-3747.pdf&cc=us
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009658

http://blog.jgriffiths.org/?p=592
https://www.vmware.com/support/developer/vddk/vmdk_50_technote.pdf?src=vmdk
http://www.randomnoun.com/wp/2013/09/12/determining-the-file-at-a-specific-vmdk-offset/

http://blogs.msdn.com/b/saponsqlserver/archive/2014/10/02/message-misaligned-log-ios-which-required-falling-back-to-synchronous-io-in-sql-server-error-log.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/hh182553(v=vs.85).aspx
http://support.microsoft.com/kb/982018?wa=wsignin1.0
https://msdn.microsoft.com/en-us/library/windows/desktop/hh182553(v=vs.85).aspx
http://blogs.msdn.com/b/psssql/archive/2013/05/15/sql-server-storage-spaces-vhdx-and-4k-sector-size.aspx
https://technet.microsoft.com/en-us/sqlserver/aa365683(v=vs.100).aspx
http://blogs.msdn.com/b/psssql/archive/2011/01/13/sql-server-new-drives-use-4k-sector-size.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/hh848035(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/cc966412.aspx#EEAA
http://sqlcommunity.com/SQL-TEAMS/SAP-on-SQL
https://kb.netapp.com/support/index?page=content&id=1010803&actp=search&viewlocale=en_US&searchid=1423875704148

Posted in Common | 1 Comment »

SQL Saturday Presentation file – 9/20/2014

Posted by Simon Cho on 01/17/2015

Please download file from below link.

link

 

2014-09-20_SQLSat_Sandiego

Posted in Common | Leave a Comment »

SQL.la Presentation file – Transaction 1/15/2015

Posted by Simon Cho on 01/17/2015

 

 

Please download from below link to get presentation and Demo file.

Link
2015-01-15_SQL.LA

 

 

 

 

 

Posted in Common | Leave a Comment »

 
Follow

Get every new post delivered to your Inbox.