-->

25 Oktober 2012

Backup Database Ke Dalam File Zip Dengan Coldfusion


Disini saya hanya ingin berbagi ilmu bagaimana cara membuat Backup Database kedalam Zip File dengan Bahasa Pemrograman Coldfusion,

Langkah Pertama :
Masukkan Source Code Dibawah ini kedalam editor yang mas bro punya.

<!---
 Back up a database to a zip file.

 @param dbsource      DNS. (Required)
 @return Returns a string. 
 @author Darwan Leonardo Sitepu (dlns2001@yahoo.com) 
 @version 1, February 21, 2011 
--->
<cffunction name="backupDatabase" returnType="string" output="false">
    <cfargument name="dbsource" type="string" required="true">
    <cftry>
        <cfdbinfo datasource="#arguments.dbsource#" name="tables" type="tables" />
        <cfsilent>
            <cfset data = StructNew() />
            <cfloop query="tables">  <!--- grab all data from table --->  
                <cftry>
                    <cfset data[Table_Name] = StructNew() />  
                    <cfdbinfo datasource="#arguments.dbsource#" table="#Table_Name#" name="qryTableFields" type="columns" />  
                    <cfset data[Table_Name].schema = qryTableFields />  
                    <cfquery name="getData" datasource="#arguments.dbsource#" debug="no" cachedwithin=#CreateTimeSpan(0,0,0,10)# >SELECT * FROM [#Table_Name#]</cfquery>    
                    <cfset data[Table_Name].data = getData />            
                <cfcatch></cfcatch>
                </cftry>
            </cfloop><!--- Now serialize into one ginormous string --->
        </cfsilent>
        <cfwddx action="cfml2wddx" input="#data#" output="packet" /><!--- file to store zip --->
        <cfset zfile = expandPath("./data.zip") /><!--- Now zip this baby up --->
        <cfzip action="zip" file="#zfile#" overwrite="true"><cfzipparam content="#packet#" entrypath="data.packet.xml" /></cfzip>
        <cfreturn "I retrieved #tables.recordCount# tables from datasource #datasource# and saved it to #zfile#.">
    <cfcatch>
        <cfreturn "Backup Database Is Failed..">
    </cfcatch>
    </cftry>
</cffunction>

Lalu Simpan Source Code ini dengan nama file yang berakhiran ".cfm" misalkan "BackupDatabase.cfm" kedalam direktori wwwroot Coldfusion yang sudah terinstal.

Langkah Kedua :
Masukkan Source Code Dibawah ini kedalam editor yang mas bro punya (Masih didalam file "BackupDatabase.cfm").

<cfoutput>
<cfsetting showdebugoutput="no">
#BackupDatabase("darwanlns.com")#
</cfoutput>

Keterangan :
darwanlns.com = Nama Datasource yang sudah dibuat di Coldfusion

Langkah Ketiga :
Untuk Menjalankan Source code yang sudah mas bro punya, mas bro ketikkan saja alamat di browser mas bro misalkan.

http://localhost:8500/BackupDatabase.cfm


Contoh Filenya bisa di download disini Backup Database


Selamat Mencoba Mas Bro :)

24 Oktober 2012

Membuat Query Editor Berbasis Web Dengan Coldfusion


Mungkin mas bro, sudah sering melihat pembuatan Query Editor berbasis Web, :)

Disini saya hanya ingin berbagi ilmu bagaimana cara membuat Query Editor Berbasis Web dengan Bahasa Pemrograman Coldfusion,

Langkah Pertama :
Masukkan Source Code Dibawah ini kedalam editor yang mas bro punya.

<cfoutput>
<cfscript>
ServiceFactory = CreateObject("java", "coldfusion.server.ServiceFactory");
</cfscript>
<title>SQL Runner / Coldfusion Version #ServiceFactory.LicenseService.getMajorVersion()#</title>
<cfparam name="convert_TO_Excell" default="NO">
<CFPARAM Name="Sort" Default="Entry">
<cftry>
<CFOBJECT ACTION="CREATE"
TYPE="JAVA"
CLASS="coldfusion.server.ServiceFactory"
NAME="factory">

<cfscript>
dsService=factory.getDataSourceService();
dsFull=dsService.getDatasources();
dsNames=StructKeyArray(dsFull);
DS_List=QueryNew("Entry,Value");
</cfscript>
<cfset tmp=arraysort(dsNames,"textnocase")>
<CFLOOP INDEX="i" FROM="1" TO="#ArrayLen(dsNames)#">
<cfset tmp="dsFull.#dsNames[i]#.driver">
<cfset mydriver=evaluate(tmp)>
<cfif listfindnocase("MSSQLServer",mydriver) or listfindnocase("Oracle",mydriver) or listfindnocase("ODBCSocket",mydriver)>
<cfset tmp=QueryAddRow(DS_List)>
<cfset tmp=QuerySetCell(DS_List,"Entry",dsNames[i])>
<cfif mydriver eq 'ODBCSocket'>
<cfset tmp=QuerySetCell(DS_List,"Value","ODBCSocket")>
<cfelse>
<cfset tmp=QuerySetCell(DS_List,"Value",mydriver)>
</cfif>
</cfif>
</CFLOOP>
<cfcatch>
<CFREGISTRY ACTION=GETALL NAME="DS_List" TYPE="ANY" SORT="#Sort#" BRANCH="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources">
</cfcatch>
</cftry>
<cfset DSList = valuelist(DS_LIST.Entry)>
<cfset DSDriver = valuelist(DS_LIST.Value)>
<cfscript>
function getDSNs() {
var factory = createObject("java","coldfusion.server.ServiceFactory");
return factory.getDataSourceService().getNames();
}

function dumpVarList(variable) {
    var delim="#Chr(13)##Chr(10)#";
    var var2dump=arguments.variable;
    var label = "";
    var newdump="";
    var keyName="";
    var loopcount=0;
 
    if(arrayLen(arguments) gte 2) delim=arguments[2];
    if(arrayLen(arguments) gte 3) label=arguments[3];
 
    // THE VARIABLE IS A SIMPLE VALUE, SO OUTPUT IT
    if(isStruct(var2dump)) {
   
        for(keyName in var2dump) {
            if(isSimpleValue(var2dump[keyName])) {
if (keyname contains "DRIVER")writeOutput(var2dump[keyName]);              
            }
        }
    }      
    return;
}
</cfscript>
<cfform name="frmSQL" action="#CGI.Script_Name#?#CGI.Query_String#" method="post" preservedata="true">
<table width="100%">
<cfinput type="hidden" name="convert_TO_Excell" value="#convert_TO_Excell#">
<tr>
<td>Select DataSource</td>
<td>&nbsp;:&nbsp;</td>
<td>
<cfparam name="reqsess_dsn" default="">
<cfselect name="reqsess_dsn">
<cfloop array=#getDSNs()# index="name">
<option value="#name#" <cfif reqsess_dsn Eq name>selected</cfif>>#name#<!--- &nbsp;[#dumpVarList(getdsn(name))#]--->
</cfloop>
</cfselect>
</td>
</tr>
<tr>
<td>View Output By</td>
<td>&nbsp;:&nbsp;</td>
<td>
<cfparam name="view_output" default="applet">
<cfselect name="view_output">
<option value="table" title="Semua Browser Support (KONEKSI CEPAT)" <cfif view_output Eq "table">selected</cfif>>Table
<cfif val(ServiceFactory.LicenseService.getMajorVersion()) GT 7>
<option value="applet" title="Browser Harus Support Dengan Java (KONEKSI CEPAT)" <cfif view_output Eq "applet">selected</cfif>>Applet
<option value="flash" title="Browser Harus Support Dengan Flash (KONEKSI SEDANG)" <cfif view_output Eq "flash">selected</cfif>>Flash
<option value="html" title="Semua Browser Support (KONEKSI SEDANG)" <cfif view_output Eq "html">selected</cfif>>Html
</cfif>
</cfselect>
</td>
</tr>
<tr><td  colspan="5">Query</td></tr>
<tr><td  colspan="5"><cftextarea name="txtSQL"  rows="20" cols="100%" style="width: 100%; height: 280px;; font-family: courier;" class="codepress sql linenumbers-off" id="sql"></cftextarea></td></tr>
<tr><td nowrap colspan="5">
<cfinput type="Button" name="cmdProcess" value="Process Query" onclick="javascript:process_query();">&nbsp;&nbsp;<cfinput type="Button" name="cmdConvert_Excell" value="Convert To Excell" onclick="javascript:convert_excell();">
</td></tr>
</table>
<Script>
function convert_excell()
{
document.frmSQL.convert_TO_Excell.value ="YES";
document.frmSQL.submit();
}
function process_query()
{
document.frmSQL.convert_TO_Excell.value ="NO";
document.frmSQL.submit();
}
</Script>
</cfform>
<br><br>
<cfform name="Frm_Query" enablecab="yes" format="html">

<cfif isdefined("txtSQL")>
<Cfset TxtRunSql = "#evaluate(DE(preservesinglequotes(txtSQL)))#">
<cftry>
<cfquery name="qRes" datasource="#reqsess_dsn#">
#evaluate(DE(preservesinglequotes(TxtRunSql)))#
</cfquery>

<cfif isdefined("txtSQL") and (lcase(left(txtSQL,6)) Neq "insert" OR lcase(left(txtSQL,6)) Neq "update" OR lcase(left(txtSQL,6)) Neq "delete")>
<cfif IsDefined("qRes.recordcount")>
#qRes.recordcount# found<br><br>
<cfif qRes.recordcount>
<cfif convert_TO_Excell NEQ "YES">
<cfif ServiceFactory.LicenseService.getMajorVersion() GT 7>
<Cfif UCASE(TRIM(view_output)) NEQ "TABLE">
<cfinclude template="cfgrid.cfm">
<Cfelse>
<cftable query="qRes" colspacing="2" border="1" htmltable colheaders>
<cfloop index="iFld" list="#qRes.columnlist#"><cfcol header = "<b>#iFld#</b>" align = "Center" text= "#evaluate("qRes.#iFld#")# &nbsp;"></cfloop>
</cftable>
</Cfif>
<cfelse>
<cftable query="qRes" colspacing="2" border="1" htmltable colheaders>
<cfloop index="iFld" list="#qRes.columnlist#"><cfcol header = "<b>#iFld#</b>" align = "Center" text= "#evaluate("qRes.#iFld#")#"></cfloop>
</cftable>
</cfif>
<cfelse>
<cfheader name="content-disposition" value="inline; filename=QUERY_TO_EXCELL[#DateFormat(now(),"ddmmyyyy")#].xls">
<cfcontent type="application/msexcel">
                            <style>
                             .XLSNIP
                            {mso-style-parent:style0;
                            color:black;
                            font-size:8.0pt;
                            font-family:Verdana, sans-serif;
                            mso-font-charset:0;
                            mso-number-format:"\@";
                            vertical-align:top;
                            border-top:none;
                            border-right:none;
                            background:white;
                            mso-pattern:auto none;
                            white-space:normal;}
                            </style>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<cfloop index="iFld" list="#qRes.columnlist#">
<td bgcolor="##C0C0C0">#iFld#</td>
</cfloop>
</tr>
<cfloop query="qRes">
<cfset icur=qRes.currentrow>
<tr>
<cfloop index="iFld" list="#qRes.columnlist#">
<cfif IsDate(evaluate("qRes.#iFld#[#icur#]"))>
<td>#dateformat(evaluate("qRes.#iFld#[#icur#]"),"dd/MMM/yyyy")#</td>
<cfelse>
<td class="XLSNIP">#evaluate("qRes.#iFld#[#icur#]")#</td>
</cfif>
</cfloop>
</tr>
</cfloop>
</table>
<cfinput type="hidden" name="convert_TO_Excell" value="NO">
</cfif>
</cfif>
</cfif>
</cfif>
<cfcatch>
<cfrethrow>
<cfloop collection = #cfcatch# item = "c"> <br><cfif IsSimpleValue(cfcatch[c])>#c# = #cfcatch[c]#</cfif> </cfloop>
</cfcatch>
</cftry>
</cfif>
</Cfform>
</cfoutput>


Langkah Kedua :
Simpan Source Code yang sudah mas bro buat dengan nama misalkan QueryEditor.cfm, Lalu mas bro jalankan file yang sudah mas bro simpan. misalkan dengan mengetikkan alamat browsernya seperti ini http://localhost:8500/QueryEditor.cfm

Maka Hasilnya akan seperti ini




Contoh Filenya Bisa Di Download Di Sini Query Editor

Selamat Mencoba Mas Bro... :)

Bagaimana Mencari Posisi Mouse Dengan JQuery


Hari gini masih harus tau cara membaca pageX dan pageY, dengan menggunakan element atribut standart JavaScript, sudah tidak jaman bro,

Ini Ada sedikit trik bagaimana mencari Posisi Mouse Dengan JQUERY,

Listing Programmnya :


<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
   $(document).mousemove(function(e){
      $('#status').html(e.pageX +', '+ e.pageY);
   }); 
})
</script>
<body>
<h2 id="status">
0, 0
</h2>
</body>
</html>
Langkah Berikutnya tinggal Simpan menajdi file "html" atau file "cfm" sesuai dengan kebutuhan mas bro..

Ini Contohnya :

0, 0

Silahkan Klik Dimana Saja :)

Ini Adalah Source Codenya Contohnya :


<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
   $("#special").click(function(e){
      $('#status2').html(e.pageX +', '+ e.pageY);
   }); 
})
</script>
<body>

<h2 id="status2">
0, 0
</h2>
<div style="width: 100px; height: 100px; background:#ccc;" id="special">
Silahkan Klik Dimana Saja :)
</div>
</body>
</html>

Selamat Mencoba Mas Bro.... :)

23 Oktober 2012

Bagaimana menjadwalkan dan mengotomatisasi backup database SQL Server di SQL Server atau SQL Server Express


Anda harus ikuti tiga langkah untuk mendukung database SQL Server Anda dengan menggunakan Windows Task Scheduler:

Langkah A: Gunakan SQL Server Management Studio atau SQL Server Management Studio Express atau SQLCMD untuk membuat prosedur yang tersimpan dalam database berikut master Anda:


USE [master] 
GO 
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabases] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

-- ============================================= 
-- Author: Microsoft 
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200) 
AS 

       SET NOCOUNT ON; 
           
            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )
           
             -- Pick out only databases which are online in case ALL databases are chosen to be backed up
             -- If specific database is chosen to be backed up only pick that out from @DBs
            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName IS NULL
            ORDER BY Name
           
            -- Filter out databases which do not need to backed up
            IF @backupType='F'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
                  END
            ELSE IF @backupType='D'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE IF @backupType='L'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE
                  BEGIN
                  RETURN
                  END
           
            -- Declare variables
            DECLARE @BackupName varchar(100)
            DECLARE @BackupFile varchar(100)
            DECLARE @DBNAME varchar(300)
            DECLARE @sqlCommand NVARCHAR(1000) 
        DECLARE @dateTime NVARCHAR(20)
            DECLARE @Loop int                  
                       
            -- Loop through the databases one by one
            SELECT @Loop = min(ID) FROM @DBs

      WHILE @Loop IS NOT NULL
      BEGIN

-- Database Names have to be in [dbname] format since some have - or _ in their name
      SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'

-- Set the current date and time n yyyyhhmmss format
      SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  

-- Create backup filename in path\filename.extension format for full,diff and log backups
      IF @backupType = 'F'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'D'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'L'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'

-- Provide the backup a name for storing in the media
      IF @backupType = 'F'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime
      IF @backupType = 'D'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime
      IF @backupType = 'L'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime

-- Generate the dynamic SQL command to be executed

       IF @backupType = 'F' 
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                  END
       IF @backupType = 'D'
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
       IF @backupType = 'L' 
                  BEGIN
               SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END

-- Execute the generated SQL command
       EXEC(@sqlCommand)

-- Goto the next database
SELECT @Loop = min(ID) FROM @DBs where ID>@Loop

END



Langkah B: Dalam sebuah editor teks, membuat file batch yang bernama Sqlbackup.bat, dan kemudian menyalin teks dari salah satu contoh berikut ke dalam file tersebut, tergantung pada skenario Anda:

Contoh 1: Full backup semua database contoh didalam server dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . –E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"


SQL SERVER EXPRESS
sqlcmd -S .\EXPRESS –E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"


Contoh 2 : Differential backup semua database contoh didalam server dengan menggunakan SQL Login dan password

// Sqlbackup.bat
SQL SERVER
sqlcmd -U SQLLogin -P password -S . -Q "EXEC sp_BackupDatabases @backupLocation ='D:\SQLBackups', @BackupType='D'"

SQL SERVER EXPRESS
sqlcmd -U SQLLogin -P password -S .\SQLEXPRESS -Q "EXEC sp_BackupDatabases @backupLocation ='D:\SQLBackups', @BackupType='D'"

Catatan : SQL Login harus memiliki setidaknya peran Operator Backup di SQL Server.


Contoh 3 : Log backup semua database dalam hal nama lokal SQLEXPRESS dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"

SQL SERVER EXPRESS
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"


Contoh 4 : Full backup DB USER database dalam contoh bernama SQL EXPRESS lokal dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’darwanlns’, @backupType='F'"

SQL SERVER EXPRESS
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’darwanlns’, @backupType='F'"


Demikian pula, Anda dapat membuat cadangan diferensial darwanlns dengan menyisipkan di 'D' untuk @backupTypeparameter dan cadangan log darwanlns dengan menyisipkan dalam 'L' untuk @backupType parameter.


Langkah C : Jadwal pekerjaan dengan menggunakan Windows Task Scheduler untuk menjalankan file batch yang Anda buat di langkah B. Untuk melakukan hal ini, ikuti langkah berikut:

  1. Pada komputer yang menjalankan SQL Server Express, klik Start  arahkan ke All Programs  ke Accessories titik, arahkan ke System Tools, dan kemudian klik Scheduled Tasks.
  2. Klik Dua Kali (Double Klik) Add Scheduled Task.
  3. Dalam Wizard Scheduled Task, klik Next.
  4. Klik Browse, klik file batch yang Anda buat pada langkah B, dan kemudian klik Open.
  5. Ketik SQLBACKUP untuk nama tugas, klik Daily, dan kemudian klik Next.
  6. Tentukan informasi untuk jadwal untuk menjalankan tugas. (Sebaiknya Anda menjalankan tugas ini minimal satu kali setiap hari.) Kemudian, klik Next.
  7. Dalam Enter the user name  ketik nama pengguna, dan kemudian ketik password di kolom Enter the password.

    Catatan Pengguna ini setidaknya harus diberikan peran BackupOperator di tingkat SQL Server jika Anda menggunakan salah satu batch file dalam contoh 1, 3, atau 4.
  8. Klik Next, dan kemudian klik Finish.
  9. Jalankan tugas yang dijadwalkan setidaknya satu kali untuk memastikan bahwa cadangan berhasil dibuat.


Catatan folder untuk dieksekusi SQLCMD umumnya dalam variabel Path untuk server setelah SQL Server terinstal, tetapi jika variabel Path tidak mencantumkan folder ini, Anda dapat menemukannya di bawah <Install lokasi>\90\Tools\Bin (Untuk contoh: C:\Program Files\Microsoft SQL Server\90\Tools\ Bin).

Sadarilah berikut saat Anda menggunakan prosedur yang didokumentasikan dalam artikel ini:


  • Windows Task Scheduler layanan harus berjalan pada waktu itu pekerjaan dijadwalkan untuk berjalan. Kami menyarankan agar Anda mengatur jenis startup untuk service as Automatic  Hal ini memastikan bahwa layanan akan berjalan bahkan pada restart.
  • Harus ada banyak ruang pada drive yang backup sedang ditulis. Kami merekomendasikan bahwa Anda membersihkan file lama di folder backup secara teratur untuk memastikan bahwa Anda tidak kehabisan ruang disk. Script tidak mengandung logika untuk membersihkan file lama.



Selamat Mencoba :)