আপনি কীভাবে একটি বড় এমএস এসকিউএল। এসকিউএল ফাইল আমদানি করবেন?


240

আমি রেডগেট এসকিউএল ডেটা তুলনা করি এবং একটি। এসকিউএল ফাইল উত্পন্ন করি, তাই আমি এটিকে আমার স্থানীয় মেশিনে চালাতে পারি। তবে সমস্যাটি হ'ল ফাইলটি 300 এমবি এরও বেশি, যার অর্থ আমি অনুলিপি এবং পেস্ট করতে পারি না কারণ ক্লিপবোর্ড এটি পরিচালনা করতে সক্ষম হবে না এবং যখন এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে ফাইলটি খোলার চেষ্টা করি তখন আমি একটি ত্রুটি পাই ফাইলটি খুব বড় হওয়া সম্পর্কে।

একটি বড় .sql ফাইল চালানোর জন্য কি কোনও উপায় আছে? ফাইলটিতে মূলত দুটি নতুন টেবিলের জন্য ডেটা রয়েছে।

উত্তর:


442

কমান্ড প্রম্পট থেকে শুরু করুন sqlcmd:

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

কেবলমাত্র <server>আপনার এসকিউএল বাক্সের অবস্থান এবং <your file here>আপনার স্ক্রিপ্টের নামের সাথে প্রতিস্থাপন করুন । ভুলে যাবেন না, আপনি যদি এসকিউএল উদাহরণ ব্যবহার করেন তবে বাক্য গঠনটি হ'ল:

sqlcmd -S <server>\instance.

আপনি 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
আমি মত কিছু সন্নিবেশ আছে: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text')। উদ্ধৃতিগুলির সাথে আমার ত্রুটি আছে। সুতরাং এই ত্রুটিটি পরিচালনা করতে আমার কী ব্যবহার করতে হবে (কোনটি পরামিতি)? ধন্যবাদ
ওলেকসান্ডার ফেন্টসেক

1
আমরা কি স্ক্রিপ্টটি বহিরাগত ড্রাইভে রাখতে পারি? E এর মতো: ড্রাইভ? সি ড্রাইভের পরিবর্তে?
অনি

10
কেবল নিশ্চিত করেই যে আমি এই কমান্ডটি ব্যবহার করে কেবল একটি 1 জিবি
স্কুয়েল

11
এটি আমার পক্ষে কাজ করেছিল, তবে শেষের দিকে আমাকে
ছাড়তে হয়েছিল

2
এটি 75 জি স্কয়ার ফাইল চালাতে ব্যর্থ হয়েছে।
আলাদিন

62

আমার ঠিক একই সমস্যা ছিল এবং কিছুক্ষণ লড়াই করে যাচ্ছিলাম তারপরে অবশেষে এর ডিফল্ট প্যাকেটের আকার পরিবর্তন করার জন্য -aপ্যারামিটার সেট করার সমাধানটি পেয়েছি sqlcmd:

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

4
উদাহরণে -d বিকল্প যুক্ত করার জন্য +1। আমি আমার স্কাইল ফাইলটিতে "USE [DBNAME]" ব্যবহার করেছি। এটি পাশাপাশি কাজ করেছে। কোনটি আরও ভাল বা পছন্দের পদ্ধতি তা নিশ্চিত নয়
শকির

3
ধন্যবাদ। আমি ডাটাবেসের সাথে সংযোগের জন্য প্রয়োজনীয় ব্যবহারকারীর নাম এবং পাসওয়ার্ড হিসাবে নিম্নলিখিত কমান্ডটি ব্যবহার করেছি। sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>
হ্রিজু

1
প্যাকেটের আকার নির্ধারণ করে আপনি কোন সমস্যার সমাধান করেছেন? মাইক্রোসফ্ট বলেছে: "একটি বৃহত্তর প্যাকেটের আকার কর্মক্ষমতা বাড়িয়ে তুলতে পারে ..." ( ডকস.মাইক্রোসফটকম / en-us / sql / tools / sqlcmd-utility )
অবিশ্বাস্য জানুয়ারী

20

আপনি এই সরঞ্জামটিও ব্যবহার করতে পারেন। এটি সত্যিই দরকারী।

BigSqlRunner


আমি ভেবেছিলাম এটিও কার্যকর ছিল, যতক্ষণ না আমি এটিকে 400 এমবি এসকিউএল ফাইল (INSERT বিবৃতিতে পূর্ণ) দিয়ে চালিত করি। 9 ঘন্টা চালানোর পরে, ডাটাবেসে কোনও কিছুই যুক্ত করা হয়নি, তবে বিগস্কুলআরনার 3 গিগাবাইট এবং 6 জিবি মেমরির মধ্যে গ্রাস করছিল।
মার্টিজন

খুব দরকারী. সাধারণত আমি ফাইলটি (বিভিন্ন সরঞ্জাম) ম্যানুয়ালি খণ্ডগুলিতে বিভক্ত করি, তারপরে ম্যানুয়ালি এডিট করি যাতে স্কেল স্টেটমেন্টগুলি "সম্পূর্ণ" হয়, তারপরে একটি ব্যাচের স্ক্রিপ্টের মাধ্যমে কার্যকর করা হয়। এটি এটি এত সহজ করে তোলে। ২.৩ জিবি। এসকিউএল ফাইল, সহজ।
ব্যারি

14
  1. প্রশাসকের সুবিধার্থে কমান্ড প্রম্পট নিন

  2. .Sql ফাইল সঞ্চিত সেখানে ডিরেক্টরি পরিবর্তন করুন

  3. নিম্নলিখিত কমান্ড কার্যকর করুন

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


7

আমি এমএসএসকিউএল এক্সপ্রেস 2014 ব্যবহার করছি এবং এর সমাধানগুলির কোনওটিই আমার পক্ষে কার্যকর হয়নি। তারা সকলেই এসকিউএল ক্র্যাশ করেছে। যেহেতু কেবলমাত্র অনেকগুলি সহজ offোকানো বিবৃতি সহ আমি একটি স্ক্রিপ্ট অফ স্ক্রিপ্ট চালানোর প্রয়োজন ছিলাম খুব কাছের রিসোর্ট হিসাবে সামান্য কনসোল অ্যাপ্লিকেশন লিখে আমি এর চারপাশে পেয়েছিলাম:

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

আমারও একই সমস্যা ছিল বর্গ স্ক্রিপ্ট সহ আমার ফাইলটি আকারের 150MB এরও বেশি ছিল (প্রায় 900kk খুব সাধারণ INSERT গুলি সহ)। আমি টাকুরোর পরামর্শ হিসাবে সমাধানটি ব্যবহার করেছি (এই প্রশ্নের উত্তর হিসাবে) তবে আমি এখনও বার্তাটি পেয়ে ত্রুটি পেয়েছি যে পর্যাপ্ত মেমরি নেই ("এই কোয়েরিটি চালানোর জন্য 'রিসোর্স পুলের অভ্যন্তরীণ' তে পর্যাপ্ত সিস্টেমের মেমরি নেই")।

আমাকে যেটা সাহায্য করেছিল তা হ'ল আমি প্রতি 50 কে ইনসার্টের পরে জিও কমান্ড রেখেছি ।

(এটি সরাসরি প্রশ্নের সমাধান করতে পারে না (ফাইলের আকার) তবে আমি বিশ্বাস করি যে এটি সমস্যার সমাধান করে যা অপ্রত্যক্ষভাবে স্কিল স্ক্রিপ্টের বৃহত আকারের সাথে সংযুক্ত my আমার ক্ষেত্রে অনেকগুলি কমান্ড সন্নিবেশ করে)


1

আপনার প্রশ্নটি এই প্রশ্নের সাথে বেশ মিল

আপনি আপনার ফাইল / স্ক্রিপ্টটিকে .txt বা। এসকিউএল হিসাবে সংরক্ষণ করতে এবং এটি এসকিএল সার্ভার ম্যানেজমেন্ট স্টুডিও থেকে চালাতে পারেন (আমার মনে হয় মেনুটি ওপেন / ক্যোয়ারী, তবে কেবল এসএসএমএস ইন্টারফেসে কোয়েরিটি চালান)। আপনার প্রথম মেশিনটি আপডেট করতে হবে, এটি আপনার স্থানীয় মেশিনে ডেটাবেস তৈরি বা নির্বাচন করতে হবে তা নির্দেশ করে।

যদি আপনাকে এই ডেটা স্থানান্তর খুব ঘন ঘন করতে হয় তবে আপনি অনুলিখনের জন্য যেতে পারেন। আপনার প্রয়োজনের উপর নির্ভর করে স্ন্যাপশটের প্রতিলিপিটি ঠিক আছে। যদি আপনার দুটি সার্ভারের মধ্যে ডেটা সিঙ্ক করতে হয় তবে আপনি আরও জটিল মডেল যেমন মার্জ প্রতিরূপের জন্য যেতে পারেন।

সম্পাদনা: আমি খেয়াল করিনি যে আপনার ফাইলের আকারের সাথে সংযুক্ত এসএসএমএস নিয়ে সমস্যা ছিল। তারপরে আপনি কমান্ড-লাইনের জন্য যেতে পারেন, যেমন অন্যদের প্রস্তাবিত, স্ন্যাপশটের প্রতিলিপি (আপনার মূল সার্ভারে প্রকাশ করুন, আপনার স্থানীয় একের উপর সাবস্ক্রাইব করুন, পুনরায় প্রতিলিপি করুন, তারপর সাবস্ক্রাইব করুন) বা এমনকি ব্যাকআপ / পুনরুদ্ধার করুন


3
জ্যাক উল্লেখ করেছেন যে ফাইলটি খুব বড় হওয়ায় তিনি এসএসএমএস থেকে এটি করতে পারবেন না।
রায় বুয়সেন

1

ফাইলটি মূলত দুটি নতুন টেবিলের জন্য ডেটা ধারণ করে।

তারপরে আপনি কেবল ডিটিএস (বা এসএসআইএস, যদি এটি এসকিউএল সার্ভার 2005+ হয়) এর চেয়ে সহজ তথ্য খুঁজে পেতে পারেন, যদি দুটি সার্ভার একই নেটওয়ার্কে থাকে।

যদি দুটি সার্ভার একই নেটওয়ার্কে না থাকে তবে আপনি উত্স ডাটাবেসটিকে ব্যাকআপ করতে এবং গন্তব্য সার্ভারে একটি নতুন ডাটাবেসে পুনরুদ্ধার করতে পারেন। তারপরে আপনি INSERT INTO SELECTদুটি টেবিলটি গন্তব্য ডাটাবেসে স্থানান্তর করতে ডিটিএস / এসএসআইএস বা একটি সাধারণ ব্যবহার করতে পারেন ।


যদি একটি বা দুটি সারণী বড় আকারের কোনও ফাইল উত্পন্ন করে, তবে এটি ডিবি কয়েকটা জিগ বলে ধরে নেওয়া নিরাপদ, যা ব্যাকআপ তৈরি করে এবং অনেক ক্ষেত্রেই অকেজো পুনরুদ্ধার করে।
ক্যাপ্টেন কেনপাচি

1

আশা করি এটি আপনাকে সাহায্য করবে!

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

1
-U <ব্যবহারকারীর নাম> -পি <পাসওয়ার্ড> অপশন কমান্ডগুলি বড় হাতের না হওয়া উচিত উচ্চতর ক্ষেত্রে
এরিক xu

0

আমি একই সমস্যার মুখোমুখি হয়েছি এবং উপায় খুঁজে বের করার জন্য একটি পুরো দিন বিনিয়োগ করেছি তবে এটি সমাধান করা হয়েছে। এসকিউএল ফাইলের অনুলিপি তৈরি করে এবং এক্সটেনশনটিকে .txt ফাইলে পরিবর্তন করে এবং ক্রম ব্রাউজারে .txt ফাইলটি খুলুন। আমি ব্রাউজারে ম্যাজিক এবং ফাইলটি খোলা দেখেছি।

ধন্যবাদ এবং আন্তরিক শ্রদ্ধা,

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.