SQL Server Indonesia User Groups Community suherman
Welcome to SQL Server User Group Indonesia
Sign in JoinHelp | Sign In Live ID

suherman

Share ur Knowledge
Free SQL Azure Course at Microsoft Virtual Academy

you can register for this course here Free SQL Azure Course at Microsoft Virtual Academy

Microsoft® SQL Azure™ Database is a relational cloud database service (RDBMS) built on SQL Server® technologies. It is a highly available, scalable, multi-tenant database service hosted by Microsoft in the cloud. SQL Azure Database helps to ease provisioning and deployment of multiple databases. Developers do not have to install, setup, patch or manage any software, as all that is taken care of by Microsoft with this platform as a service (PAAS). High availability and fault tolerance is built-in and no physical administration is required.

Customers can use existing knowledge in T-SQL development and a familiar relational data model for symmetry with existing on-premises databases. Additionally, customers can get productive on SQL Azure quickly by using the same development and management tools they use for on-premises databases services.

MODULES :

  1. Introduction to SQL Azure
    This module covers the core information to help you get started with SQL Azure. At the end of this module we will have covered the an introduction to the products, covered it's key features and architecture, plus typical scenarios for it use. This module will also introduce information that will help you choose the right edition and get signed up.
    This module consists of some material : Overview of Microsoft SQL Azure ; Getting Started with SQL Azure; SQL Azure Pricing Explained.
  2. Setup and Configuration of SQL Azure Databases
    Through a series of short easy to follow videos by the end of this module covers the steps required to sign up, configure access and logins and start to load a SQL Azure database.
    This module consists of some material : Creating An Account and Your First SQL Azure Database; Manage SQL Azure Firewall rules; Interacting With a SQL Azure Database; Managing Logins and Security in SQL Azure; Creating Objects in SQL Azure; Options for Migrating a Database Schema to SQL Azure; Migrating a Database Schema to SQL Azure
  3. SQL Azure Security
    After completing the first two modules in this course you will be in a position of having a working SQL Azure database. The next step is to understand the security features and this module will cover guidelines for securing SQL Azure, the security model used by the product and how to apply security features to Data Sync.
    This module consists of some material : Security Guidelines for SQL Azure; Overview of Security in SQL Azure; Microsoft SQL Azure Security Model; SQL Azure Data Sync – Data Security;
  4. Synchronizing and Migrating On-premise data
    A key feature of SQL Azure is the ability to integrate with an on-premise solution. This module looks at the two main activities, synchronising on-premise data with SQL Azure and moving data from an on-premise SQL Server or Access Database to SQL Azure.
    This module consists of some material : Introduction to Data Sync; Migrating an On-premesis Database to SQL Azure; Migrating from Microsoft Office Access to SQL Azure.
  5. Business Intelligence
    This final module looks at some of the features being implemented into SQL Azure to enable Business Intelligence. Using two videos this module will cover the features in the Reporting Servers component of SQL Azure and then how to use Integration Services to move data in and out of SQL Azure for cloud or on-premise BI processing. This module consists of some material : Introduction to SQL Azure Reporting Service; Moving Data Into and Out Of SQL Azure using SSIS;
     

you can register for this course here Free SQL Azure Course at Microsoft Virtual Academy

Disabling and Renaming the SA Account

Sudah bukan rahasia lagi bahwa didalam SQL Server ada user yang bernama SA apabila SQL Server tersebut menggunakan  Mixed mode Server Authentication. dan sudah kita ketahui bersama bahwa user SA memiliki Server Role sebagai sysadmin.

Hal ini menjadi langkah awal yang baik bagi para ‘perusak’ untuk berusaha menembus keamanan SQL Server dengan menggunakan user tersebut, karena user tersebut sangat berkualitas dan memiliki otoritas penuh terhadap server.

Oleh karena itu, sangat disarankan untuk mendisable user SA apabila anda menggunakan Mixed mode Server Authentication dan mengganti nama dari user SA tersebut dengan cara sebagai berikut (dalam sample code ini SA saya rename menjadi SUHERMANOK):

*Note : sebelum melakukan ini pastikan sudah ada user lain yang memiliki Administrator privilages.

USE MASTER
GO
ALTER LOGIN SA DISABLE
GO
ALTER LOGIN SA WITH NAME=[SUHERMANOK]
GO

Demikian semoga bermanfaat.

Setting up Database Mirroring in SQL Server 2008 R2 using T-SQL

beberapa waktu yang lalu saya telah membuat step by step sederhana membuat database mirroring menggunakan Wizard yang telah ada disini. (jadi blog ini melanjutkan blog sebelumnya).

namun bagaimana jika anda setelah melakukan persiapan seperti disini kemudian hendak membuat database mirroringnya dengan menggunakan T-SQL ? berikut langkah2nya :

Misalkan kita telah menyiapkan 3 buah instances yang terletak di 2 buah server yg berbeda (ASET-1 dan SUHERMAN-PC).

Principal  Server Instance saya terletak pada instance ASET-1\SS2008R2,  Mirror Server Instance saya terletak pada instance SUHERMAN-PC\MIRRORSERVER, dan Witness Server instance saya terletak pada instance SUHERMAN-PC\SQLEXPRESS.

image

Langkah selanjutnya adalah membuat Endpoint Mirroring di setiap server instances.

Buat endpoint database mirroring pada Principal Server Instance (ASET-1\SS2008R2) dengan menggunakan T-SQL berikut :

CREATE ENDPOINT endpoint_mirroring
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7022 )
    FOR DATABASE_MIRRORING (ROLE=PARTNER);
GO
Buat endpoint database mirroring pada Mirror Server Instance (SUHERMAN-PC\MIRRORSERVER) dengan menggunakan T-SQL berikut :
CREATE ENDPOINT endpoint_mirroring
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7022 )
    FOR DATABASE_MIRRORING (ROLE=PARTNER);
GO
Buat endpoint database mirroring pada Witness Server Instance (SUHERMAN-PC\SQLEXPRESS) dengan menggunakan T-SQL berikut :
CREATE ENDPOINT endpoint_mirroring
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7025 )
    FOR DATABASE_MIRRORING (ROLE=WITNESS);
GO
Kemudian, pada Mirror Server Instance, jalankan T-SQL Berikut :
USE MASTER
GO
 
ALTER DATABASE ADVENTUREWORKS 
SET PARTNER = 'TCP://ASET-1.SOMEDOMAIN.COM:7022';
GO
kemudian pada Principal Server Instance, jalankan T-SQL berikut :
USE MASTER
GO
 
ALTER DATABASE ADVENTUREWORKS 
SET PARTNER = 'TCP://SUHERMAN-PC.SOMEDOMAIN.COM:7022';
GO
 
ALTER DATABASE ADVENTUREWORKS 
SET WITNESS = 'TCP://SUHERMAN-PC.SOMEDOMAIN.COM:7025';
GO

Sampai disini, Database Mirroring langsung berjalan.

image

 

Semoga bermanfaat.

Simple Step by Step Database Mirroring
  1. Set the recovery model of the database to the Full Recovery model if not already set. You can make this change in SQL Server Management Studio (SSMS) on the Options tab of the Database Properties dialog. You can also manually make the change with the following command :
    Alter Database [Adventureworks] Set Recovery Full;
  2. Set the compatibility level of your database to level 90 or higher. Level 90 is SQL Server 2005 compatibility, and level 100 is SQL Server 2008 compatibility. You can set the compatibility level of your database in SSMS on the Options tab of the Database Properties dialog, or you can manually make the change with T-SQL. You can use the following commands to change your database’s compatibility level.
    Alter Database [Adventureworks] Set Compatibility_Level = 100;
  3. Copy all server logins from the principal server instance to the mirror server instance. First, run this script on your principal server :
    USE master
    GO
    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
      DROP PROCEDURE sp_hexadecimal
    GO
    CREATE PROCEDURE sp_hexadecimal
        @binvalue varbinary(256),
        @hexvalue varchar (514) OUTPUT
    AS
    DECLARE @charvalue varchar (514)
    DECLARE @i int
    DECLARE @length int
    DECLARE @hexstring char(16)
    SELECT @charvalue = '0x'
    SELECT @i = 1
    SELECT @length = DATALENGTH (@binvalue)
    SELECT @hexstring = '0123456789ABCDEF'
    WHILE (@i <= @length)
    BEGIN
      DECLARE @tempint int
      DECLARE @firstint int
      DECLARE @secondint int
      SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
      SELECT @firstint = FLOOR(@tempint/16)
      SELECT @secondint = @tempint - (@firstint*16)
      SELECT @charvalue = @charvalue +
        SUBSTRING(@hexstring, @firstint+1, 1) +
        SUBSTRING(@hexstring, @secondint+1, 1)
      SELECT @i = @i + 1
    END
     
    SELECT @hexvalue = @charvalue
    GO
     
    IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
      DROP PROCEDURE sp_help_revlogin
    GO
    CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
    DECLARE @name sysname
    DECLARE @type varchar (1)
    DECLARE @hasaccess int
    DECLARE @denylogin int
    DECLARE @is_disabled int
    DECLARE @PWD_varbinary  varbinary (256)
    DECLARE @PWD_string  varchar (514)
    DECLARE @SID_varbinary varbinary (85)
    DECLARE @SID_string varchar (514)
    DECLARE @tmpstr  varchar (1024)
    DECLARE @is_policy_checked varchar (3)
    DECLARE @is_expiration_checked varchar (3)
     
    DECLARE @defaultdb sysname
     
    IF (@login_name IS NULL)
      DECLARE login_curs CURSOR FOR
     
          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
    sys.server_principals p LEFT JOIN sys.syslogins l
          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
    ELSE
      DECLARE login_curs CURSOR FOR
     
     
          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
    sys.server_principals p LEFT JOIN sys.syslogins l
          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
    OPEN login_curs
     
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
    IF (@@fetch_status = -1)
    BEGIN
      PRINT 'No login(s) found.'
      CLOSE login_curs
      DEALLOCATE login_curs
      RETURN -1
    END
    SET @tmpstr = '/* sp_help_revlogin script '
    PRINT @tmpstr
    SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
    PRINT @tmpstr
    PRINT ''
    WHILE (@@fetch_status <> -1)
    BEGIN
      IF (@@fetch_status <> -2)
      BEGIN
        PRINT ''
        SET @tmpstr = '-- Login: ' + @name
        PRINT @tmpstr
        IF (@type IN ( 'G', 'U'))
        BEGIN -- NT authenticated account/group
     
          SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
        END
        ELSE BEGIN -- SQL Server authentication
            -- obtain password and sid
                SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
            EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
            EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
     
            -- obtain password policy state
            SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
            SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
     
                SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'
     
            IF ( @is_policy_checked IS NOT NULL )
            BEGIN
              SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
            END
            IF ( @is_expiration_checked IS NOT NULL )
            BEGIN
              SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
            END
        END
        IF (@denylogin = 1)
        BEGIN -- login is denied access
          SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
        END
        ELSE IF (@hasaccess = 0)
        BEGIN -- login exists but does not have access
          SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
        END
        IF (@is_disabled = 1)
        BEGIN -- login is disabled
          SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
        END
        PRINT @tmpstr
      END
     
      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
       END
    CLOSE login_curs
    DEALLOCATE login_curs
    RETURN 0
    GO
  4. After that, run this procedure
    EXEC sp_help_revlogin

    The output script that is generated by the sp_help_revlogin stored procedure is the login script. This login script creates the logins that have the original Security Identifier (SID) and the original password.

  5. On server B, start SQL Server Management Studio, and then connect to the instance of SQL Server to which you moved the database.

    For complete documentation about copy login, you can learn it here http://support.microsoft.com/kb/918992

  6. Backup your Database on principal server
    backup database Adventureworks 
    to disk = 'D:\BackupMirroring\Adventureworks\AW.bak' with format
    go
    backup log Adventureworks to disk = 'D:\BackupMirroring\Adventureworks\AWLog.bak'
    go
  7. Create Database Adventureworks at Mirror Server. And then restore it on Mirror Server
    restore database Adventureworks from disk = 'E:\Adventureworks\AW.BAK' with replace, norecovery
    go
    restore log Adventureworks from disk = 'E:\Adventureworks\AWlog.BAK' with norecovery
    Go
     
     
     
  8. Now that you have prepared your database, you can move on to setting up database mirroring by using the Database Mirroring Wizard.
Implementing Automatic Application Failover

wow…. sudah lama gak ngeblog. udah kangen banget pingin bisa ngeblog lagi, namun karena kesibukan kantor jadinya baru sekarang saya bisa nulis lagi.

Tulisan kali ini adalah hasil eksperimen saya terhadap pertanyaan dari salahsatu member di milis SQLServer-indo mengenai apakah aplikasi Visual Basic 6 dapat beradaptasi dengan fitur Database mirroring yang ada di SQL Server 2005 keatas.

Makin terpancing lagi karena di kantor saya sudah menerapkan Database Mirroring, namun aplikasi di client masih menggunakan Visual Foxpro. Jadi Apakah aplikasi Visual Basic 6 dan Visual Foxpro dapat beradaptasi dengan fitur Database Mirroring di SQL Server 2005 keatas ?

Jawabannya adalah …… BISA!

So, ga perlu deh migrasi ke .NET. Project berikutnya aja deh kalo tim saya mau pake .NET Smile

Langkah untuk membuat aplikasi VB6 anda dapat menjadi application failover adalah :

  1. Pastikan SQL Server Browser Services di kedua server (principal dan Mirror) sudah berjalan.
  2. pada sisi client sudah terinstal SQL Server Native Component yang dapat di didownload disini (untuk SQL Server 2008):

    X86 Package (sqlncli.msi) - 4549 KB
    X64 Package (sqlncli.msi) - 7963 KB
    IA64 Package (sqlncli.msi) - 11112 KB

  3. Gunakan connectionstring seperti contoh berikut (code ini untuk di vb6):
    Public Con As ADODB.Connection
     Sub OpenSQLCOnnection()
        Const CLOSED As Integer = 0
            If Con.State = CLOSED Then
            constr = "Provider=SQLNCLI10;"
            constr = constr & "Integrated Security=SSPI;"
            constr = constr & "Initial Catalog=AdventureWorks;"
            constr = constr & "Data Source=Suherman-PC\SS2008R2;"
            constr = constr & "FailoverPartner=Suherman-PC\MIRRORSERVER;"
            constr = constr & "DataTypeCompatibility=80;"
            constr = constr & "Network=dbmssocn;"
            Con.Open constr
            End If
    End Sub
  4. Selesai.

Yup, sesederhana itu aja. kita tinggal mengganti Provider untuk connectionstringnya dan menambah beberapa atribut di connectionstringnya.

Berikut ini saya sertakan juga sample application failover yg dibuat dari VB6 yang ddapat didownload disini. dan sample yang dibuat dengan VB.NET yang dapat didownload disini.

Semoga bermanfaat.

Video Tutorial : Publishing SQL Server 2008 R2 Reporting Services Reports

setelah beberapa waktu yang lalu saya telah membuat sebuah video tutorial yang mendemokan tentang “Developing a Simple SQL Server 2008 R2 Reporting Services Report

setelah itu sekarang dilanjutkan dengan cara mempublish report yang sudah kita buat kedalam SQL Server Reporting Services portal. berikut ini adalah tutorialnya :

[View:http://www.youtube.com/watch?v=IsDEx4hpZCE?hd=1]

Semoga bermanfaat

Video tutorial : Developing a Simple SQL Server 2008 R2 Reporting Services Report

image

Berikut ini saya persembahkan video tutorial membuat report menggunakan Business Intelligence Development Studio yang ada di SQL Server 2008 R2

[View:http://www.youtube.com/v/7oxKhRblVpY?hd=1]

Semoga bermanfaat.

Laporan Kegiatan : Seminar “Microsoft Technology Update for Young Generation 2011”

Pada tanggal 26 Maret 2011, MUGI Banjarmasin diundang oleh Himpunan Mahasiswa STMIK Banjarbaru Kalimantan Selatan untuk diminta mengisi acara seminar dengan tema “Microsoft Technology Update for Young Generation 2011”

Acara ini berlangsung di Hotel Batung Batulis Banjarbaru, berlangsung mulai jam 10.30 sd 16.00 Wita. Acara ini dihadiri oleh 136 orang. para pembicara dalam Acara ini adalah :

  1. Suherman, STP, MCTS, MVP yang membawakan 2 buah materi yaitu “7 Wonders of the Community” dan “Developing a Simple SQL Server 2008 R2 Reporting Services Report with a Relational Data Source
  2. Ferry Kurniawan, S.Kom, MVP yang membawakan materi “Introducing .Net Framework 4.0”
  3. Setyo Wahyu membawakan materi “Introducing Microsoft Windows Live

File-file presentasi dapat didownload disini : http://cid-06e371f54b516eab.office.live.com/self.aspx/MUGI%20Banjarmasin%20^52^6/20110326

Berikut ini adalah Dokumentasinya :

Peserta_panorama

Peserta Seminar

DSC_1379 (800x537)

Suherman

DSC_1400 (800x537)

Setyo Wahyu

DSC_1415 (800x537)

Ferry Kurniawan

DSC_1418 (800x537)

Panitia

Dokumentasi lengkap dapat dilihat disini :

http://cid-06e371f54b516eab.photos.live.com/browse.aspx/Seminar%20Microsoft%20Technology%20update%2026%20Maret%202011

Introduction to Database Snapshot (3)

Pada blog sebelumnya kita sudah mencoba bagaimana melakukan perubahan data pada database source dan ternyata tidak berpengaruhnya nyata terhadap Database Snapshotnya.

Pada bagian ke 3 ini kita akan mencoba mengembalikan kondisi semula database source semenjak dibuatnya database Snapshotnya yaitu dengan memanfaatkan database snapshot menjadi sumber restore untuk database sourcenya.

Kita coba restore dengan T-SQL berikut :

USE master
 GO
 
 RESTORE DATABASE Adventureworks
 FROM DATABASE_SNAPSHOT = 'Snapshot_AW'
 GO

seperti kita ketahui bahwa pada blog sebelumnya, kita telah mengubah data pada field “Name” menjadi “Crankam” untuk productID 2. Setelah kita restore, data tersebut sekarang telah kembali seperti semula.

image

Demikianlah bahwa Database Snapshot dapat dijadikan sebagai sumber untuk merestore dari database yang di jadikan sumber Database Snapshot

Introduction to Database Snapshot (2)

Bagian 1.

Setelah kita mencoba bagaimana membuat sebuah database Snapshot disini, selanjutnya kita akan mencoba untuk melihat apa yang terjadi apabila di database source terjadi aktivitas transaksi.

pertama kita coba ambil sample misalkan table Production.Product

SELECT ProductID,Name FROM AdventureWorks.Production.Product
ORDER BY ProductID
GO
SELECT ProductID,Name FROM Snapshot_AW.Production.Product
ORDER BY ProductID
GO

dan hasilnya adalah sebagai berikut :

image

Nah sekarang saya akan coba mengupdate tabel Adventureworks.Production.Product

update AdventureWorks.Production.Product set Name='Crankam'
where ProductID=2

Lalu setelah itu kembali lihat kondisi 2 tabel tersebut :

SELECT ProductID,Name FROM AdventureWorks.Production.Product
ORDER BY ProductID
GO
 
SELECT ProductID,Name FROM Snapshot_AW.Production.Product
ORDER BY ProductID
GO

Tampak bahwa tidak ada perubahan pada tabel Snapshot_AW.Production.Product

image

Namun bila diperhatikan pada file C:\SS_AW.ss1 Size on Disk nya bertambah dari 128 Kb menjadi 960 Kb.

image

Introduction to Database Snapshot

Fitur Database Snapshot mulai muncul pada SQL Server 2005 dan berlaku untuk diatasnya. Sesuai dengan namanya “Snapshot”, database Snapshot merupakan citra dari sebuah database source pada saat dimana Database Snapshot dilakukan. Database biasa digunakan untuk keperluan read only database seperti sebagai sumber laporan atau sebagai source proses export database.

Saat membuat database Snapshot, database source dan snapshot harus berada dalam 1 instance. hal ini terjadi karena database Snapshot dikelola pada level page, SQL Server tidak membuat sebuah File Database baru saat sebuah Database Snapshot dibuat, namun SQL Server membuat sebuah sparse file.

Mari kita buat sebuah Database Snapshot, dalam demo ini saya akan menggunakan SQL Server 2008 R2 Developer dan menggunakan database AdventureWorks

image

setelah Database Snapshot berhasil dibuat akan tampak sperti berikut :

image

Bagaimana dengan File yg terjadi ? apakah sangat besar ? jawabannya adalah tidak karena seperti yang sudah saya jelaskan diatas bahwa Database Snapshot bermain di wilayah page file.

image

Demikian perkenalan singkat mengenai Database Snapshot, saya akan bahas lagi lanjutannya pada blog-blog saya berikutnya Smile

Create a Database Schema

melanjutkan tulisan saya mengenai Schema di SQL Server yang lalu (Understanding Schemas in SQL Server), berikutnya adalah saya coba share bagaimana membuat schema disebuah database pada SQL Server. Versi yang saya gunakan saat ini adalah SQL Server 2008 R2 namun bisa juga diterapkan pada SQL Server 2005 keatas.

Dalam hal ini saya anggap di dalam didalam SQL Server instance sudah ada database yang bernama SMSDB.

image

dan di Instance SQL Server juga sudah ada user yang bernama EmanSMS yang memiliki server role Public dan Database Role Public pada database SMSDB.

image

Selanjutnya adalah saya akan membuat sebuah Schema di database SMSDB dengan nama Schema yaitu ScSMS yang akan di aauthorisasi oleh user EmanSMS.

image

 

Demikian semoga bermanfaat.

Posted: Jan 29 2011, 11:12 PM by Suherman | with no comments
Filed under:
Understanding Schemas in SQL Server

Skema adalah wadah untuk objek database seperti tabel, view, store procedure, function, types, dan trigger. Skema berfungsi banyak sebagai fungsi namespace di .NET Framework Dan XML juga sebagai cara untuk mengelompokkan objek database sehingga dapat menggunakan kembali nama-nama objek tersebut, seperti memungkinkan baik dbo.Customer dan Fred.Customer ada dalam database tunggal, dan untuk sekelompok objek di bawah pemilik yang berbeda.

Bagi anda yang sering menggunakan SQL Server 2000 dan akan menggunakan SQL Server 2005 atau 2008 sebaiknya agar berhati-hati mengenai schema. karena ada perubahan sangat besar dari SQL Server 2000 ke 2005 keatas mengenai schema.

di SQL Server 2000, Ketika seorang administrator membuat user Herman dalam database, SQL Server secara otomatis akan membuat skema Herman yang bersembunyi di balik pengguna Herman tersebut. Jika Herman login ke server yang menjalankan SQL Server tanpa kepemilikan database dan menciptakan Table1, nama sebenarnya dari tabel itu Herman.Table1.

Hal yang sama yang dimiliki Herman untuk objek yang diciptakan Herman, seperti Herman.StoredProcedure1 dan Herman.View1. Jika Herman pemilik database atau sysadmin, obyek yang diciptakan Herman akan menjadi bagian dari skema dbo sebagai gantinya. Walaupun kita sering mengatakan dbo yang memiliki objek, maka hal itu akan mengarah pada hal yang sama.

Masalah dengan penyatuan pengguna dan skema di SQL Server 2000 muncul ketika Anda perlu mengubah kepemilikan objek, seperti ketika Herman meninggalkan perusahaan dan Rudi mengambil alih tugas Herman.

Seorang administrator sistem harus mengubah kepemilikan dari semua objek yang dimiliki oleh Herman menjadi milik Rudi. Lebih dari masalah adalah bahwa administrator harus mengubah Transact-SQL atau kode di aplikasi klien yang merujuk pada Herman.Table1 untuk dirubah menjadi Rudi.Table1.

SQL Server 2005 keatas telah mengatasi masalah ini dan menerapkan skema dengan memisahkan pengguna dari skema.

Bila administrator membuat pengguna baru Herman menggunakan CREATE USER DDL, SQL Server tidak lagi secara otomatis membuat suatu skema dengan nama yang sama. Sebaliknya, Anda secara eksplisit harus membuat dan menetapkan skema kepemilikan ke pengguna. Karena semua objek database yang ditampilkan sekarang terkandung dalam skema.

Schema1, yang awalnya dimiliki Herman, menjadi sederhana untuk mengubah kepemilikan objek semua skema itu dengan hanya mengubah kepemilikan skema untuk Rudi. Setiap pengguna juga dapat memiliki skema default ditugaskan untuk itu, sehingga SQL Server mengasumsikan objek direferensikan oleh nama tanpa referensi skema berada dalam skema default.

Jika Herman telah memiliki Schema1 sebagai skema standar, dia bisa melihat tabel yang berada di Schema1.Table1 atau hanya sebagai Table1.


nama objek yang sempurna sepenuhnya di SQL Server 2005 keatas memiliki struktur empat bagian, mirip dengan yang di versi sebelumnya dari SQL Server:

server.database.schema.object
Gunakan pernyataan CREATE USER, bukannya sp_adduser, untuk membuat pengguna baru. sp_adduser menciptakan skema dengan nama yang sama dengan nama pengguna baru atau peran aplikasi dan memberikan skema sebagai skema default untuk pengguna, meniru perilaku SQL Server 2000 tetapi memberikan skema yang terpisah.
Group Study: Learn about Database Normalization and Relationship

Pada suatu hari saya mendapat permintaan dari mahasiswa ILKOM UNLAM Banjarmasin  yang juga member dari MUGI Banjarmasin untuk dapat meluangkan waktu membimbing mereka dalam pengerjaan project database yang sedang mereka kerjakan.

Saya dengan senang hati menerima permintaan tersebut, akhirnya diputuskan untuk  mengadakannya dirumah saya pada tanggal 8 Januari 2011 jam 16.00 SD jam 17.30

yang hadir ada 4 orang Marina, Uciet, Setyo dan Intan. Masing-masing sedang mengerjakan project database sebagai bahan skripsi yang sedang mereka kerjakan. kami mendiskusikan mengenai database normalisasi yang telah mereka buat serta relationship nya.

berikut ini adalah dokumentasinya :

DSC_0910

DSC_0911

Inserting Data into 2 Tables with 1 Statement without Trigger

Biasanya kita menggunakan trigger untuk dapat melakukan memasukkan data ke dalam 2 tabel yang berbeda sekaligus. 1 tabel target yang akan dimasukkan data yang kemudian dibuatkan trigger yang kemudian trigger tersebut akan melakukan proses insert ke tabel ke 2.

Namun dalam perkembangannya, Insert Statement saat ini di memiliki sub-klausa OUTPUT. dengan memanfaatkan sub-klausa OUTPUT tersebut kita dapat membuat 1 buah statement insert yang dapat melakukan insert data ke 2 buah tabel sekaligus.

Mari kita coba praktekkan bersama-sama :

contoh kasusnya adalah sebagai berikut, di departemen TI memiliki policy bahwa setiap penambahan user baru pada sebuah aplikasi harus melakukan penggantian password dalam kurun waktu 7 hari. dalam 7 hari tersebut, user akan selalu diingatkan oleh sistem setiap login untuk pengganti passwordnya sampai user tersebut mengganti password.

Pertama kita akan membuat 2 buah tabel yaitu tabel DftrUser dan tabel TblPengingat

USE AdventureWorks;
GO
 
CREATE SCHEMA [Pengguna] AUTHORIZATION dbo;
GO
 
CREATE TABLE [Pengguna].[DftrUser]
    (
       [PenggunaID] [int] IDENTITY(1,1) NOT NULL,
       [Nama] VARCHAR(30) NOT NULL,
       [Password] VARCHAR(30) NOT NULL,
 
        CONSTRAINT [PK_PenggunaID] PRIMARY KEY CLUSTERED 
            (
               [PenggunaID] ASC
            )ON [PRIMARY]
    ) ON [PRIMARY];
GO
 
CREATE TABLE [Pengguna].[TblPengingat]
    (
        [PengingatID] [int] IDENTITY(1,1) NOT NULL,
       [PenggunaID] [int] NOT NULL,
       [Tgl] DATETIME NOT NULL,
       [SttPengguna] CHAR(1) NOT NULL,
 
        CONSTRAINT [PK_PengingatID] PRIMARY KEY CLUSTERED 
            (
               [PengingatID] ASC
            )ON [PRIMARY]
    ) ON [PRIMARY]; 
GO

Sekarang kita coba untuk memasukkan data-data yang diperlukan untuk proses diatas dengan menggunakan 1 buah statement tanpa menggunakan trigger

INSERT INTO [Pengguna].[DftrUser] ( Nama, password )
OUTPUT INSERTED.PenggunaID, DATEADD(d,7,GETDATE()),'0'
INTO[Pengguna].[TblPengingat]
    (
        PenggunaID,
        Tgl,
        SttPengguna
    )
VALUES  ( 'Suherman','K4taSand1');

dan berikut hasilnya :

select * from [Pengguna].[DftrUser]
select * from [Pengguna].[TblPengingat]

image

tampak bahwa data telah masuk ke kedua tabel tersebut dengan hanya menggunakan 1 statement DML saja.

Demikian semoga bermanfaat.

More Posts Next page »