Impossibile allocare una nuova pagina per il database a causa di spazio su disco insufficiente


13

Utilizzando l'importazione / esportazione guidata di SQL Server, ottengo questo errore:

Errore 0xc0202009: flusso di dati Attività 1: codice di errore SSIS DTS_E_OLEDBERROR.
Si è verificato un errore OLE DB. Codice errore: 0x80004005.
Impossibile allocare una nuova pagina per il "database" del database a causa di spazio su disco insufficiente nel filegroup "PRIMARY". Creare lo spazio necessario rilasciando oggetti nel filegroup, aggiungendo altri file al filegroup o impostando la crescita automatica per i file esistenti nel filegroup.

Sto cercando di caricare una serie di file da 2 GB e durante il caricamento del 4 ° file, continuo a visualizzare il messaggio di errore sopra riportato anche dopo essere passato a Proprietà database> File e ho modificato la crescita automatica del Filegroup su 2500 MB e il limite massimo è illimitato.

Qual è la soluzione alternativa migliore? Questi dati alla fine occuperanno circa 60-80 GB.


1
Quale versione di SQL Server stai utilizzando? Quanto spazio libero è disponibile sulle unità che memorizzano i file di dati per "database"?
nabrond

2
Il messaggio di errore indica le "soluzioni alternative migliori": creare lo spazio necessario rilasciando oggetti nel filegroup, aggiungendo altri file al filegroup o impostando la crescita automatica per i file esistenti nel filegroup. Non sono sicuro di cosa possiamo dirti di più.

1
Brandon, SQL SERVER 2012. 760 GB di spazio libero sull'unità che memorizza i file di dati per il database. Ken, ho l'autogrowth abilitato, l'autogrowth cresce di 2500 MB e le dimensioni massime sono illimitate. Devo ancora imbattermi in questo problema? È possibile che ci siano più autogrowth che devono essere abilitate?

1
Hai provato a far crescere manualmente il DB?

1
Può essere che la crescita automatica funzioni solo tra elementi e che UN inserto superi il limite? Sarebbe la mia scommessa - se un inserto da 20000 GB non riesce su un aumento automatico da 2500 GB .... può essere che ci sono 900 MB gratuiti e l'inserto non riesce.
TomTom

Risposte:


11

Il database express SQL completerà a 10g. Credo che questo sia simile al messaggio di errore che ricevi.

Mi sono imbattuto in questo problema una volta da un cliente e mi ci è voluto un po 'di tempo per capire.

quale versione di sql stai eseguendo?


1
questa soluzione mi ha salvato! Ero sulla versione Express e aggiornato al Dev.
Israel Rodriguez,

7

Sei sicuro che lo sia

Impossibile allocare una nuova pagina per il "database" del database a causa di spazio su disco insufficiente nel filegroup "PRIMARY".

e non

Impossibile allocare una nuova pagina per il database "tempdb" a causa di spazio su disco insufficiente nel filegroup "PRIMARY".

?

Se è effettivamente [tempdb]nel messaggio di errore, è qualcosa che deve essere gestito separatamente assicurandosi che [tempdb]si trovi su un disco di dimensioni appropriate separato da altri database.

Se non fosse [tempdb]nel messaggio di errore, immagino che un "upload" di questo tipo colpirebbe [tempdb]piuttosto duramente. Sullo [tempdb]stesso disco / LUN di 'database'? In tal caso, probabilmente stai esacerbando il tuo problema con più tentativi di crescita dei file (su più database). Quindi mentre fai questo "upload" assicurati di monitorare [tempdb]anche.

Se si [tempdb]trova su un'unità separata e sei sicuro di avere abbastanza spazio, andrei avanti e ridimensionerei il tuo file di dati a quello che ti aspetti sia la dimensione dello stato finale:

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

Inoltre, assicurarsi che il file di registro del database sia separato dal file di dati. Se non lo è, allora sei tornato con eventi di crescita concorrenti. Se si trovano su dischi separati, allora analizzerei e ridimensionerei in modo appropriato.

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
...

fino a raggiungere la dimensione del file di registro desiderata. Chiamiamolo 80 GB dove imposterai la tua crescita su una dimensione specifica. Sto usando i valori raccomandati da Paul Randal e Kimberly Tripp

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

6

Prova a coltivarlo manualmente:

1.In Esplora oggetti, connettersi a un'istanza del Motore di database di SQL Server, quindi espandere tale istanza.

2.Espandi database, fare clic con il pulsante destro del mouse sul database per aumentare, quindi fare clic su Proprietà.

3.In Proprietà database, selezionare la pagina File.

4.Per aumentare le dimensioni di un file esistente, aumentare il valore nella colonna Dimensioni iniziali (MB) per il file. È necessario aumentare le dimensioni del database di almeno 1 megabyte.

5.Per aumentare le dimensioni del database aggiungendo un nuovo file, fare clic su Aggiungi e quindi immettere i valori per il nuovo file. Per ulteriori informazioni, vedere Aggiungere dati o file di registro a un database.

6.Fare clic su OK.

Da: MSDN


4
L'espansione manuale è buona perché potrebbe fornirti maggiori dettagli. Nel mio caso ho ottenuto: "CREATE DATABASE o ALTER DATABASE non sono riusciti perché la dimensione cumulativa del database risultante supererebbe il limite di licenza di 10240 MB per database". Che è autoesplicativo.
user824276,

1

È inoltre possibile utilizzare i seguenti script per liberare spazio dal database:

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

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

Questi mi aiutano con l'errore :) Assicurati anche che ci sia spazio su disco sufficiente sul computer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.