Visualizzazione post con etichetta script. Mostra tutti i post
Visualizzazione post con etichetta script. Mostra tutti i post

lunedì 22 luglio 2019

SqlServer - conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS"



Capita spesso di avere problemi di collate sui db SqlServer quando si utilizza Hibernate. Soprattuto quando cambia la codifica del db o la versione dello stesso:


Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

SELECT SERVERPROPERTY('EditionId') AS EditionId
GO
use master
GO
ALTER DATABASE [dbaname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
GO
use [dbaname];
GO
USE [master]
GO
ALTER DATABASE [dbaname] COLLATE Latin1_General_CI_AS
GO
ALTER DATABASE [dbaname] SET MULTI_USER
GO

un query che genera uno script di alter potrebbe essere di aiuto per eseguire la modifica sul singolo campo [via]:


SELECT 'ALTER TABLE [' + SYSOBJECTS.Name + '] ALTER COLUMN [' + SYSCOLUMNS.Name + '] ' +
SYSTYPES.name + 
    CASE systypes.NAME
    WHEN 'text' THEN ' '
    ELSE
    '(' + RTRIM(CASE SYSCOLUMNS.length
    WHEN -1 THEN 'MAX'
    ELSE CONVERT(CHAR,SYSCOLUMNS.length)
    END) + ') ' 
    END

    + ' ' + ' COLLATE Latin1_General_CI_AS ' + CASE ISNULLABLE WHEN 0 THEN 'NOT NULL' ELSE 'NULL' END
    FROM SYSCOLUMNS , SYSOBJECTS , SYSTYPES
    WHERE SYSCOLUMNS.ID = SYSOBJECTS.ID
    AND SYSOBJECTS.TYPE = 'U'
    AND SYSTYPES.Xtype = SYSCOLUMNS.xtype
    AND SYSCOLUMNS.COLLATION IS NOT NULL
    AND NOT ( sysobjects.NAME LIKE 'sys%' )
    AND NOT ( SYSTYPES.name LIKE 'sys%' )
    GO

mercoledì 10 febbraio 2016

MongoDB - Backup di grandi db

Nasce, molte volte, il problema di eseguire un backup su una grande mole di dati.

Uno dei modi possibili (vedi doc) è prendere i file dei db di mongo e semplicemente copiarli.

Il nostro problema nasce che non tutti i db devono essere backuppati per essere ribaltati, e il nome dei file di archivio di mongo non sono parlanti.

Una soluzione e configurare ogni db in una singola cartella con i parametri di configurazione

storage.directoryPerDB

un'altro parametro ottimo è:

storage.wiredTiger.engineConfig.directoryForIndexes

i db vengono archiviati in cartelle separate e divisi in due cartelle collections e index così eventualmente in fase di copia dei dati è possibile escludere le folder degli indici risparmiando spazio e tempo.


Questa configurazione necessita di un mongodump e un mongorestore. In caso di ReplicaSet basta fermare il primario, svuotare le cartelle, cambiare le conf e attendere che si replichi con il secondario che è diventato primario. Al termine il primario diventa nuovamente secondario e viceversa.

MongoDB version 3.0.7

martedì 9 febbraio 2016

MongoDB - Script to Delete all collection with exclusion

Semplice script per eliminare tutte le collection di un db ad esclusione di una lista di collection.


giovedì 4 febbraio 2016

MongoDB - Script per eseguire una purge di dati dalle varie collection di log

Capita alle volte di voler svuotare delle collection che contengo informazioni di log.

Questo script partendo dal nome del server ricerca tutti i db che iniziano con un certo nome, cicla tutte le collection (ad esclusione di quelle specificate), esegue una query per conteggiare i record che devono essere eliminati e poi elimina in base al numero di giorni che vogliamo mantenere sui log a partire da oggi.

Il campo di controllo di data è chiamato ts.



martedì 2 febbraio 2016

MongoDB - Migrazione da ReplicaSet a Singolo Nodo

Alle volte capita di dover demolire una replica e riportare i dati su un singolo nodo del MongoDB.

ecco la procedura testata su MongoDB 3.0.8



martedì 26 gennaio 2016

MongoDB Script per current operations

Script molto utile per analizzare le operazioni in esecuzione sul Mongo Server.

Ottimo per prevedere la creazione di eventuali indici senza utilizzare il profile standard.



risultato:

on:<dbname>.<collectionname>
time:12968
query: {"_id":{"str":"54b64c9ee4b009e7c6df0f40"}}

on:<dbname>.<collectionname>
time:18489
query: {"_id":{"str":"54b64c9ee4b009e7c6df0f40"}}

on:<dbname>.<collectionname>
time:131
query: {"field1":"515c785c9ccb3d8e563baf32","field2":"AAA","field1":"BBB"}

venerdì 18 settembre 2015

MongoDB - Script di MapReduce con uso di scope su map dinamico

Dovendo realizzare una MapReduce per il calcolo dei valori massimi e minimi in un determinato periodo (meteorologico) mi sono scontrato col il problema di passare ad una funzione di Map dei parametri dinamici provenienti da un ciclo.

Per risolvere questo problema bisogna utilizzare un parametro di scope quando si lancia l'esecuzione della MapReduce:


es:

var KEYS = {FIELD : 'test',PERIOD : 'Day'};

dbOne.rawdata.mapReduce(map,reduceMax,{out:{inline:1}, scope : {KEYS:KEYS}}).results;

e nella map posso usarlo:

var map = function(){


if(KEYS.PERIOD == 'Day')
...
emit(somefunction, this[KEYS.FIELD]);
...

};

esempio completo:



venerdì 27 febbraio 2015

Alert when any site is down!

Ottimo script collegato al proprio calendar che manda sms per verificare se i nostri siti sono down o meno:

 http://techawakening.org/?p=988 

Piccola modifica per evitare di ricevere troppi messaggi di spam.

Il piccolo script prevede di mandare/creare l'evento di down solo quando il sito è offline e salva in tutti i casi il log sul foglio sul drive.


function isMySiteDown() {
  var tot_site=5;
 
for (i=3;i<=tot_site;i++)  {
   
  // In cell E3 enter the URL of the site you want to monitor
 
  var url = SpreadsheetApp.getActiveSheet().getRange("F"+i).getValue();
        if(url.length)  {
         
  var response, error;

  try {  
    response = UrlFetchApp.fetch(url);
 
  } catch(error) {  
   insertData(error, -1, url, i, "Website down");
   continue;
  }
 
  var code = response.getResponseCode();
 
  if (code != 200) {
    insertData(response.getContent()[0], code,url, i,"Website DOWN");
  }else{
    insertData(response.getContent()[0], code,url, i,"Website UP");
  }
  }
}
}
 
function insertData(error, code, url, i, msg) {
 
   
  var sheet = SpreadsheetApp.getActiveSheet();
  var email = sheet.getRange("F8").getValue();
  var row   = sheet.getLastRow() + 1;
  var now = new Date().getTime();
 
  sheet.getRange(row,1).setValue(new Date());
  sheet.getRange(row,2).setValue(url);
  sheet.getRange(row,3).setValue(error);
  sheet.getRange(row,4).setValue(code);
 
 
  if(code!=200){
    CalendarApp.createEvent( url + ' is DOWN' , new Date(now+40000), new Date(now+40000)).addSmsReminder(0);
    MailApp.sendEmail(email, msg, error);
  }
 
 
}

mercoledì 4 febbraio 2015

MongoDB - Script di compact per tutto il server

Questo script esegue la compact su tutte le collection per tutti i db di tutto il server.

mongo --host <servername> compact.js

utile quando si prova a risparmia  spazio su disco anche se non è sempre detto che funzioni...