Bagaimana Anda mengimpor file .sql MS SQL yang besar?


240

Saya menggunakan membandingkan data RedGate SQL dan menghasilkan file .sql, sehingga saya bisa menjalankannya di mesin lokal saya. Tetapi masalahnya adalah bahwa file tersebut lebih dari 300mb, yang berarti saya tidak dapat melakukan copy dan paste karena clipboard tidak akan dapat menanganinya, dan ketika saya mencoba untuk membuka file di SQL Server Management Studio saya mendapatkan kesalahan tentang file yang terlalu besar.

Apakah ada cara untuk menjalankan file .sql besar? File pada dasarnya berisi data untuk dua tabel baru.

Jawaban:


442

Dari command prompt, mulai sqlcmd:

sqlcmd -S <server> -i C:\<your file here>.sql 

Ganti saja <server>dengan lokasi kotak SQL Anda dan <your file here>dengan nama skrip Anda. Jangan lupa, jika Anda menggunakan contoh SQL sintaksnya adalah:

sqlcmd -S <server>\instance.

Berikut adalah daftar semua argumen yang dapat Anda berikan sqlcmd:

Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout] 
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit] 
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f  | i:[,o:]] [-Z new password and exit] 
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary] 

1
Saya punya beberapa insert seperti: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text'). Saya memiliki kesalahan dengan kutipan. JADI Apa yang harus saya gunakan (parameter mana) untuk menangani kesalahan ini? Terima kasih
Oleksandr Fentsyk

1
Bisakah kita menyimpan skrip di drive eksternal? Suka E: drive? bukannya drive C?
Ani

10
Hanya mengonfirmasi bahwa saya baru saja menjalankan file 1GB sql menggunakan perintah ini
Loupax

11
Ini bekerja untuk saya, tetapi saya harus menyingkirkan -o pada akhirnya
bunggo

2
gagal menjalankan file 75G sql.
Aladdin

62

Saya memiliki masalah yang persis sama dan telah berjuang untuk sementara waktu akhirnya menemukan solusi untuk mengatur -aparameter ke sqlcmddalam untuk mengubah ukuran paket default:

sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767

4
+1 untuk menambahkan opsi -d dalam contoh. Saya menggunakan "USE [DBNAME]" di file sql saya. Ini berhasil juga. Tidak yakin mana metode yang lebih baik atau lebih disukai
Shaakir

3
Terima kasih. Saya menggunakan perintah berikut sebagai nama pengguna dan kata sandi yang diperlukan untuk terhubung ke database. sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>
Hriju

1
Masalah apa yang Anda selesaikan dengan mengatur ukuran paket? Microsoft mengatakan: "Ukuran paket yang lebih besar dapat meningkatkan kinerja ..." ( docs.microsoft.com/en-us/sql/tools/sqlcmd-utility )
Luar biasa

20

Anda dapat menggunakan alat ini juga. Ini sangat berguna.

BigSqlRunner


Saya pikir itu berguna juga, sampai saya menjalankannya dengan 400 MB file SQL (penuh dengan pernyataan INSERT). Setelah berjalan selama 9 jam, tidak ada yang ditambahkan ke database, tetapi BigSqlRunner menghabiskan antara 3 GB dan 6 GB memori.
Martijn

Sangat berguna. Biasanya saya secara manual membagi file (berbagai alat) menjadi potongan-potongan, kemudian secara manual mengeditnya sehingga pernyataan sql "utuh", kemudian jalankan melalui skrip batch. Ini membuatnya SANGAT mudah. File 2.3gb .sql, mudah.
Barry

14
  1. Ambil prompt perintah dengan hak istimewa administrator

  2. Ubah direktori ke tempat file .sql disimpan

  3. Jalankan perintah berikut

    sqlcmd -S 'your server name' -U 'user name of server' -P 'password of server' -d 'db name'-i script.sql


7

Saya menggunakan MSSQL Express 2014 dan tidak ada solusi yang bekerja untuk saya. Mereka semua hanya menabrak SQL. Karena saya hanya perlu menjalankan satu skrip dengan banyak pernyataan penyisipan sederhana, saya menyiasatinya dengan menulis aplikasi konsol kecil sebagai pilihan terakhir:

class Program
{
    static void Main(string[] args)
    {
        RunScript();
    }

    private static void RunScript()
    {
        My_DataEntities db = new My_DataEntities();

        string line;

        System.IO.StreamReader file =
           new System.IO.StreamReader("c:\\ukpostcodesmssql.sql");
        while ((line = file.ReadLine()) != null)
        {
            db.Database.ExecuteSqlCommand(line);
        }

        file.Close();
    }
}


2

Saya punya masalah serupa. File saya dengan skrip sql berukuran lebih dari 150MB (dengan hampir 900k INSERT yang sangat sederhana ). Saya menggunakan solusi yang disarankan oleh Takuro (sebagai jawaban dalam pertanyaan ini) tetapi saya masih mendapatkan pesan kesalahan dengan mengatakan bahwa tidak ada cukup memori ("Tidak ada memori sistem yang cukup di kumpulan sumber daya 'internal' untuk menjalankan kueri ini").

Apa yang membantu saya adalah bahwa saya menempatkan perintah GO setelah setiap 50k INSERT .

(Ini tidak secara langsung menangani pertanyaan (ukuran file) tapi saya percaya itu menyelesaikan masalah yang secara tidak langsung terhubung dengan ukuran besar skrip sql itu sendiri. Dalam kasus saya banyak memasukkan perintah)


1

Pertanyaan Anda sangat mirip dengan yang ini

Anda dapat menyimpan file / skrip Anda sebagai .txt atau .sql dan menjalankannya dari Sql Server Management Studio (saya pikir menunya adalah Open / Query, lalu jalankan kueri di antarmuka SSMS). Anda mungkin harus memperbarui baris pertama, menunjukkan database yang akan dibuat atau dipilih pada mesin lokal Anda.

Jika Anda harus melakukan transfer data ini sangat sering, Anda bisa melakukan replikasi. Bergantung pada kebutuhan Anda, replikasi foto bisa ok. Jika Anda harus menyinkronkan data antara dua server Anda, Anda bisa menggunakan model yang lebih kompleks seperti menggabungkan replikasi.

EDIT: Saya tidak melihat bahwa Anda memiliki masalah dengan SSMS yang ditautkan dengan ukuran file. Kemudian Anda dapat menggunakan command-line, seperti yang diusulkan oleh orang lain, replikasi snapshot (terbitkan di server utama Anda, berlangganan lokal Anda, replikasi, lalu berhenti berlangganan) atau bahkan backup / restore


3
Jack menyebutkan bahwa dia tidak dapat melakukannya dari SSMS karena file terlalu besar.
Ray Booysen

1

File pada dasarnya berisi data untuk dua tabel baru.

Maka Anda mungkin merasa lebih mudah dengan hanya DTS (atau SSIS, jika ini SQL Server 2005+) data selesai, jika dua server berada di jaringan yang sama.

Jika kedua server tidak berada di jaringan yang sama, Anda dapat membuat cadangan database sumber dan mengembalikannya ke database baru di server tujuan. Kemudian Anda bisa menggunakan DTS / SSIS, atau bahkan yang sederhana INSERT INTO SELECT, untuk mentransfer dua tabel ke database tujuan.


Jika satu atau dua tabel menghasilkan file sebesar itu, aman untuk menganggap bahwa DB adalah beberapa Gigs, yang membuat cadangan dan memulihkan tidak layak dalam banyak kasus.
Kapten Kenpachi

1

Semoga ini bisa membantu Anda!

sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql

1
-U <username> -P <password> Perintah opsi harus huruf besar bukan huruf kecil
eric xu

0

Saya telah mengalami masalah yang sama dan menginvestasikan sepanjang hari untuk menemukan jalan keluar tetapi ini diselesaikan dengan membuat salinan file .sql dan mengubah ekstensi ke file .txt dan membuka file .txt ke browser chrome. Saya telah melihat keajaiban dan file dibuka di browser.

Terima kasih dan Salam,

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.