Az MySQL charset problémák megoldása.
Ezek lettek a barátaim:
ALTER DATABASE kl_quiz charset=utf8;--SET NAMES 'latin1';
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE DATABASE IF NOT EXISTS `kl_quiz` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `kl_db`;
Ez procedúráknál volt hasznos:
DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `p_question`(
v_direction varchar(4),
v_question_id int
)
BEGIN
...
END$$
DELIMITER ;
Ezek a parancsok is nagyon hasznosak voltak:
SELECT *FROM INFORMATION_SCHEMA.COLUMNS
WHERE 1 =1
AND TABLE_SCHEMA = 'kl_quiz'
---LIMIT 0 , 30
--------------------------------------
SELECT *
FROM `TABLE_CONSTRAINTS`
LIMIT 0 , 30
--------------------------------------
SELECT *
FROM `TABLES`
LIMIT 0 , 30
SQLSzerver modell ellenőrzés OLTP->standing
-------------------------------------- ms sql serve dw dm st modell ellenőrzés /* Módosítás szükséges a konkrét generált névkonvenció szerin a táblanév, mezőnév, PK-FK név kiválásztást szerint. Egységes LOG táblába írás a vizsgálatok előgyűjtése amelyekre elemző riportok készülhetnek. További bővíthetőség: Betöltési dátumonként (Job_ID-nként, tarticionkénti, ..) elemzés futtatás Elemzési objektum kör bővítése (indexek, egyéb függések megléte , be/kikapcsolt állapota, ...) Összes érintett táblára mező töltötség vizsgalat kiterjesztése /* */ ----- Ellenőrzések adatbázis védelmébe behelyezése (SQL Server specifikus) --#################################################### --1 táblák meglétének ellenőrzése
/* Szerző: Kecskeméti Lajos 2016 A DW_MASTER_TABLE tábla adatokat megkeresí az adatbázis sémájában amit nem talál meg azt lelogolja a dw_master_log táblába. A tipus 'TABLA_ELL' cimke lesz */
Create Procedure KL_tabla_ell ( @KL_valt Varchar(200) ) As Begin ----- insert into dw_master_log select 0 as ossz_db, 0 as tolt_db, 'TABLA_ELL' as tipus, 'klajos' as tmej, x.forr_az, x.sema, x.tabla_nev , '-' as OSZLOP_NEV, getdate() as datum from (SELECT distinct 'db' as forr,'kl_db' as forr_az, TABLE_SCHEMA as sema, TABLE_NAME as tabla_nev FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='kl_tabla') d FULL OUTER JOIN (SELECT distinct 'xls' as forr, FORR_AZ ,SEMA ,TABLA_NEV FROM DW_MASTER_TABLE where TABLA_NEV ='kl_tabla') x on 1=1 and d.FORR_AZ = x.FORR_AZ and d.SEMA = x.SEMA and d.TABLA_NEV = x.TABLA_NEV where d.TABLA_NEV is null --- hiányzó tábla (ami nincs legenerálva) -------- End --#################################################### --2 Táblák mezőinek meglétének ellenőrzése
/* Szerző: Kecskeméti Lajos 2016 A DW_MASTER_TABLE tábla mezőadatokat megkeresí az adatbázis sémájában amit nem talál meg azt lelogolja a dw_master_log táblába. A tipus 'MEZO_ELL' cimke lesz */
Create Procedure KL_mezo_ell ( @KL_valt Varchar(200) ) As ---------------------- Begin insert into dw_master_log select 0 as ossz_db, 0 as tolt_db, 'MEZO_ELL' as tipus, 'klajos' as tmej, x.forr_az, x.sema, x.tabla_nev , x.OSZLOP_NEV, getdate() as datum from (SELECT 'db' as forr,'kl_db' as forr_az, TABLE_SCHEMA as sema, TABLE_NAME as tabla_nev, COLUMN_NAME as oszlop_nev, DATA_TYPE as oszlop_tipus, ISNULL(CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION) oszlop_hossz FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='kl_tabla') d FULL OUTER JOIN (SELECT 'xls' as forr, FORR_AZ ,SEMA ,TABLA_NEV ,OSZLOP_NEV ,OSZLOP_TIPUS ,OSZLOP_HOSSZ FROM DW_MASTER_TABLE where TABLA_NEV ='kl_tabla') x on 1=1 and d.FORR_AZ = x.FORR_AZ and d.SEMA = x.SEMA and d.TABLA_NEV = x.TABLA_NEV and d.OSZLOP_NEV = x.OSZLOP_NEV and d.OSZLOP_TIPUS = x.OSZLOP_TIPUS where d.OSZLOP_NEV is null --- hiányzó tábla oszlop (ami nincs legenerálva) -------- End
--#################################################### --3 Táblázat FK meglétének ellenőrzése
/* Szerző: Kecskeméti Lajos 2016 A DW_MASTER_TABLE táblában megadott FK mezők meglétének ellenőrzése és lelogolása a dw_master_log táblába. A tipus 'FK lét' cimke lesz */
Create Procedure KL_fk_let_ell ( @KL_valt Varchar(200) ) As Begin ----- insert into dw_master_log select 0 as ossz_db, 0 as tolt_db, 'FK_LET_ELL' as tipus, 'klajos' as tmej, x.forr_az, x.sema, x.tabla_nev , x.OSZLOP_NEV, getdate() as datum from (select FORR_AZ, SEMA, TABLA_NEV ,OSZLOP_NEV, FK_TABLA, FK_TABLA_OSZLOP from DW_MASTER_TABLE where FK_TABLA_OSZLOP IS NOT NULL and TABLA_NEV like 'kl_tabla%') x FULL OUTER JOIN (SELECT 'kl_db' as forr_az, -- obj.name AS FK_NAME, sch.name AS sema, tab1.name AS tabla_nev, col1.name AS oszlop_nev, tab2.name AS fk_tabla, col2.name AS fk_tabla_oszlop FROM sys.foreign_key_columns fkc INNER JOIN sys.objects obj ON obj.object_id = fkc.constraint_object_id INNER JOIN sys.tables tab1 ON tab1.object_id = fkc.parent_object_id INNER JOIN sys.schemas sch ON tab1.schema_id = sch.schema_id INNER JOIN sys.columns col1 ON col1.column_id = parent_column_id AND col1.object_id = tab1.object_id INNER JOIN sys.tables tab2 ON tab2.object_id = fkc.referenced_object_id INNER JOIN sys.columns col2 ON col2.column_id = referenced_column_id AND col2.object_id = tab2.object_id) d on 1=1 and d.FORR_AZ = x.FORR_AZ and d.SEMA = x.SEMA and d.TABLA_NEV = x.TABLA_NEV and d.OSZLOP_NEV = x.OSZLOP_NEV and d.fk_tabla = x.fk_tabla and d.fk_tabla_oszlop = x.fk_tabla_oszlop where d.fk_tabla_oszlop is null -- commit ----- End -- teszt módosítás a xls forrásban FK_TABLA, FK_TABLA_OSZLOP --- update DW_MASTER_TABLE set FK_TABLA_OSZLOP ='' , FK_TABLA = 'kl_tabla2' where TABLA_NEV ='kl_tabla' and OSZLOP_NEV ='id' --- update DW_MASTER_TABLE set FK_TABLA_OSZLOP ='id' , FK_TABLA = 'kl_tabla' where TABLA_NEV ='kl_tabla2' and OSZLOP_NEV ='id2' -- jó beszúrás
--#################################################### ----4 Az FK mező -1 érték előfordulás megszámolása ciklus
/* Szerző: Kecskeméti Lajos 2016 A DW_MASTER_TABLE táblában megadott FK mezők -1 érték előfordulásának megszámolása és lelogolása a dw_master_log táblába. A tipus 'PK -1' cimke lesz */
Create Procedure KL_pk1_ell ( @KL_valt Varchar(200) ) As Begin ----- DECLARE db_cursor CURSOR FOR select 'insert into dw_master_log select count(1) as ossz_db, count('+ OSZLOP_NEV +') as tolt_db, ''PK -1'' as tipus, ''klajos'' as tmej, '''+ FORR_AZ + ''' as FORR_AZ, '''+ SEMA +''' as SEMA, '''+ TABLA_NEV +''' as TABLA_NEV, '''+ OSZLOP_NEV +''' as OSZLOP_NEV, getdate() as datum from ' + TABLA_NEV + ' where '+ OSZLOP_NEV +'= -1 ;' as sql_paracs from DW_MASTER_TABLE where FK_TABLA_OSZLOP IS NOT NULL and FK_TABLA_OSZLOP IS NOT NULL and TABLA_NEV like 'kl_tabla%' ; DECLARE @sql_parancs VARCHAR(2000); OPEN db_cursor; FETCH NEXT FROM db_cursor INTO @sql_parancs; WHILE @@FETCH_STATUS = 0 BEGIN -- select @sql_parancs; -- sql_parancs listázás EXECUTE (@sql_parancs) -- sql_parancs futtatása FETCH NEXT FROM db_cursor INTO @sql_parancs; -- léptetés END; CLOSE db_cursor; DEALLOCATE db_cursor; --commit ----- End
--#################################################### ----5 PK vizsgálat : PK mezonkénti NULL érték előfordulás számlálása ciklus
/* Szerző: Kecskeméti Lajos 2016 A DW_MASTER_TABLE táblában megadott PK mezők NULL érték nélküli megszámolása és lelogolása a dw_master_log táblába. A tipus 'PK tölt' cimke lesz */
Create Procedure KL_pk_ell ( @KL_valt Varchar(200) ) As Begin ----- DECLARE db_cursor CURSOR FOR select 'insert into dw_master_log select count(1) as ossz_db, count('+ OSZLOP_NEV +') as tolt_db, ''PK tölt'' as tipus, ''klajos'' as tmej, '''+ FORR_AZ + ''' as FORR_AZ, '''+ SEMA +''' as SEMA, '''+ TABLA_NEV +''' as TABLA_NEV, '''+ OSZLOP_NEV +''' as OSZLOP_NEV, getdate() as datum from ' + TABLA_NEV + ' ;' as sql_paracs from DW_MASTER_TABLE where PK ='Y' -- PK jelző figyelése and TABLA_NEV like 'kl_tabla%' ; DECLARE @sql_parancs VARCHAR(2000); OPEN db_cursor; FETCH NEXT FROM db_cursor INTO @sql_parancs; WHILE @@FETCH_STATUS = 0 BEGIN -- select @sql_parancs; -- sql_parancs listázás EXECUTE (@sql_parancs) -- sql_parancs futtatása FETCH NEXT FROM db_cursor INTO @sql_parancs; -- léptetés END; CLOSE db_cursor; DEALLOCATE db_cursor; --commit ----- End
--#################################################### ----6 FK vizsgálat : FK mezonkénti NULL érték előfordulás számlálása ciklus /* Szerző: Kecskeméti Lajos 2016 A DW_MASTER_TABLE táblában megadott FK mezők NULL érték nélküli megszámolása és lelogolása a dw_master_log táblába. A tipus 'FK tölt' cimke lesz */
Create Procedure KL_fk_ell ( @KL_valt Varchar(200) ) As Begin ----- DECLARE db_cursor CURSOR FOR select 'insert into dw_master_log select count(1) as ossz_db, count('+ OSZLOP_NEV +') as tolt_db, ''FK tölt'' as tipus, ''klajos'' as tmej, '''+ FORR_AZ + ''' as FORR_AZ, '''+ SEMA +''' as SEMA, '''+ TABLA_NEV +''' as TABLA_NEV, '''+ OSZLOP_NEV +''' as OSZLOP_NEV, getdate() as datum from ' + TABLA_NEV + ' ;' as sql_paracs from DW_MASTER_TABLE where FK_TABLA_OSZLOP IS NOT NULL and FK_TABLA_OSZLOP IS NOT NULL and TABLA_NEV like 'kl_tabla%' ; DECLARE @sql_parancs VARCHAR(2000); OPEN db_cursor; FETCH NEXT FROM db_cursor INTO @sql_parancs; WHILE @@FETCH_STATUS = 0 BEGIN -- select @sql_parancs; -- sql_parancs listázás EXECUTE (@sql_parancs) -- sql_parancs futtatása FETCH NEXT FROM db_cursor INTO @sql_parancs; -- léptetés END; CLOSE db_cursor; DEALLOCATE db_cursor; --commit ----- End
Nincsenek megjegyzések:
Megjegyzés küldése