ceturtdiena, 2014. gada 6. februāris

Datu apskatīšana/saglabāšana no nvarchar(max) kolonas


Iedvesmojoties no vakardienas twīta:


Ja ir varchar/nvarchar/xml utt kolonna, kurā ir daudz dati, tad kolonnas saturu SSMS nevar apskatīt (te gan jāsaka ka jaunākām SSMS versijām sanāk daudz labāk, bet joprojām ne gana labi).

Risinājums ir datus eksportēt uz failu. Savā variantā izmantoju komandvirkni (cmd.exe) un utilītprogrammu bcp (msdn plašāk).

Komandrinda, ko vajadzības gadījumā pielāgoju:
bcp "select cast(LAUKS as nvarchar(max)) from ManaTabula with (nolock) where RindasID = ID" queryout "c:\Mape\Rez.txt" -S ServeraVards -U LietotajaVards -P Parole -d DatuBaze -w

Ja slēdzos datu bāzei klāt ar Windows autentifikāciju, tad šādi:
bcp "select cast(LAUKS as nvarchar(max)) from ManaTabula with (nolock) where RindasID = ID" queryout "c:\Mape\Rez.txt" -S ServeraVards -d DatuBaze -T -w
  Šis strādā ātri un nav problēmu, ja lauka garums ir pārdesmit megabaiti.

otrdiena, 2013. gada 3. decembris

Down-time

Šodien (2013-12-03) piedzīvots relatīvi īslaicīgs emuāra darbības pārtraukums.
Saistīts ar to, ka veicu vidēji veiksmīgus eksperimentus ar domēna iestatījumiem.

Ja lasi šo ziņu, viss atkal ir kārtībā!
(attēls no šejienes)

ceturtdiena, 2013. gada 28. novembris

Rīks: WinDirStat

Šis rīks vienkāršā un pārskatāmā veidā palīdz saprast, kas datorā "apēd" brīvo vietu. Pamēģināju un palika visnotaļ labs priekšstats.

Lejupielādei: http://windirstat.info/


trešdiena, 2013. gada 30. oktobris

In-Memory database (hekaton)

Vakar (2013-10-29) TechDay cita starpā bija lekcija par  datu bāzēm "SQL Server 2014: in Memory Database – What is It and Why We Need It ". Demonstrētie piemēri un slaidi atrodami- http://sdrv.ms/HennTechDay2013.

In memory datu bāzes ir viens no visinteresantākajiem SQL 2014 jaunumiem. Lai šos piemērus pamēģinātu, protams, vajag SQL 2014 CTP2 (kad iznāks gala versija- šobrīd vēl neviens nezin vai nesaka).

Lai nu kā, mēģinot piemērus, neaizmirstiet "SET NOCOUNT ON". Demonstrācijā miljons rindu ievietošanas lielāko daļu laika patērēja tieši ziņojuma "1 row affected" izvadīšana.
set nocount on; -- bez šīs rindas: 00:02:09, ar šo rindu 00:00:49
declare @start datetime = getdate()
declare @i int = 0
begin tran
while (@i < 1000000)
begin                                                                           
    insert Test1 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 22
    insert Test2 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 5
    insert Test3 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 7
    insert Test4 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 4
    insert Test5 values (@i, 'Product ' + cast(@i as char(6)), 10)   --
    set @i += 1
end
commit
select DATEDIFF(ms, @start, getdate())

otrdiena, 2013. gada 15. oktobris

Izpildes laika izvadīšana

Ja SQL Server Profiler darbināt slinkums, te viens īsais veids kā to vēl var izdarīt:
Declare @StartTime datetime = getdate();
select 1 -- mans vaicājums/procedūra vai vienalga kas..
Print ' Duration = ' + CONVERT(VARCHAR(30), getDate() - @StartTime, 114) + ' (hh:mi:ss:mmm)';
Piebildes
  • DateTime dēļ procedūras rezultātu precizitāte līdz 3 ms (Jauno SQL Server versiju Profiler strādā ar mikrosekundēm, lai arī GUI rāda milisekundes)
  • Uz SQL Server 2005 vai vecākām versijām piemērs ir jāpiekoriģē (sanāks vairāk rindu)
Kāpēc šis variants?
  • Slinkums vērt vaļā profiler
  • Statistics Time ir detalizētāks, taču, piemēram, procedūrā ar kursoru sanāk katras komandas laiks atsevišķi. Un man šeit tas tikai traucēja.
Ko darīt, ja ir daudzas komandas (piemēram, procedūras iekšienē) un vajag/gribas redzēt izpildes laikus procedūras izpildes laikā?

Print vietā izmantot Raiserror (Ziņojumu izvadīšana izmantojot RAISERROR), no sākuma gan ziņojums būs jāpiešķir kādam mainīgajam:
RAISERROR ('Tiks izvadīts momentāli un šī nav kļūda!', 0, 1) WITH NOWAIT; 

ceturtdiena, 2013. gada 11. jūlijs

Rezerves kopijas: daļēja atjaunošana (Piecemeal Restores)

SQL Server ir iespēja veidot rezerves kopijas ne tikai visai datu bāzei uz reiz, bet arī tikai tās daļām. Tas ir noderīgi, ja ir liela izmēra datu bāzes un tikai daļa no datiem būtiski mainās/tiek papildināti. Šādā veidā var būtiski samazināt laiku, kas vajadzīgs rezerves kopiju veidošanai, kā arī rezerves kopijas izmērus.


Datu bāzi ir iespējams atjaunot tikai daļēji. Pēc daļējas atjaunošanas pieejama kļūst tikai atjaunotā datu bāzes daļa. Šī iespēja savukārt ļauj būtiski samazināt atjaunošanas laiku kritiskām datu bāzes daļām. Protams, lietojumam jābūt spējīgam strādāt ar datu bāzi, kas pieejama tikai daļēji.

otrdiena, 2013. gada 14. maijs

Kļūsti par Microsoft sertificētu profesionāli

Katru gadu kā pārsteigums, tomēr vienmēr apmēram vienā laikā, rodas vēlme nokārtot kādu sertifikācijas eksāmenu. Šis raksts ir par to, kam vajadzīgi sertifikāti, kur meklēt savai sfērai atbilstošu Microsoft sertifikācijas eksāmenu un kur eksāmenu kārtot, kā arī par Microsoft eksāmena kārtošanas norisi.