Tímto skriptem lze v SQL databázi vyhledat objekty, ve kterých se objevuje určitá část kódu nebo příkaz. Např.nedávno jsem musel kvůli určitým změnám vyhledat a změnit procedury a trigery, kde je použit příkaz Raiserror.

SELECT OBJECT_NAME(object_id), definition
FROM sys.sql_modules
WHERE definition LIKE N'%Raiserror%'

Určitě jste někdy bádali nad tím, kdy byla naposledy updatovaná nějaká tabulka. Já dosti často u tabulek vytvářím 2 pole, jeden pro datum a čas insertu záznamu a druhý pro datum a čas posledního updatu. Jsou ale tabulky kde taková data nevyužijete a proto je tam nemáte a pak je třeba tyto informace zjišťovat jinak.

Níže  uvedený script vypíše některé zajímavé informace o tabulce vč.data posledního updatu. Ten je ve sloupci last_user_update

Vysvětlení příkazu: 

OBJECT_NAME(OBJECT_ID) - vrací název tabulky
DB_ID('NazevDB') - vrací ID databáze
OBJECT_ID('NazevTabulky') - vrací ID tabulky 

Pokud v klauzuli WHERE vynecháte název tabulky, vypíší se kompletně všechny tabulky v dané databázi  

USE [CvicnaDB]
GO

SELECT OBJECT_NAME(OBJECT_ID) AS NazevTabulky,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'CvicnaDB')
AND OBJECT_ID=OBJECT_ID('NypTabLogMailu')

 

Výsledek:

Nedávno jsem si lámal hlavu s instalací nového bezpečnostního řešení na firemní stanice. I po odinstalaci stávajícího Esetu a dokonce i po použití speciální utility od Esetu pro odinstalaci v nouzovém režimu, který ve většině případů vyřeší obdobné problémy stále nové řešení tvrdilo, že na počítači je nainstalován jiný antivir a proto nedovolí další instalaci rezidentní ochrany.

Zjistil jsem, že problém je v tom, že v registrech Windows zůstanou instance s nastavením stávajícího antiviru v Security Centru.

Jak z toho ven? Jedna z možností je prohledávat registry a mazat dané klíče. 

Mnohem rychlejší a bezpečnější však je použít příkazový řádek, připojit se k rozhraní WMI (Windows Managment Interface) a dané instance vymazat. Nebo použít nástroj WBEM a provést to stejné v grafickém režimu. Dále popíšu oba postupy

 

1 . Použití příkazové řádky

- Spusť příkazový řádek jako správce CMD.EXE
- Spusť příkaz WMIC
- Zadej /namespace:\\root\SecurityCenter2 PATH AntiVirusProduct get * a spusť
- Vypíší se instance antiviru

- Zkopíruj si GUID dané instance. V mém případě to jsou 2 instance {885D845F-AF19-0124-FECE-FFF49D00F440} a {EC1D6F37-E411-475A-DF50-12FF7FE4AC70}. V dalším kroku je budeš potřebovat
- Vymazej dané instace příkazem /namespace:\\root\SecurityCenter2 PATH AntiVirusProduct WHERE instanceGuid='{885D845F-AF19-0124-FECE-FFF49D00F440}' DELETE (druhou a další instanci vymazej stejně použitím dalších GUID)
- Windows Defender nemazej !!!

 

Outlook se při archivaci řídí informací kdy byla daná zpráva do pst souboru uložena/archivována nikoliv podle data odeslání nebo přijetí zprávy. V některých případech např.když používáte synchronizaci zpráv může být toto datum modifikováno na novější a archivace pak dle nastavených kritérií (datum) nefunguje.

Toto se týká všech Outlooků od verze 2007 po 2019 a O365.

Chování se dá změnit nastavením v registrech, kde se musí změnit klíč ArchiveIgnoreLastModifiedTime na hodnotu 1

 

Dobrý večer pane Koutský,

potřebujeme, abyste nám znovu zaslal cca 1000 souborů, protože nedošlo k automatickému spárování se systémem. Seznam požadovaných souborů je v příloze.

 

TVL vážně? Je pátek 19:00 a ten adresář má 97 tisíc souborů, jak z toho mám vykopírovat 1049 souborů ?? 

Vždycky je řešení . Výpověď, přehodit to na kolegyni, ... A nebo si napsat skript pro SQL :-) 

 

Níže uvedený script počítá, že csv soubor má jeden sloupec s názvem souboru. Pro vícesloupcový soubor si jednoduše upravte temp tabulku, skript s více sloupci počítá (oodělovač, akorát název souboru musí být ve sloupci Soubor

 Pochopitelně musíte mít povolené a nakonfigurované použití XP_CMDSHELL a BULK INSERT

 

-- deklarace proměnných
DECLARE
@soubor nvarchar(50), 
@From nvarchar(50) = '\\ds02\atesty\', 
@To nvarchar(50) = '\\ds02\atesty\copy\',
@SQL nvarchar(500)

--vytvoreni pomocne tabulky
CREATE TABLE #TabImport (soubor nvarchar(50))

-- import z csv do pomocne tabulky
BULK INSERT #TabImport 
FROM '\\ds02\atesty\import.csv' 
	WITH (
	      FIELDTERMINATOR =',',
          ROWTERMINATOR ='\n',
	      FIRSTROW = 1,	
          CODEPAGE = 'ACP'
	     )        	

-- kolik to bude souboru? Řeší i duplicitu. Pro kontrolu
SELECT COUNT (DISTINCT(soubor)) FROM #TabImport

-- cyklus pro nazev souboru
DECLARE cur_vypocet CURSOR FOR
-- nacteni nazvu souboru z pom.tab					
SELECT DISTINCT(soubor) FROM #TabImport
-- otevreni kurzoru
OPEN cur_vypocet
FETCH NEXT FROM cur_vypocet INTO @soubor
WHILE @@FETCH_STATUS=0						
  BEGIN
     -- sestaveni prikazu pro kopii souboru
	 SET  @sql = 'copy ' + @From + @soubor + ' ' + @To + @soubor
	 -- zavolani procedury s parametrem kopirovani pro dany soubor
	 EXEC master.dbo.xp_cmdshell @SQL
	 -- pokracuj na dalsi soubor
    FETCH NEXT FROM cur_vypocet INTO @soubor
  END   
-- uzavreni kurzoru
CLOSE cur_vypocet 
-- uvolneni pameti
DEALLOCATE cur_vypocet

-- promazani pomocne tabulky
DELETE FROM #TabImport
-- zruseni tabulky
DROP TABLE #TabImport

 A jde se na pivo :-)

 

 

 

Původně to měla být kategorie o cestách, které podniknu na svém starém kole-dědkovi. Pak se mě název zalíbil a říkám si, že jednou budu taky dědek, vlastně syna už na to mám dost velkýho, a tak nadčasově tuto kategorii nechám pojmenovanou takto. Takže zde nalezneš zápisky z cest. 

Zde je můj blog o SQL. Je to takový můj tahák.

Moje poznámky z instalací