Senin, 28 Maret 2011

Konsep Himpunan dalam SQL

1. Pemakaian INNER JOIN
Seandainya kita mempunyai 2 ( dua ) himpunan :

A = {’1001′, ’1002′, ’1003′, ’1004′, ’1005′}
B = {’1002′, ’1004′, ’1006′, ’1007′}

Maka anggota A dan B adalah C = {’1002′, ’1004′}

Jadi C merupakan irisan dari himpunan A dan B
Dan bentuk perintah SQL menjadi

SELECT* FROM A INNER JOIN B ON A.KODE = B.KODE

Jadi A dan B dihubungan dengan field yang bernama KODE dimana isi dari kode tersebut merupakan anggota dari suatu himpunan.

2. Pemakaian LEFT JOIN
Pemakaian perintah ini memang agak susah dipahami kalau kita tidak bergelut di bidang programming, walaupun agak jarang dipakai tetapi ada kalanya kita harus memakai perintah ini, tujuannya agar semua data utama (A) ditampilkan semua sedangkan data B yang diperlukan atau ditampilkan adalah field-field kedua yang muncul akibat dari relasi tersebut. Akan saya coba terangkan dengan konsep Himpunan.

A = {’1001′, ’1002′, ’1003′, ’1004′, ’1005′}
B = {’1002′, ’1004′, ’1006′, ’1007′}

Dari 2 ( dua ) himpunan tersebut kalau kita memakai LEFT JOIN hasilnya
C = {’1001′, ’1002′, ’1003′, ’1004′, ’1005′}

3. Pemakaian RIGHT JOIN
Ini adalah kebalikan dari pemakaian LEFT JOIN, Perintah RIGHT JOIN ini hampir-hampir tidak pernah dipakai artinya sangat jarang sekali dipakai. Dan bentuk himpunannya adalah sebagai berikut :

A = {’1001′, ’1002′, ’1003′, ’1004′, ’1005′}
B = {’1002′, ’1004′, ’1006′, ’1007′}

Dari 2 ( dua ) himpunan tersebut kalau kita memakai RIGHT JOIN hasilnya
C = {’1002′, ’1004′, ’1006′, ’1007′}

Tulisan di atas saya peroleh dari internet, maaf saya lupa mencantumkan sumbernya :)

Script Backup and Restore Database untuk SQL Server 2k/2k5

Berikut saya copykan script untuk backup database SQL Server baik SQL Server 2000 maupun SQL Server 2005

DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name

SET @path = 'C:\Backup\'

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)

DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb')

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName

FETCH NEXT FROM db_cursor INTO @name
END

CLOSE db_cursor
DEALLOCATE db_cursor

Keterangan :
@path berisi tempat lokasi file backup akan diletakkan.


Berikut saya copykan script untuk merestore database SQL Server baik 2000 maupun 2005

USE Master;
GO
SET NOCOUNT ON

-- 1 - Variable declaration
DECLARE @dbName sysname
DECLARE @backupPath NVARCHAR(500)
DECLARE @cmd NVARCHAR(500)
DECLARE @fileList TABLE (backupFile NVARCHAR(255))
DECLARE @lastFullBackup NVARCHAR(500)
DECLARE @lastDiffBackup NVARCHAR(500)
DECLARE @backupFile NVARCHAR(500)

-- 2 - Initialize variables
SET @dbName = 'Customer'
SET @backupPath = 'D:\SQLBackups\'

-- 3 - get list of files
SET @cmd = 'DIR /b ' + @backupPath

INSERT INTO @fileList(backupFile)
EXEC master.sys.xp_cmdshell @cmd

-- 4 - Find latest full backup
SELECT @lastFullBackup = MAX(backupFile)
FROM @fileList
WHERE backupFile LIKE '%.BAK'
AND backupFile LIKE @dbName + '%'

SET @cmd = 'RESTORE DATABASE ' + @dbName + ' FROM DISK = '''
+ @backupPath + @lastFullBackup + ''' WITH NORECOVERY, REPLACE'
PRINT @cmd

-- 4 - Find latest diff backup
SELECT @lastDiffBackup = MAX(backupFile)
FROM @fileList
WHERE backupFile LIKE '%.DIF'
AND backupFile LIKE @dbName + '%'
AND backupFile > @lastFullBackup

-- check to make sure there is a diff backup
IF @lastDiffBackup IS NOT NULL
BEGIN
SET @cmd = 'RESTORE DATABASE ' + @dbName + ' FROM DISK = '''
+ @backupPath + @lastDiffBackup + ''' WITH NORECOVERY'
PRINT @cmd
SET @lastFullBackup = @lastDiffBackup
END

-- 5 - check for log backups
DECLARE backupFiles CURSOR FOR
SELECT backupFile
FROM @fileList
WHERE backupFile LIKE '%.TRN'
AND backupFile LIKE @dbName + '%'
AND backupFile > @lastFullBackup

OPEN backupFiles

-- Loop through all the files for the database
FETCH NEXT FROM backupFiles INTO @backupFile

WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmd = 'RESTORE LOG ' + @dbName + ' FROM DISK = '''
+ @backupPath + @backupFile + ''' WITH NORECOVERY'
PRINT @cmd
FETCH NEXT FROM backupFiles INTO @backupFile
END

CLOSE backupFiles
DEALLOCATE backupFiles

-- 6 - put database in a useable state
SET @cmd = 'RESTORE DATABASE ' + @dbName + ' WITH RECOVERY'
PRINT @cmd


Kedua script tersebut saya dapatkan di internet dan saya coba sudah berhasil, silahkan untuk diaplikasin.