লোকালডিবি ভি 14 এমডিএফ ফাইলগুলির জন্য ভুল পথ তৈরি করে


34

সম্প্রতি, আমি এসকিউএল সার্ভার এক্সপ্রেস ইনস্টলার এবং এই নির্দেশাবলী ব্যবহার করে লোকালডিবি 13 থেকে 14 সংস্করণে আপগ্রেড করেছি । ইনস্টলেশনের পরে, আমি 13 সংস্করণটির বিদ্যমান ডিফল্ট উদাহরণ (এমএসএসকিউএলকিএলএলডিবি) বন্ধ করে দিয়েছি এবং একটি নতুন তৈরি করেছি, যা স্বয়ংক্রিয়ভাবে v14.0.1000 সার্ভার ইঞ্জিন ব্যবহার করেছে।

আমি প্রায়শই ডেটাবেস ইন্টিগ্রেশন পরীক্ষার জন্য লোকালডিবি ব্যবহার করি, অর্থাত্ আমার এক্সুনিট পরীক্ষায়, আমি একটি (অস্থায়ী) ডাটাবেস তৈরি করি যা পরীক্ষা শেষ হলে মুছে ফেলা হয়। নতুন সংস্করণ থেকে, দুর্ভাগ্যক্রমে আমার সমস্ত পরীক্ষাগুলি নিম্নলিখিত ত্রুটি বার্তার কারণে ব্যর্থ হয়েছে:

ক্রিয়েট ফাইলটি অপারেটিং সিস্টেম ত্রুটির মুখোমুখি হয়েছিল 5 (অ্যাক্সেস অস্বীকৃত)

অদ্ভুত বিষয়টি হ'ল এমডিএফ ফাইলের জন্য লক্ষ্য পথটি ভুল, সি: \ ব্যবহারকারীগণ \ কেপএফএল এবং ডিবিডি 0811493 e18b46febf980ffb8029482a.mdf (যা একক পরীক্ষার জন্য এলোমেলো ডাটাবেসের নাম) এর মধ্যে একটি ব্যাকস্ল্যাশ অনুপস্থিত । ডাটাবেসগুলি সাধারণ কমান্ডের মাধ্যমে তৈরি করা হয় CREATE DATABASE [databaseName]- এখানে বিশেষ কিছু নয়।

এসএসএমএসে, আমি দেখতে পাচ্ছি যে ডেটা, লগ এবং ব্যাকআপের জন্য লক্ষ্যগুলি নিম্নরূপ:

লোকালডিবি টার্গেটের অবস্থানগুলি

তবে, আমি যখন অবস্থানটি আপডেট করার চেষ্টা করি তখন আমি অন্য একটি ত্রুটি বার্তা পাই:

আপডেট করার চেষ্টা করার সময় ত্রুটি বার্তা

আমি কীভাবে ডিফল্ট অবস্থানগুলি আপডেট করতে পারি যাতে লোকালডিবি আবার ডাটাবেস তৈরি করতে সক্ষম হয়? এটা স্পষ্ট যে লোকালডিবি সঠিকভাবে ডিফল্ট অবস্থান ডিরেক্টরি এবং ডাটাবেস ফাইলের নাম একত্রিত করে না - এমন কোনও রেজিস্ট্রি এন্ট্রি আছে যা আমি সম্পাদনা করতে পারি? নাকি অন্য কিছু?

ডগের উত্তর এবং সিপুপিকের মন্তব্যের পরে আপডেট করুন

এই স্ট্যাকওভারফ্লো প্রশ্ন অনুসারে , ডিফল্ট অবস্থানটিও রেজিস্ট্রি দিয়ে পরিবর্তনযোগ্য হওয়া উচিত। তবে, যদি আমি সম্পর্কিত কীগুলি "ডিফল্ট ডেটা", "ডিফল্টলগ" এবং "ব্যাকআপডাইরেক্টরি" সন্ধান করার চেষ্টা করি, তবে আমি সেগুলি আমার রেজিস্ট্রিটিতে খুঁজে পাই না। এসকিউএল সার্ভার v14 এই রেজিস্ট্রি কীগুলির নাম পরিবর্তন করেছে, বা এই তথ্যগুলি রেজিস্ট্রি থেকে সরিয়ে নিয়েছে?


এফওয়াইআই, অ্যাডমিন মোডে এসএসএমএস চলাকালীন আমি ডেটাবেস ডিফল্ট অবস্থানগুলিও আপডেট করতে পারি না।
feO2x

1
আমার উত্তর আপডেট করুন। এই বাগটি সিইউ 6 হিসাবে ঠিক করা হয়েছে, এপ্রিলের মাঝামাঝি সময়ে প্রকাশিত ..
সলোমন রুটজকি

উত্তর:


21

হালনাগাদ

এসকিউএল সার্ভার 2017 এর সিইউ 6 হিসাবে, এই বাগটি ঠিক করা হয়েছে। নিম্নলিখিতটি সফলভাবে সম্পাদন করা এখন সম্ভব:

CREATE DATABASE [CreateDatabaseTest];
DROP DATABASE [CreateDatabaseTest];

সমস্যাটি এবং এটি সিইউ 6 এ স্থির করা হয়েছে, নিম্নলিখিত কেবি নিবন্ধে নথিভুক্ত করা হয়েছে:
ফিক্স: আপনি এসকিউএল সার্ভার 2017 এক্সপ্রেস লোকালডিবিতে একটি ডাটাবেস তৈরি করার চেষ্টা করার সময় "অ্যাক্সেস অস্বীকার করা হয়েছে" ত্রুটি

ক্রমবর্ধমান আপডেট পেতে, দয়া করে নীচের পৃষ্ঠায় যান এবং শীর্ষ (অর্থাত্ সর্বশেষ) বিল্ডটি ধরুন, যা আপনি এটি দেখলে তার উপর নির্ভর করে CU6 এর চেয়ে নতুন হতে পারে:

এসকিউএল সার্ভার 2017 বিল্ড সংস্করণ


এসকিউএল সার্ভার 2017 সিইউ 6 হিসাবে প্রকাশিত তথ্য নীচে (2018-04-17 প্রকাশিত)

সম্মিলিত পথ + ফাইলের নামটিতে ব্যাকস্ল্যাশ না থাকার বিষয়টি এসকিউএল সার্ভার 2017 এর সাথে একটি বাগ হিসাবে দেখা যাচ্ছে I এমনকি সিটিরDefaultData জন্য একটি স্ট্রিং মান যুক্ত করার জন্য আমি রেজিস্ট্রি সম্পাদনার চেষ্টা করেছি : \ ব্যবহারকারীগণ \ মাইকাউন্টনাম \ নীচের উভয় কীগুলিতে (3 টি ডিফল্ট পাথ আমি যে লোকালডিবি রেজিস্ট্রি কীগুলির মধ্যে দেখেছি তা কোনওটিতে নেই):

  • কম্পিউটার \ HKEY_CURRENT_USER \ সফ্টওয়্যার \ মাইক্রোসফ্ট \ মাইক্রোসফ্ট এসকিউএল সার্ভার \ ব্যবহারকারীর নাম {কিছু-জিইউডি-মান}
  • কম্পিউটার \ HKEY_LOCAL_MACHINE OF সফ্টওয়্যার \ মাইক্রোসফ্ট, মাইক্রোসফ্ট SQL সার্ভার \ MSSQL14E.LOCALDB। এমএসএসকিউএল সার্ভার

এবং হ্যাঁ, আমি শাটডাউন করেছিলাম এবং উভয় প্রয়াসে আবার লোকালডিবি উদাহরণ শুরু করেছি।

তবে, আমি নিশ্চিত নই যে ডিফল্ট পাথগুলি পরিবর্তন করতে সক্ষম না হওয়া একটি ত্রুটি কারণ এটি কেবলমাত্র দস্তাবেজ এবং দুর্বল ত্রুটি হ্যান্ডলিং সমন্বিত হতে পারে। আমি এটি বলছি কারণ আমি কেবল এসকিউএল সার্ভার লোকালডিবি সংস্করণ 2014, 2016 এবং 2017 এর জন্য ডিফল্ট অবস্থানগুলি সম্পাদনা করার চেষ্টা করেছি এবং এর ফলে ঠিক একই ত্রুটি দেখা দিয়েছে, যা নিজে থেকেই হওয়ার কারণে অদ্ভুত RegCreateKeyEx(), যা রেজিস্ট্রি নিয়ে কাজ করা উচিত এবং ফাইল সিস্টেম নয়।

ব্যবহারের জন্য ফাইলগুলি নির্দিষ্ট না করে কোনও নতুন ডাটাবেস তৈরি করার সময় ব্যাকস্ল্যাশের অভাবের কারণে পথটি পরিবর্তন করতে না পারা দুর্ভাগ্যজনক। তবে আমি সম্পূর্ণ CREATE DATABASEসিনট্যাক্সটি নীচে ব্যবহার করে একটি নতুন ডাটাবেস তৈরি করতে সক্ষম হয়েছি :

CREATE DATABASE [XXXXX]
 CONTAINMENT = NONE
 ON PRIMARY 
( NAME = N'XXXXX_sys', FILENAME = N'C:\Users\MyAccountName\XXXXX_sys.mdf',
  SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB ), 
 FILEGROUP [Tables] DEFAULT
( NAME = N'XXXXX_data', FILENAME = N'C:\Users\MyAccountName\XXXXX_data.ndf',
  SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'XXXXX_log', FILENAME = N'C:\Users\MyAccountName\XXXXX_log.ldf',
  SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 COLLATE Latin1_General_100_CS_AS_KS_WS_SC;
GO

আমরা আমাদের ডাটাবেস সেটআপে পন্থা নিচ্ছি যে এটি যদি লোকালডিবি সংযোগ হয় তবে আমরা এমডিএফ ফাইলের পথটি নির্দিষ্ট করেছি যেমন ঠিক তেমনিভাবে কাজ করি। তবে এলডিএফের নাম বা বিবৃতিটির LOG ONবিভাগও উল্লেখ করা প্রয়োজন বলে মনে হয় না CREATE DATABASE। এলডিএফ ফাইলগুলি এমডিএফ ফাইলের একই স্থানে, ডিফল্টরূপে তৈরি হয়ে গেছে বলে মনে হয়। (লোকালডিবি-র আমাদের ব্যবহারের বিষয়টি মূলত স্বয়ংক্রিয় পরীক্ষায় ব্যবহারের জন্য))
tgharold

@tgharold দয়া করে আমার উত্তরের শীর্ষে আপডেটটি দেখুন। এই বাগটি খুব সম্প্রতি নতুন সিইউ 6 প্যাচ :-) এ ঠিক করা হয়েছিল।
সলোমন রুটজকি

5

আমি একই ইস্যুতে দৌড়ে গিয়ে এমন একটি কাজের সন্ধান পেয়েছি যার কোনও স্পষ্ট ত্রুটি থাকা উচিত নয় (যদি আমি কিছু ভুলে যাই তবে দয়া করে আমাকে সংশোধন করুন) । এটি সলমনস উত্তরের উপর ভিত্তি করে, তবে সরাসরি ডাটাবেস ফাইলগুলির নিখুঁত পথ নির্দিষ্ট করার প্রয়োজন ছাড়াই।

DECLARE @databaseName NVARCHAR(MAX) = 'MyDatabase'

DECLARE @dataFilePath NVARCHAR(MAX) = CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS NVARCHAR) 
    + FORMATMESSAGE('\%s.mdf', @databaseName)

DECLARE @sql NVARCHAR(MAX) = FORMATMESSAGE(
    'CREATE DATABASE %s ON PRIMARY ( NAME = %s, FILENAME = ''%s'' )', 
    quotename(@databaseName), quotename(@databaseName), @dataFilePath
)

EXEC (@sql)

এটি গতিশীল স্কয়ার ব্যবহার করে এবং একেবারে সুন্দর নয়, তবে ইস্যুটিতে অফিসিয়াল ফিক্স না হওয়া পর্যন্ত এটি কাজটি সম্পন্ন করে।


1
মজাদার. এটা তোলে পারে 2nd সরাতে সামান্য ভালো হতে QUOTENAMEএর 2nd PARAM করতে FORMATMESSAGEএবং ফাইল পাথ প্রায় ডবল কোট করা: FORMATMESSAGE(N'CREATE DATABASE %s ON PRIMARY ( NAME = %s, FILENAME = "%s" )', QUOTENAME(@databaseName), QUOTENAME(@databaseName), @dataFilePath);। আপনার কাছে এটি এখন যেমন কাজ করছে বলে মনে হচ্ছে, সুতরাং এই পদ্ধতির জন্য +1 করুন 1 নামটি হার্ড-কোডিং করা বা কোনও পথে যাওয়ার জন্য এখনও একটি মামলা রয়েছে: আপনি যখন USERPROFILEরুটটি ব্যবহার করতে চান না । তবে আপনি এটির জন্য এখানে অনুমতি দিতে InstanceDefaultDataPathপারেন এবং কেবলমাত্র যদি ডিফল্ট হন @Path IS NULL। :-)
সলোমন রুটজকি

ধন্যবাদ. আমি আপনার পরামর্শ দিয়ে উত্তর সম্পাদনা করেছি। আমি স্বীকার করি নিরঙ্কুশ পথটি কঠোর কোডিং করা অবশ্যই একটি বৈধ সমাধান। আমাদের দৃশ্যে, আমরা কেবল অটোমেটিক পরীক্ষার সময় ডাটাবেসটি পুনরায় তৈরি করি এবং আমার স্থানীয় মেশিনে ঠিক একই পথে ফোল্ডার তৈরি করা প্রত্যেককে সমন্বয় না করেই এটি নিশ্চিত করতে হয়েছিল যে এটি আমার সমস্ত সহকর্মীদের জন্য কাজ করবে এবং সার্ভার তৈরি করবে। :-)
নিকোলাজ বাঁধ লারসেন

4

আমিও এই সমস্যার মুখোমুখি হয়েছি। আমি খুঁজে পাওয়া একমাত্র কার্যপ্রণালী হ'ল লেখার প্রবেশাধিকার দেওয়াc:\Users\ করা (বা এর মতো কিছু) এবং এটি এমডিএফ ফাইলগুলি যেখানে খুশি তৈরি করতে দেয়।


1
ধন্যবাদ, এটি আমার জন্যও এটি সমাধান করেছে! এই কর্মক্ষেত্রটি সফল হয়, তবে এটি কেবল আমাদের স্থানীয় বিল্ড সার্ভারে, সুতরাং আমি অতিরিক্ত ব্যবহারকারীর অধিকারের বিষয়ে চিন্তা করি না।
হ্যানস সাচসেনহোফার

@ হ্যান্নস সাচসেনহোফার: আমি সম্মতি জানাই, এটি সফল হয়। তবে আমাকে লোকালডিবি দেব দলের পক্ষ থেকে প্রতিশ্রুতি দেওয়া হয়েছিল তারা আসন্ন হট-ফিক্স রিলিজে এই বাগটি ঠিক করবে।
আবাতিশ্বেভ

প্রত্যেকের কাছে অনুদান লেখার অ্যাক্সেসটি আমার কাছে বেশ খারাপ কাজ বলে মনে হচ্ছে
রাফেল

@ রাফেল: কেন? আপনার ডেভ বক্সে আপনার একাধিক ব্যবহারকারী রয়েছে? আর আপনি কাকে বিশ্বাস করবেন না?
আবাটিশচেভ

2

এই সমস্যার সংক্ষিপ্ত ব্যাখ্যা দেওয়ার জন্য আপনাকে ধন্যবাদ। আমি গতকাল এই একই ইস্যুতে ছুটে এসেছি। আমি এখনও একটি স্থায়ী সমাধান খুঁজে পাই নি, তবে এখানে আমার বর্তমান কর্মক্ষমতা রয়েছে।

আমি ডেটাবেস তৈরি করছি। ডাটাবেস তৈরি করতে ESONECreated () ফাংশন।

' AttachDBFilename = ' সেটিংস অন্তর্ভুক্ত করতে সংযোগ স্ট্রিং সেট করুন।

Server=(LocalDB)\\MSSQLLocalDB;Database=ExploreCalifornia;AttachDbFilename=.\\ExploreCalifornia.mdf;Trusted_Connection=True;MultipleActiveResultSets=true

অ্যাপ্লিকেশন চালান। এটি একটি ত্রুটি উত্পন্ন করবে:

ফাইলটি সংযুক্ত করতে পারে না।

তবে এটি ডাটাবেস তৈরি করবে।

এর পরে, সংযোগের স্ট্রিংটি পরিবর্তন করুন এবং ' AttachDBFilename = ' সরান ।

 Server=(localdb)\\MSSQLLocalDB;Database=ExploreCalifornia;Trusted_Connection=True;MultipleActiveResultSets=true

আমি কোনও ত্রুটি না করে আবার অ্যাপ্লিকেশন চালিয়েছি এবং টেবিল তৈরি করা হয়েছে।


বেশ কয়েকটি প্রশ্ন: প্রথমত, নিশ্চিত হওয়াতে - আপনি প্রাথমিকভাবে একটি (অ্যাক্সেস অস্বীকৃত) ত্রুটি পেয়েছিলেন, এবং এটি সমাধান করেছে, সঠিক? দ্বিতীয় - এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও কেবলমাত্র আইপি দ্বারা উল্লিখিত অ্যাপ্লিকেশন, এবং এটি সেখান থেকে আপনি কিছু করেছেন বলে মনে হচ্ছে না - আপনি কোন অ্যাপ্লিকেশন থেকে এই সব করেছেন?
আরডিফোজ

আপনার উত্তরের জন্য ধন্যবাদ, তবে এটি সত্যিই আমার সমস্যার সমাধান করে না। আমার পরীক্ষার কোড CREATE DATABASE [databasename]লোকালডিবি-র বিরুদ্ধে একটি সাধারণ সাথে একটি নতুন ডাটাবেস তৈরি করে এবং এই খুব বিবৃতিটি সমস্যা সৃষ্টি করছে যেহেতু লোকালডিবি ভুলভাবে এলোমেলোভাবে উত্পন্ন ডাটাবেসের নামের সাথে ডিফল্ট লোকেশন ডিরেক্টরিকে সংশ্লেষ করে (আমার প্রশ্নের অনুচ্ছেদ 3 এবং 4 দেখুন)। আমার ডিফল্ট অবস্থানগুলি ঠিক করার জন্য একটি উপায় প্রয়োজন যাতে এই সংমিশ্রণ সমস্যাটি না ঘটে।
feO2x

বর্তমানে আমি এসকিউএল / ডিডিএল এর মাধ্যমে কোনও ডেটাবেস তৈরি করতে পারছি না। আমি এসএসএমএস, কোড বা অন্য কোথাও কোথাও স্টেটমেন্টটি চালাচ্ছি কিনা তা বিবেচ্য নয় কারণ লোকালডিবি সর্বদা ইউজার ডিরেক্টরিতে সরাসরি ডাটাবেস তৈরি করার চেষ্টা করে (যা সম্পূর্ণ ভুল, এই ডিরেক্টরিতে কোনও ফাইল উপস্থিত থাকার অনুমতি নেই) ।
feO2x

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