SQL Server: le chargement d'un fichier de base de données
Je suis à l'aide de SQL Server 2008. Je devrais être capable de "se connecter" spécifié par l'utilisateur de la base de données du fichier (mdf) (à l'aide de la AttachDbFilename section de la chaîne de connexion) et d'enregistrer une copie du fichier sélectionné. Je dois aussi travailler avec le contenu de la base de données.
Si j'ai bien compris, un seul fichier mdf représente une base de données complète avec des tables, procédures stockées, etc. Mais alors, si j'ai deux fichiers avec le même nom dans des dossiers différents (l'un dans le dossier de DONNÉES de SQL Server et les autres dans la racine de C:), et j'essaie de charger le fichier dans C: je reçois un message d'erreur indiquant qu'une base de données existe déjà avec ce nom.
J'ai renommé le fichier sous C:, mais maintenant j'ai une erreur:
"CRÉER le FICHIER rencontrés erreur du système d'exploitation 5(échec de la récupération de
le texte de cette erreur. Raison: 15105) en essayant d'ouvrir ou de créer
fichier physique "C:/myDatabaseFile_log.ldf'. N'a pas pu ouvrir de nouvelles
la base de données "C:/MYDATABASEFILE.MDF'. CRÉER une BASE de données est interrompue. Un
tentative de fixer une base de données nommée automatique de fichier "C:/myDatabaseFile.mdf'
a échoué. Une base de données avec le même nom existe ou fichier spécifié ne peut pas
être ouvert, ou il est situé sur un partage UNC."
Note: je suis en train d'OUVRIR la base de données et ne cherche pas à le créer.
Donc, ce que je fais mal? Fait que j'ai mal compris quelque chose? Comment ces fichier de base de données de travail (je veux dire, comment les utiliser)?
OriginalL'auteur ShdNx | 2009-08-07
Vous devez vous connecter pour publier un commentaire.
Vous semblent être sous l'impression que les bases de données sont comme des documents Word ou des fichiers de texte, ouvrir et fermer à volonté au sein d'une instance de l'application. Ce n'est pas la façon dont il fonctionne.
Au lieu de cela, il y a exactement une instance de serveur de base de données du programme (vous pouvez en installer plusieurs instances, mais ce n'est pas comme l'exécution de deux copies d'un programme normal). Vous pouvez penser qu'il est plus que si vos bases de données doivent être enregistré à l'intérieur de cette instance du serveur, et vous ne pouvez enregistrer qu'une seule base de données avec un nom pour le serveur. Ce qui se passe du point de vue du serveur lorsque vous attachez un fichier MDF est qu'une nouvelle base de données est créée (la commande CREATE DATABASE est exécutée) et dit d'utiliser ce fichier MDF pour le schéma et les données.
Je vous suggère d'obtenir Sql Server Management Studio et connectez-vous au serveur en cours d'exécution sur votre système local. Vous trouverez probablement il y a déjà une base de données avec le nom que vous voulez.
OriginalL'auteur Joel Coehoorn
Ce qui a fonctionné à partir de nous, a - utilisateur qui exécute SQL 2008 Service n'est pas autorisé sur le dossier spécifié.
L' .mdf de données et .ldf les fichiers journaux doivent être entièrement contrôlable par l'instance de SQL Server compte. Donner cette autorisation à l' <Machine>\Users group et la prochaine fois que la base de données est accessible, les autorisations appropriées seront appliquées.
OriginalL'auteur Vivek
Votre problème est composé de deux questions:
Nous allons traiter de la première. Le processus de 'l'aide' d'un fichier de base de données est en fait fixation une base de données pour votre instance de serveur. Cette opération (base de données pièce jointe) est transparent pour votre application et n'est possible qu'avec Sql Server Express Edition pour autant que je sais. Lorsque vous attachez un fichier de base de données vous avez besoin d'un fichier de log qui est créé "à la volée" dans le cas où il n'existe pas - dès que chaque base de données SQL Server doit disposer d'un fichier journal. Je ne peux pas dire pourquoi votre Serveur SQL est impossible de créer un fichier journal pour vous - météo c'est un manque d'espace, manque d'autorisations ou de quoi que ce soit. Mais au moins, vous avez une idée de pourquoi ce fichier est créé. Fixation de la base de données est mise en œuvre comme un cas particulier de la création de base de données - c'est pourquoi une CRÉER une BASE de données instruction est exécutée.
Nous arrivons maintenant à la deuxième question. La base de données nom de fichier est généralement dérivé de nom de base de données. Ainsi, dans le cas où vous ne le modifiez pas les noms de fichier lors de la création de la base intentionnellement avoir deux de même nommé fichiers de base de données signifie que vous recevrez une base de données avec le même nom. Dans le cas où l'un des fichiers dans le répertoire de Données de SQL Server, il est plus probable que vous l'avez utilisée par le serveur. Lorsque vous essayez de l '"utilisation" d'un fichier de base de données (via AttachDbFilename), cela entraîne une tentative de créer une base de données avec des doublons de nom. Cette tentative échouera toujours.
Espère que cette aide.
OriginalL'auteur AlexS
Il est vrai que le MDF fichier contient la base de données mais les choses sont plus complexes. (Un seul db peut effectivement s'étendre sur plusieurs fichiers mdf)
Vous ne pouvez pas traiter ou de penser de Sql Server comme base de fichier db comme MS Access ou certains autres bases de données de bureau. Vous devez penser en termes de serveur. Les contrôles serveur un certain nombre de bases de données de nom et chaque base de données est sauvegardée par au moins un fichier de données (.mdf) et un fichier journal (.ldf). Vous faites référence à des données par le biais du serveur en premier, puis un enregistrement de la base de données par le serveur et les fichiers eux-mêmes devrait être votre dernière préoccupation.
je pense que vous êtes probablement en train de recréer une base de données sur le serveur avec un nom qui est déjà en cours d'utilisation. Oui, l' .les fichiers mdf peuvent avoir le même nom à des endroits différents, mais que le nom réel de la base de données autant que le serveur considère qu'il doit être unique au sein du serveur.
Si vous êtes familier avec les serveurs web, voici une analogie: vous attendez-vous à être en mesure de copier des fichiers html pour différents dossiers, et puis il suffit de naviguer jusqu'à ces différents dossiers avec votre navigateur? Bien sûr que non. Vous devez d'abord créer un nouveau dossier virtuel que le serveur web reconnaît, et peut-être modifier certains autres paramètres, et alors vous seriez en mesure de parcourir ta "copie". La base de données dans Sql Server est un peu comme votre dossier virtuel sur un serveur web, et que les données peuvent être "copié" et puis "vu" que les différentes banques de données.
OriginalL'auteur Paul Sasik