IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Déploiement de modifications via script : mémoire insuffisante pour exécuter le script.


Sujet :

Administration SQL Server

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut Déploiement de modifications via script : mémoire insuffisante pour exécuter le script.
    Bonjour,

    Ce matin je teste le déploiement de modification faite sur une DB sur le serveur de dev vers le serveur de prod.

    Pour cela, je fais :
    1. clic droit sur la DB en question
    2. déroulement du menu Tasks
    3. choix de l'option Generate scripts


    Une fois dans l'assistant, je choisis tous les objets que je désire scripter (il y en a un paquet) et dans les options, j'indique je souhaite scripter les données également pour les tables qui en contiennent.

    Le script se fait sans souci et le sauve dans un fichier texte.

    Je restaure ensuite la DB de prod sur le serveur de dev sous un nom bidon histoire de tester le script d'abord. La restauration s'effectue sans aucun souci.

    Je charge donc le script dans SSMS et presse la touche F5 pour l'exécuter et là c'est le drame...
    Cannot execute script.
    Additional information :
    Insufficient memory to continue the execution of the program. (mscorlib)
    J'ai d'abord cru que c'était dû au fait que je faisais cela depuis mon laptop (qui n'a que 6 GB de ram) mais même depuis le serveur (avec ses 16 GB de ram), le problème est le même.

    Durant la rédaction de ce message, j'ai réalisé que je pouvais demander de ne pas scripter les données pour ensuite relancer le process d'importation des données de bases qui alimentera les tables.


    • Sont-ce les données qui causent ce manque de mémoire ??
    • Quelle est la bonne manière de faire ce genre de déploiement ??


    Merci d'avance à tous.
    Kropernic

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    Juste pour dire que le problème venait bien du fait d'avoir choisi de scripter les données également.

    Je laisse cependant la discussion ouverte afin d'avoir des retours sur les bonnes pratiques à adopter.
    Kropernic

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    C'est normal. Pour être transactionnellement cohérent, une fois les objets de la base créé, tout utilisateur peut commencer à travailler dedans. Pour éviter au cours des INSERT qu'un utilisateur supprime un client qui pourrait être utilisé par une facture, SQL Server créé un script avec une gigantesque transaction qui concerne toutes les données de toutes les tables. Par conséquent, toutes les données doivent pouvoir tenir en RAM. Comme je soupçonne que vous avez une RAM plus petite que le volume des données (hors index), alors.... c'est le drame !

    Evidemment, ce n'est pas une méthode conseillée.

    Faites plutôt la chose suivante :
    création des objets de la base en mode mono utilisateur
    puis insertion des données via des fichiers BULK en format natif
    1) ça ira plus vite
    2) vous pourrez régler la taille du batch

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/09/2009, 13h18
  2. mémoire insuffisante pour charger une image
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/11/2007, 18h22
  3. Réponses: 0
    Dernier message: 24/07/2007, 11h38
  4. Réponses: 1
    Dernier message: 29/06/2007, 11h21
  5. Réponses: 5
    Dernier message: 12/02/2007, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo