Impossible d'allouer une nouvelle page pour la base de données en raison d'un espace disque insuffisant

13

En utilisant l'assistant d'importation et d'exportation de SQL Server, j'obtiens cette erreur:

Erreur 0xc0202009: Tâche de flux de données 1: code d'erreur SSIS DTS_E_OLEDBERROR.
Une erreur OLE DB s'est produite. Code d'erreur: 0x80004005.
Impossible d'allouer une nouvelle page pour la base de données 'base de données' en raison de l'espace disque insuffisant dans le groupe de fichiers 'PRIMAIRE'. Créez l'espace nécessaire en supprimant des objets dans le groupe de fichiers, en ajoutant des fichiers supplémentaires au groupe de fichiers ou en activant la croissance automatique pour les fichiers existants dans le groupe de fichiers.

J'essaie de télécharger une série de fichiers de 2 Go et pendant le chargement du 4ème fichier, je continue à obtenir le message d'erreur ci-dessus même après avoir accédé à Propriétés de la base de données> Fichiers et changer la croissance automatique du groupe de fichiers à 2500 Mo et la taille maximale illimitée.

Quelle est la meilleure solution? Ces données prendront finalement environ 60 à 80 Go.

Aaron Bertrand
la source
1
Quelle version de SQL Server utilisez-vous? Combien d'espace libre est disponible sur le (s) lecteur (s) qui stockent les fichiers de données pour "base de données"?
nabrond
2
Le message d'erreur vous indique les "meilleures solutions": créez l'espace nécessaire en supprimant des objets dans le groupe de fichiers, en ajoutant des fichiers supplémentaires au groupe de fichiers ou en activant la croissance automatique pour les fichiers existants dans le groupe de fichiers. Je ne sais pas ce que nous pouvons vous dire de plus.
1
Brandon, SQL SERVER 2012. 760 Go d'espace libre sur le lecteur qui stocke les fichiers de données pour la base de données. Ken, la croissance automatique est activée, la croissance automatique augmente de 2500 Mo et la taille maximale est illimitée. Dois-je toujours rencontrer ce problème? Est-il possible que plusieurs croissances automatiques nécessitent d'être activées?
1
Avez-vous essayé de développer manuellement la base de données?
1
Se peut-il que la croissance automatique ne fonctionne qu'entre les éléments et que ONE insert dépasse la limite? Serait mon pari - si un insert de 20000 Go échoue sur une croissance automatique de 2500 Go ... il peut y avoir 900 Mo de libre et l'insert échoue.
TomTom

Réponses:

11

La base de données SQL Express atteindra 10g. Je crois que cela est similaire au message d'erreur que vous obtenez.

J'ai rencontré ce problème une fois chez un client et il m'a fallu un certain temps pour comprendre.

quelle version de sql utilisez-vous?

Greg
la source
1
cette solution m'a sauvé! J'étais sur la version Express et mis à niveau vers le Dev.
Israel Rodriguez
7

Êtes-vous sûr que c'est

Impossible d'allouer une nouvelle page pour la base de données 'base de données' en raison de l'espace disque insuffisant dans le groupe de fichiers 'PRIMAIRE'.

et pas

Impossible d'allouer une nouvelle page pour la base de données 'tempdb' en raison de l'espace disque insuffisant dans le groupe de fichiers 'PRIMARY'.

?

Si c'est effectivement [tempdb]dans le message d'erreur, c'est quelque chose qui doit être géré séparément en s'assurant qu'il se [tempdb]trouve sur un disque de taille appropriée séparé des autres bases de données.

Si ce n'est pas [tempdb]dans le message d'erreur, j'imagine qu'un "téléchargement" de ce type frapperait [tempdb]assez fort. Est [tempdb]sur le même disque / LUN que 'database'? Si c'est le cas, vous exacerbez probablement votre problème avec plusieurs tentatives de croissance de fichiers (sur plusieurs bases de données). Donc, pendant que vous effectuez ce "téléchargement", assurez-vous de surveiller [tempdb]également.

Si se [tempdb]trouve sur un lecteur séparé et que vous êtes certain que vous disposez de suffisamment d'espace, j'irais de l'avant et dimensionnerais votre fichier de données à ce que vous attendez d'être sa taille finale:

USE master;
GO
ALTER DATABASE [database]
MODIFY FILE
    (
    NAME = datafile,
    SIZE = 60GB,
    FILEGROWTH = 5GB
);
GO

Assurez-vous également que le fichier journal de la base de données est distinct du fichier de données. Si ce n'est pas le cas, vous êtes de retour avec des événements de croissance concurrents. S'ils sont sur des disques séparés, je les examinerais également et les dimensionnerais de manière appropriée.

USE master;
GO
ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 8000MB
);
GO

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 16000MB
);
GO

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 24000MB
);
GO
...

jusqu'à ce que vous atteigniez la taille de fichier journal souhaitée. Appelons-le 80 Go, où vous définirez votre croissance à une taille spécifique. J'utilise les valeurs recommandées par Paul Randal et Kimberly Tripp

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 80000MB,
    FILEGROWTH = 8000MB
);
swasheck
la source
6

Essayez de l'agrandir manuellement:

Dans l'Explorateur d'objets, connectez-vous à une instance du moteur de base de données SQL Server, puis développez cette instance.

2. Développez Bases de données, cliquez avec le bouton droit sur la base de données pour augmenter, puis cliquez sur Propriétés.

3.Dans les propriétés de la base de données, sélectionnez la page Fichiers.

4.Pour augmenter la taille d'un fichier existant, augmentez la valeur dans la colonne Taille initiale (Mo) du fichier. Vous devez augmenter la taille de la base de données d'au moins 1 mégaoctet.

5.Pour augmenter la taille de la base de données en ajoutant un nouveau fichier, cliquez sur Ajouter, puis entrez les valeurs du nouveau fichier. Pour plus d'informations, voir Ajouter des données ou des fichiers journaux à une base de données.

6.Cliquez sur OK.

De: MSDN

Hart CO
la source
4
L'expansion manuelle est bonne car elle peut vous donner plus de détails. Dans mon cas, j'ai obtenu: "CREATE DATABASE ou ALTER DATABASE a échoué car la taille de base de données cumulée résultante dépasserait votre limite de licence de 10240 Mo par base de données." Qui est auto-explicatif.
user824276
1

Vous pouvez également utiliser les scripts suivants pour libérer de l'espace de la base de données:

DELETE FROM STActionLog
where id in (SELECT TOP 100000 id
             FROM STActionLog
             ORDER BY actionDate ASC)

delete from STActionLog
where actionDate < '2019-08-01'

Ceux-ci m'aident avec l'erreur :) Assurez-vous également que nous avons suffisamment d'espace disque sur l'ordinateur.

Razvan
la source