SQL Server Indonesia User Groups Community SQL Server Newbie
SSIS : Error code 0xc0010001

[SSIS.Pipeline] Error: component “MyComponentName” failed the pre-execute phase and returned error code 0xc0010001.

Pinter banget yah, bikin error message-nya. Sering banget kalau dapet error, yang keluar hanya code doang, kgak ada detailnya. Seharusnya mereka bikin link di error code-nya untuk lihat detailnya.

Ternyata 0xc0010001 menandakan anda belum mapping parameter-nya dengan variable yang tersedia.

Silakan di cek kembali query dari component anda, kalau ada parameternya, anda tinggal mapping ke variable yang tersedia.

Sebagai tambahan, setiap Connection type punya parameter marker-nya masing2:

Connection type Parameter marker
ADO ?
ADO.NET and SQLMOBILE @<parameter name>
ODBC ?
EXCEL and OLE DB ?


dan memiliki parameter name-nya masing2:

Connection type Parameter marker
ADO Param1, Param2, …
ADO.NET and SQLMOBILE @<parameter name>
ODBC 1, 2, 3, …
EXCEL and OLE DB 0, 1, 2, 3,…

 

Contoh untuk OLEDB:

image

image

Can’t drop the login (Error: 15173)

Pesan error-nya:

Login ‘domain\user’ has granted one or more permissions. Revoke the permission before dropping the login (Microsoft SQL Server, Error:15173)

Ini berarti user yang akan kita drop, telah memberikan permission ke orang lain sehingga masih ada ketergantungan terhadap object principal yang lain.

Kita bisa mengetahui permission apa saja yang telah di-granted oleh [domain\user] tersebut, dengan query:

SELECT
  sp.class_desc,
  sp.permission_name,
  sp.state_desc,
  p.name as grantee_name,
  p.type_desc as grantee_type
FROM sys.server_permissions sp
    INNER JOIN sys.server_principals p
         ON p.principal_id = sp.grantee_principal_id
WHERE grantor_principal_id = (
    SELECT principal_id FROM sys.server_principals WHERE name = N’domain\user’
)

atau buka SQL Server Management Studio, kemudian pilih Security > Logins > domain\user > right click > Properties,

Buka tab Securables, click tombol [Add], kemudian pilih [All objects of the types…], pilih semua option yang ada. Di bagian bawah akan ada list semua permission yang di-grant. Lihat apakah ada permission dengan grantor adalah ‘domain\user’ tersebut. Kalau ada, silakan dipindahkan ke grantor yang lain atau dibuang kalau memang tidak digunakan lagi.

Can not Print SSRS Report: Unable to load client print control

image

Apabila keluar error diatas pada saat akan melakukan print report, silakan apply KB954606 di SQL Server Service Pack 2 anda, atau uninstall KB956391 (The ActiveX Kill Bit update) yang ada di client anda.

Access denied when trying to access Reporting Services 2008 on Windows Server 2008

Setelah kita meng-install Reporting Services 2008 di windows 2008 dan mencoba meng-akses reportserver dari local server, anda mungkin akan menerima error ini: 

The permissions granted to user 'domain\username' are insufficient for performing this operation.

image Kalau ternyata anda sudah menjadi admin tapi tetap menerima error di atas, bisa gunakan context menu “Run as administrator” untuk menjalankan browser anda, untuk mengakses reportserver ataupun Report Manager-nya.

Untuk meng-configure local administration anda bisa mengikuti beberapa tahap di bawah ini:

  • Start > All Programs > right click IE > Run as administrator
  • buka http://serverName/reports
  • click menu Properties
     image
  • click “New Role Assignment”
    image
  • masukan nama account yang akan dijadikan admin : “domain\namaaccount
  • Pilih “Content Manager
  • click “OK
  • click menu Site Setting yang ada di pojok kanan atas
    image
  • Click “Security
    image
  • Click “New Role Assignment”
  • Masukan domain\username
  • Pilih “System Administrator”
  • Click “OK

Tapi ingat, apabila anda ingin mengakses report anda dari local server, anda tetap harus menggunakan fasilitas “Run as administrator”

SQL Management Studio 2008: Saving changes is not permitted

Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be re-created.

By default, kita nggak bisa save perubahan pada table yang sudah di-create, karena (sesuai dengan pesannya) perubahan ini akan menyebabkan table tersebut di-drop dan di-create ulang yang mungkin akan menjadi masalah terhadap user yang sedang menggunakan table tersebut.

Beberapa perubahan yang perlu re-create table adalah:

  • column baru
  • delete column yang sudah ada
  • perubahan nullability
  • perubahan urutan column
  • perubahan tipe data

2008-12-04_090338

Apabila anda tetap ingin bisa me-save perubahan dg menggunakan Management Studio walaupun ternyata perlu drop and re-creat table tersebut, silakan buka menu Tools > Options > Designers > uncheck “Prevent saving changes that require table re-creation”:

2008-12-04_091229

 

ref: http://msdn.microsoft.com/en-us/library/bb895146.aspx

SSIS 2008 : Cache & Lookup

Salah satu yang bisa membuat Lookup di SSIS 2008 menjadi lebih baik adalah tersedianya pilihan penggunaan Full Cache dengan Cache Connection Manager yang memiliki 2 pilihan resource: Memory | Cache File.

Kita tetap bisa menggunakan OLE DB connection manager untuk Lookup walau kadang kala jauh lebih pelan apabila datanya cukup banyak. Di komponen Lookup, juga tersedia pilihan untuk menentukan apa yang akan anda lakukan apabila ada row yang tidak match.

Pada Full Cache, semua data akan diambil dari table (sesuai dengan query lookup anda) akan disimpan di Cache. Untuk Partial Cache, data yang sudah diambil dan ternyata match, akan disimpan di Cache untuk dapat digunakan kembali sedangkan “No Cache”, semua data akan diambil kembali setiap row akan di-lookup.

Untuk Partial cache di komponen Lookup, di bagian “advanced”, kita bisa menentukan berapa besar cache size yang akan diletakan di memory.

lookuppartialcache

 

Penggunaan Full Cache untuk Lookup

Sebelum menggunakan Full Cache dengan connection type: “Cache Connection Manager”, kita perlu membuat satu “new connection” di bagian “Connection Manager” dengan connection manager type adalah “CACHE”:

newconnectionmanager 

Untuk menggunakan file cache anda bisa check di pilihan “Use file cache” kemudian tentukan dimana anda ingin meletakan file cache tersebut.

newcacheconnectionmanager

Kemudian kita ke tab columns, untuk mendaftarkan semua column yang akan disimpan di cache yang kemudian akan kita gunakan di komponen Lookup. Untuk column yang tidak menggukan index, anda bisa set index position menjadi 0; Index position dimulai dari 1.

newconnectionmanagercolumns

Kembali ke Lookup transformation editor anda, pilih Full Cache pada bagian Cache Mode. Kemudian pilih Cache connection manager sebagai connection type-nya.

lookupeditor

kita ke “connection”, dimana kita akan memilih cache connection manager yang telah kita buat:

lookupeditorconnection

Setelah itu, mapping column yang akan di-lookup:

lookupeditorcolumn

Apabila anda menggunakan Partial Cache, anda bisa menggunakan fasilitas “advanced”.

 

Untuk full cache dengan cache connection manager, menghabiskan sekitar 1.4 detik:

resultlookupfullcache

sedangkan full cache dengan OLE DB Connection untuk data lookup yang sama, menghabiskan sekitar 1.6 detik:

resultlookupoledbcache

Posted 04 December 2008 02:02 AM by David | no comments
Filed under:
Monitoring Resource Governor

Ada beberapa cara untuk memonitor resource governor yang telah kita apply:

Dengan menggunakan Performance Counter:
    -  SQLServer: Resource Pool Stats
    -  SQLServer: Workload Group Stats
Kita juga bisa melihat performance counter melalui DMV: sys.dm_os_performance_counters

DMVs:

  1. sys.dm_resource_governor_configuration (in memory configuration): memperlihatkan semua resource governor yang ada di instance tersebut, baik yang sudah di-"Reconfigure" maupun tidak. Untuk metadata configuration, anda bisa menggunakan sys.resource_governor_configuration
  2. sys.dm_resource_governor_resource_pools (in memory configuration): memperlihatkan kondisi, statistik dan configuration dari pool yang sudah kita buat. Untuk metadata configuration, anda bisa menggunakan sys.resource_governor_resource_pools
  3. sys.dm_resource_governor_workload_groups (in memory configuration): memperlihatkan kondisi, statistik dan configuration dari workload yang ada di instance tersebut. Untuk metadata configuration, anda bisa menggunakan sys.resource_governor_workload_groups

 

in memory configuration dan metadata configuration hanya akan berbeda apabila ada perubahan pada resource governor yang blum di-apply dengan perintah ALTER RESOURCE GOVERNOR RECONFIGURE

Step by step: Resource Governor

Ada banyak referensi yang menjelaskan apakah resource governor, oleh karena itu, tanpa basa-basi, mari kita langsung mencoba membuat resource governor:

1.  Buat Resource Pool:

CREATE RESOURCE POOL [PoolName] WITH (

  MIN_CPU_PERCENT=[value],
  MAX_CPU_PERCENT=[value],
  MIN_MEMORY_PERCENT=[value],
  MAX_MEMORY_PERCENT=[value]

) ;
GO

Sebagai contoh, jika kita ingin membuat resource pool dengan nama NoPagingReportPool dan Max CPU 40%, maka script diatas menjadi:

CREATE RESOURCE POOL NoPagingReportPool
WITH (MAX_CUP_PERCENT = 40);
GO;

Dengan menggunakan sys.dm_resource_governor_resource_pools, anda bisa melihat daftar resource pool yang ada pada instance tersebut.
Ada 2 pool yang dibuat oleh system: internal dan default; dimana internal adalah pool yang melayani system background task dan tidak mempunyai batasan resource, "default" adalah pool yang akan digunakan oleh setiap connection secara default apabila tidak ada workload group yang terdaftar untuk connection tersebut.
Maximum jumlah pool adalah 20, tapi dengan unlimited workload group.

2.  Buat workload group

CREATE WORKLOAD GROUP [groupname]
USING [PoolName]
GO;

Sebagai contoh, untuk membuat workload group dengan nama ReportTeamGroup yang akan menggunakan  NoPagingReportPool sebagai Resource Pool-nya, maka script-nya menjadi:

CREATE WORKLOAD GROUP ReportTeamGroup
USING NoPagingReportPool;
GO;

3.  Jalankan Resource Governor Reconfigure untuk di-reconfigure sesuai dengan perubahan yang telah kita apply:

ALTER RESOURCE GOVERNOR RECONFIGURE;
GO;

4.  Buat Classifier Function baru yang mengembalikan nama dari Workload Group yang akan digunakan:

CREATE FUNCTION classfier_sql01()
RETURNS SYSNAME WITH SCHEMABINDING
AS
BEGIN

<your logic>

RETURN 'Default';

END;
GO;

Pada logic, anda juga bisa menggunakan beberapa function yang bisa membantu anda meng-klasifikasikan, seperti HOST_NAME, APP_NAME, SUSER_NAME, ORIGINAL_DB_NAME, IS_MEMBER dan CONNECTIONPROPERTY.

 

5.  Daftarkan function yang telah kita buat:

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNTION = nama_classifier_function);
GO;

Untuk melihat daftar classfier function yang telah didaftarkan, kita bisa melihatnya melalui: sys.dm_resource_governor_configuration.

 

Untuk melakukan test terhadap resource pool yang anda gunakan, anda bisa menggunakan PerfMon. Di perfmon tool, pilih counter object yang bernama MSSQL$NAMAINSTANCE:RESOURCE GOVERNER, kemudian add "CPU Usage %" dengan instance yang dipilih adalah nama Poolnya (contoh: NoPagingReportPool).

 

Ref: http://msdn.microsoft.com/en-us/library/bb933866.aspx

Dedicated Administrator Connection

Kadang kita tidak bisa menarik data / connect ke database server yang load-nya cukup padat, bahkan RDP pun kadang2 nggak memungkinkan. Beberapa orang berpikir "Lebih baik gw restart servernya dan server kembali active". Sayangnya, cara ini terlalu terburu-buru dan tidak akan menemukan sumber masalah yang potential akan berulang berkali-kali. (Kecuali kalau perintah "KILL" tidak berfungsi)

Untuk menggunakan DAC, kita harus meng-configure SQL Server untuk dapat menerima DAC secara remote, dengan menjalankan:

sp_configure "remote admin connections", 1
GO
RECONFIGURE WITH OVERRIDE
GO

tapi anda bisa juga meng-configure melalui SQL Server Surface Configuration.

Untuk masuk melalui DAC, kalau menggunakan SQL Server Management Studio, di field "Server Name" kita tinggal menambahkan "ADMIN:" + nama server, menjadi: "ADMIN:[Server\Instance Name]".

 

Setelah connect ke Server melalui DAC, ada beberapa hal yang bisa kita lakukan dalam meng-investigasi apa yang menyebabkan kita tidak bisa connect ke server tersebut melalui port biasa, antara lain:

    1. Query ke DMV [Dynamic Management View]:
      a. sys.dm_tran_locks: mengetahui resources mana yang sedang di-lock atau yang masih "waiting"
      b. sys.dm_os_memory_cache_counters: mengetahui keadaan cache (snapshot)
      c. sys.dm_exec_requests: menunjukan semua request yang sedang dieksekusi'
      d. sys.dm_exec_sessions: menunjukan semua session yang ada di serve
    2. Gunakan DBCC:
      a. DBCC FREEPROCCACHE: Membebaskan plan yang ada di plan cache
      b. DBCC FREESYSTEMCACHE: Membebaskan cache yang sudah tidak terpakai
      c. DBCC DROPCLEANBUFFERS: Menghapus semua buffer yang tidak terpakai lagi dari buffer pool
      d. DBCC SQLPERF: mengetahui detail log dari semua database
    3. Gunakan T-SQL: "KILL"

 

Informasi lebih detail, silakan ke http://msdn.microsoft.com/en-us/library/ms189595.aspx

Performance Counter untuk Database Mirroring

Beberapa performance counter yang biasa digunakan untuk memonitor aktifitas Database Mirroring di SQL Server 2008:

  • Log Bytes Redone from Cache/sec (Higher is better) – Mirror server counter
    Banyaknya Transaction Log (Bytes) yang bisa diambil dari redo queue yang ada di cache.
  • Log Bytes Sent from Cache/sec (Higher is better) – Mirror server counter
    Jumlah Transaction log yang bisa dikirim (dalam bytes) dari principal ke mirror dengan membaca Transaction Log cache-nya. Kedua aktifitas ini, mengambil transaction log dari cache, karena lebih cepat dari pada mengambil dari disk.
  • Log Harden Time (ms) (Lower is better) – Mirror server counter
    Memonitor berapa lama waktu yang dihabiskan sejak Log diterima oleh mirror server hingga selesai ditulis ke database log disk
  • Log Compressed Bytes Rcvd/sec 
  • Log Compressed Bytes Sent/sec (Higher is better)
    Kedua Counter ini bisa digunakan untuk memonitor besarnya compressed, dengan membandingkan nilai performance counter ini dengan Log Bytes Sent dan Log Bytes Received
  • Log Send Flow Control Time (ms) (Lower is better)
  • Mirrored Write Transactions/sec (Higher is better)
  • Send/Receive Ack Time (Lower is better)

 

ref: SQL Server Books Online: http://msdn.microsoft.com/en-us/library/ms189931.aspx

Error 823, 824 dan 829 pada database mirroring di SQL Server 2008

Di SQL Server 2008, apabila ada yang mencoba mengakses page yang corrupt pada principal di database mirroring, otomatis akan diperbaiki dengan mencari bagian hilang di mirror-nya (begitu juga sebaliknya). Hal ini dianggap sebagai P3K (Pertolongan Pertama Pada Kecelakaan... hehehe) yang dilakukan untuk menjaga availability dari database tersebut.

 

Error yang akan diterima apabila page yang kita akses ternyata corrupt (atau terdeteksi dengan menggunakan DBCC), yaitu:

  1. Error 823: SQL request ke OS untuk baca page-nya, tapi OS tidak bisa retrieve page tersebut; atau Error 824: OS bisa baca page-nya, tapi SQL men-deteksi kalau ternyata page tersebut corrupt.
  2. Error 829: selama perbaikan (yang otomatis dilakukan oleh SQL) masih berlangsung, apabila ada yang melakukan query ke page yang sedang diperbaiki tersebut, maka akan dikirim Error 829 ini sebagai resultnya.

 

Selama perbaikan, event log akan mencatat:

Database mirroring is attempting to repair physical page <page number> in database <database name> by requesting a copy from the partner

dan kemudian,

Database mirroring successfully repaired physical page <page number> in database <database name> by obtaining a copy from the partner

 

Pesan dari sponsor:

Perbaikan ini dilakukan secara otomatis, tapi bukan berarti perkejaan kita selesai. Kita tetap punya PR untuk mencari tahu sumber kerusakan yang menyebabkan data corrupt ini.

Penyempurnaan DBCC CHECKDB di SQL Server 2008

DBCC digunakan untuk mengetahui database corruption lebih dini, yang pada umumnya terjadi karena masalah I/O. Pada saat DBCC CHECKDB diexecute, pertama-tama dia akan mengecek apakah ada corrupt pada databasenya. Kalau ada corrupt, dia akan mengecek ulang dari awal dengan lebih detail untuk mengetahui lokasi bagian yang corrupt tersebut (DEEP DIVE). Sayangnya, process ini akan memakan resource yang cukup banyak dengan waktu yang relatif lama.

Di SQL Server 2005 SP 2, apabila terjadi DEEP DIVE, DBCC akan menghasilkan error output:

DBCC CHECKDB is performing an exhaustive search of indexes for possible inconsistencies.  This is an informational message only. No user action is required.

Di SQL server 2008, nama-nama table yang sedang di scan untuk kedua kalinya (DEEP DIVE), akan tertulis di Error output tersebut. Hal ini membantu kita untuk lebih cepat mengetahui tabel mana yang memiliki bagian yang corrupt.

Email : Reporting and Logging of Maintenance Plans

Di Reporting and Logging SQL server 2005 Maintenance Plans, terdapat pilihan “Send Report to an email recipient”, dimana kita bisa mengirim laporan / log dari subplan ke email address yang sudah terdaftar sebagai Agent Operator.

Yang harus disiapkan terlebih dahulu adalah Database Mail dan Agent Operator:

  1. Database Mail configuration
    • Pilih ”Configure Database Mail” dari context menu “Database Mail” yang ada di folder “Management” pada server anda
    • Kemudian Pilih “Set up Database Mail by performing the following tasks:…”
    • Masukan nama profilenya di field “Profile name” (ini tidak bisa di-edit lagi atau permanent)
    • click tombol [Add] pada bagian “SMTP accounts”
    • Apabila anda belum pernah create “Database Mail account” anda bisa click tombol [New Account] untuk create account baru.
    • Pilih account name (anda bisa menggunakan account yang baru anda buat)
    • Tekan [OK], kemudian akan muncul account yang dipilih di table “SMTP Accounts”
    • Tekan Tombol [Next] apabila anda sudah selesai
    • Anda akan melihat “Manage Profile security”, di tab “Public Profiles” pilih Profile name yang akan menjadi default profile dengan cara mengganti nilai “Default Profile” menjadi ‘Yes”
    • Tekan tombol [Next], setelah itu anda akan melihat “Configure System Parameters” wizard
    • Tekan tombol [Next] lagi kemudian tekan tombol [Finish]
  2. Agent Operator
    • Pilih menu “New Operator” pada context menu dari folder “Operators” yang ada di “SQL Server Agent” dari server anda
    • Masukan detail operator-nya, terutama “Name” dan “email name”
    • Tekan [OK]

Setelah keduanya sudah disiapkan, silakan anda ke maintenance plan-nya, tekan tombol [Reporting and Logging] di bagian atas layar. Kemudian pastikan anda memilih “Send Report to an email recipient” dan memilih agent operator yang telah anda buat. Tekan tombol [OK] dan save pekerjaan anda.

 

Untuk mengetest nya, silakan jalakan subplan job anda, yang ada di folder “Jobs” dari “SQL Server Agent”-nya.

Script to Rebuild Index

I’ve just uploaded two script files to help you guys maintain your indexes:

1. reindex : to rebuild your index in target server (30% - 70% will be reorganized, more than 70% will be rebuilt)
2. checkingindex : to show all indexes with fragmentation more than 30%

 

Don’t forget to use [sqlcmd mode] to execute :connect [servername]

Bad Index Maintenance Plan

Our team had been complained about some performance problem when trying to query some data from their application. When I was checking on our database servers, I saw this maintenance plan - scheduled every day at 12AM.

Just in case, if you guys can't see the picture on the left, this is the detail of this someone's bad index maintenance plan:

Check Database Integrity –> Shrink Database (all user database, shrink database when it grows beyond 100MB, and amount of free space to remain after shrink is 10%, Return freed space to operating system) –> Reorganize Index –> Rebuild Index –> Update Statistics (Update all existing statistics, Full scan)

Regardless to any performance problem, I don’t think this is a good maintenance plan.

Rebuild Index or Reorganize Index

Use [sys.dm_db_index_physical_stats] to detect fragmentation in all or specific index. you can reorganize index with fragmentation between 30% – 70% , more than that just rebuild it.

Update Statistics

Reorganize index will not update the statistic in any way whereas rebuild index will update the statistic with full scan. That’s why you can update statistics after you reorganize index, but don't update statistics after rebuild index or reorganize index before rebuild index.

More Posts Next page »