Archive

Posts Tagged ‘sql server’

SQL Serveur : Lister les tables d’une base de données

October 26th, 2010 No comments

SQL server | Blog.bullrox.net
La commande ci-dessous permet de lister les tables d’une base de données sous SQL Serveur :

select
name as TableName
from
[DATABASE_NAME].sys.objects
where
type = ‘U’
order by
name

To be continued …

Categories: Microsoft, SQL, Tips Tags: , ,

Sql Seveur : problème de collation sur des tables temporaires

October 7th, 2010 No comments

Sql serveur  | Blog.bullrox.netAvez vous déjà peut-être rencontré ce genre d’erreur :

Msg 468, Level 16, State 9, Line 2
Cannot resolve the collation conflict between “Latin1_General …” and “Latin1_General …”

La solution est simple mais peu commune :

SELECT cast(null as varchar(40)) as Colonne1
INTO #tabletemp
INSERT INTO #tabletemp
SELECT colonne FROM table

To be continued …

Categories: Microsoft, SQL, Tips Tags: , ,

SQL Server : access to a mapped network drive to backup-restore

September 22nd, 2010 No comments

C’est en manquant d’espace sur un serveur SQL que la question s’est posée : il et surement possible de faire un restore / backup de base depuis un lecteur réseau ?

En effet, pour ce faire j’ai trouvé la solution suivante :

EXEC sp_xp_cmdshell_proxy_account ‘DOMAIN\USER’,'MDP’
GO
EXEC xp_cmdshell ‘net use s: \\IP\DOSSIER MDP /user:DOMAIN\USER /persistent:yes’

Cette solution permet dans un premier temps de déclarer un user qui pourra par la suite être utilisé lors de l’ajout du lecteur réseau, puis de créer le lecteur réseau.

Ce qui permet ensuite de faire des backup / restore de la base via un lecteur réseau ! Houray :)

To be continued …

Categories: Microsoft, SQL, Tips Tags: , , ,

SQL Server : Shrink Log File

December 3rd, 2008 No comments

Vous rencontrez un problème d’espace disque sur votre serveur ?

J’ai peut être pour vous la solution, PURGEZ VOS LOGS !

le principe est simple :

1. videz votre fichier de log par la simple commande suivante :

BACKUP LOG <database name> WITH TRUNCATE_ONLY

2. Réduisez la taille de votre fichier de log avec la commande suivante :

DBCC SHRINKFILE(<database log name>, 1)

Voilà et le tour est joué, et un poil de plus à votre barbe de DBA ;)

To be continued …

Categories: Geek, SQL, Tips Tags: , , , ,

La phonétique en php/mysql/oracle et sûrement bien plus encore !

October 31st, 2008 No comments

Pour tous les amprentis Geek et Nerd en herbe souhaitant faire leur petit module de correction orthographique comme  Google : [Lien], j’ai découvert la solution : soundex !

Cette fonction existe en php sous mysql et oracle

La clé soundex possède la propriété qui fait que deux mots prononcés similairement auront la même clé soundex. Cette fonction est donc utilisée pour simplifier les recherches dans les bases de données, où vous connaissez la prononciation d’un mot ou nom, mais pas son orthographe exacte. Cette fonction retourne une chaîne de 4 caractères, commençant par une lettre.

Un petit exemple en PHP :

<?php
soundex
("Euler")       == soundex("Ellery"); // E460
soundex("Gauss")       == soundex("Ghosh"); // G200
soundex("Hilbert")     == soundex("Heilbronn"); // H416
soundex("Knuth")       == soundex("Kant"); // K530
soundex("Lloyd")       == soundex("Ladd"); // L300
soundex("Lukasiewicz") == soundex("Lissajous"); // L222
?>

Adomd .net, le provider qui se sent bien qu’en localhost

July 22nd, 2008 No comments

vous étiez tranquillement devant votre Visual studio en train de développer une application qui allait requêter des cubes OLAP sur un serveur distant et là surprise ! vous ne pouvez pas vous connecter à Analysis Services (encore un grand merci à Billou* et ses acolytes).

Et oui comme vous avez pu le remarquer le seul mode d’authentification à Analysis Services est l’autentification windows.

Enfin bon heureusement il existe deux solutions :)

  • la première qui est des plus sale, est d’accepter les connexions anonymes dans Analysis Services.
  • La deuxième (un peu moins sale, mais pas complètement), est d’utiliser l’impersonation

je vais donc décrire la deuxième solution puisque la première est trop sale et pas compliquée (même corky pourrait y arriver !)

L’impersonation qu’est-ce donc c’est un procédé d’usurpation d’identité (et oui microsoft propose ce genre de chose !), il permet de se faire passer pour un autre utilisateur le temps d’exécution d’un bout decode ou tout le code complet.

Dans le cas où l’on souhaite utiliser l’impersonation pour toute l’application Asp .net, il faut placer ce bout de code dans le fichier web.config

<identity impersonate="true" userName="nomducompte" password="motdepasse" />

Dans le cas où l’on veut utiliser cette impersonation juste lors de l’exécution d’un bout de code (connexion à un cube OLAP par exemple), il faut implémenter ce bout de code :

code c# .net :

<%@ Page Language="C#"%>
<%@ Import Namespace = "System.Web" %>
<%@ Import Namespace = "System.Web.Security" %>
<%@ Import Namespace = "System.Security.Principal" %>
<%@ Import Namespace = "System.Runtime.InteropServices" %>

<script runat=server>
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;

WindowsImpersonationContext impersonationContext; 

[DllImport("advapi32.dll", CharSet=CharSet.Auto)]
public static extern int LogonUser(String lpszUserName,
                                  String lpszDomain,
                                  String lpszPassword,
                                  int dwLogonType,
                                  int dwLogonProvider,
                                  ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
public extern static int DuplicateToken(IntPtr hToken,
                                  int impersonationLevel,
                                  ref IntPtr hNewToken);

public void Page_Load(Object s, EventArgs e)
{
   if(impersonateValidUser("nomutilisateur", "domaine", "motdepasse"))
   {
      // Insérez ici le code qui s'exécute dans le contexte de sécurité de l'utilisateur particulier.
      undoImpersonation();
   }
   else
   {
      // L'emprunt d'identité a échoué. Par conséquent, insérez ici un mécanisme de prévention de défaillance.
   }
}

private bool impersonateValidUser(String userName, String domain, String password)
{
   WindowsIdentity tempWindowsIdentity;
   IntPtr token = IntPtr.Zero;
   IntPtr tokenDuplicate = IntPtr.Zero;

   if(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
   LOGON32_PROVIDER_DEFAULT, ref token) != 0)
   {
      if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
      {
         tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
         impersonationContext = tempWindowsIdentity.Impersonate();
         if (impersonationContext != null)
            return true;
         else
            return false;
      }
      else
         return false;
   }
   else
      return false;
}
private void undoImpersonation()
{
   impersonationContext.Undo();
}
</script>

voila pour le tips du jour !

(* paix à son âme, il est parti en retraite).