কীভাবে এসকিউএল সার্ভার কোলেশন পরিবর্তন করবেন


27

পুরো সার্ভার এবং একটি নির্দিষ্ট ডাটাবেসের জন্য কীভাবে আমি এসকিউএল সার্ভার ২০০৮ আর 2 এক্সপ্রেস ডিফল্ট কোলেশন পরিবর্তন করতে পারি?

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর ভিজ্যুয়াল ইন্টারফেস ব্যবহার করে এটি করার কোনও উপায় আছে কি? সার্ভার প্রোপার্টি উইন্ডোতে (এবং এটি সম্পর্কিত ডেটাবেস প্রোপার্টি উইন্ডো), সম্পাদনা করার জন্য এই সম্পত্তিটি উপলভ্য নয়।


2
আপনি যদি ডাটাবেসে সমস্ত কলামের কলেজ পরিবর্তন করতে চান তবে এই স্ক্রিপ্টটি দেখুন । আমি নিজে চেষ্টা করে দেখিনি, তবে আমি এটি সহকর্মীর জন্য খুঁজে পেয়েছি যা কেবল এটি করতে চেয়েছিল।
জাস্টিন ডিয়ারিং

2
আপনি যদি কোনও ডাটাবেসের কোলেশন পরিবর্তন করতে চান তবে এই সরঞ্জামটি দেখুন: কোডেপ্রজেক্ট / কেবি / ডেটাবেস / চেঞ্জকোলেশন.এএসপিএক্স এটি এসকিউএল সার্ভার ২০০৫ এবং ২০০৮ এর সাথে কাজ করে এবং এটি আপনার জন্য পাওয়া স্ক্রিপ্টগুলির চেয়ে আমার পক্ষে আরও ভাল কাজ করেছে the ওয়েব।
এরউইন

উত্তর:


25

হ্যাঁ।

আপনি এসকিউএল সার্ভার 2008 আর 2 এক্সপ্রেস উদাহরণ এবং স্বতন্ত্র ডাটাবেসগুলির ডিফল্ট কোলেশন পরিবর্তন করতে পারেন তবে এটি একটি জটিল কাজ।

দুঃখের বিষয়, এসএসএমএসের মাধ্যমে এটি করার কোনও ভিজ্যুয়াল বিকল্প নেই।

এসকিউএল সার্ভার ২০০৮ নিম্নলিখিত স্তরে সংস্থাগুলি সেট করার জন্য সমর্থন করে:

  • সার্ভার

  • ডেটাবেস

  • স্তম্ভ

  • অভিব্যক্তি

ডিফল্ট ইনস্টলেশন সেটিংস উইন্ডোজ সিস্টেমের লোকেল দ্বারা নির্ধারিত হয়। সার্ভার-স্তরের কোলেশনটি সেটআপ করার সময়, বা উইন্ডোজ সিস্টেম লোকেলের পরিবর্তে ইনস্টলের আগে পরিবর্তন করা যেতে পারে। আরও অনেক কিছু ...

সার্ভার কোলেশন সেট করা এবং পরিবর্তন করা হচ্ছে - এসকিউএল সার্ভার ২০০৮

  • আপনার ব্যবহারকারীর ডাটাবেসগুলি এবং সেগুলির মধ্যে থাকা সমস্ত বস্তু পুনরায় তৈরি করতে আপনার কাছে প্রয়োজনীয় সমস্ত তথ্য বা স্ক্রিপ্ট রয়েছে তা নিশ্চিত করুন।

  • কোনও সরঞ্জাম ব্যবহার করে আপনার সমস্ত ডেটা রফতানি করুন যেমন বিসিপি ইউটিলিটি। আরও তথ্যের জন্য, বাল্ক ডেটা আমদানি ও রপ্তানি দেখুন।

  • সমস্ত ব্যবহারকারীর ডাটাবেস ড্রপ করুন।

  • সেটআপ কমান্ডের SQLCOLLATION বৈশিষ্ট্যে নতুন কোলেশন উল্লেখ করে মাস্টার ডাটাবেসটি পুনর্নির্মাণ করুন

  • সমস্ত ডাটাবেস এবং সেগুলিতে সমস্ত বস্তু তৈরি করুন।

  • আপনার সমস্ত ডেটা আমদানি করুন।

ডেটাবেস কোলেশন সেট এবং পরিবর্তন করা হচ্ছে - এসকিউএল সার্ভার ২০০৮

  • একটি নতুন ডাটাবেস তৈরি করার সময় বিবৃতিতে COLLATIONবিকল্পটি সেট করুন CREATE DATABASE
  • একইভাবে, বিদ্যমান ডাটাবেসের কোলেশন পরিবর্তন করতে বিবৃতিতে COLLATIONবিকল্পগুলি সেট করুন ALTER DATABASE

    ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;

কলাম কলোশন স্থাপন ও পরিবর্তন করা হচ্ছে

  • আপনি ডাটাবেস কোলেশন পরিবর্তন করার পরেও কিছু কলামের সমাহার একই থাকবে। সেক্ষেত্রে আপনাকে স্বতন্ত্র কলামগুলির জোট পরিবর্তন করতে হবে।

6

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


5

আমি এটির মতো কিছু করেছি এবং এটি কার্যকর হয়েছে তবে আপনাকে সেই সূচিগুলি মনে রাখতে হবে যা পাঠ্য / বর্ণচর / এনভারচর হিসাবে ডেটা টাইপের দিকে ইঙ্গিত করছে, স্ক্রিপ্টটি চালাতে হবে এবং তারপরে সূচিগুলি তৈরি করতে হবে।

USE YourDataBase
GO

DECLARE @Table_Name NVARCHAR(100)
SET @Table_Name = NULL--- THIS IS THE TableName that you want to change its collation columns

--- if null will set to all tables

DECLARE @TempTable AS TABLE
(
ID INT IDENTITY
,TableName NVARCHAR(100)
,ColumnName NVARCHAR(100)
,TypeName NVARCHAR(100)
,Max_length INT
,Collation_Name NVARCHAR(100)
,EnterDtm DATETIME DEFAULT GETDATE()
)
DECLARE @NewCollation NVARCHAR(100)
SET @NewCollation = 'Latin1_General_CI_AS' --- THIS IS THE COLLATION NAME THAT YOU WANT TO CHANGE

INSERT INTO @TempTable(TableName,ColumnName,TypeName,Max_length,Collation_Name)
SELECT 
QUOTENAME(SCHEMA_NAME(tables.schema_id)) + '.' + QUOTENAME(tables.name) AS TableName
,all_columns.name AS ColumnName
,type_name(all_columns.user_type_id)
,all_columns.max_length
,all_columns.collation_name  
from sys.all_columns INNER JOIN sys.tables ON
tables.object_id = all_columns.object_id
AND collation_name IS NOT NULL
AND all_columns.collation_name != @NewCollation
WHERE tables.object_id = ISNULL(object_id(@Table_Name),all_columns.object_id)


DECLARE @TableID SMALLINT
SET @TableID = (SELECT MIN(ID) FROM @TempTable)

DECLARE @Query NVARCHAR(1000),@TableName NVARCHAR(100),@ColumnName NVARCHAR(100),@TypeName NVARCHAR(100)
,@Size INT

WHILE @TableID IS NOT NULL
BEGIN
    SET @TableName = (SELECT TableName FROM @TempTable WHERE ID = @TableID)
    SET @ColumnName = (SELECT QUOTENAME(ColumnName) FROM @TempTable WHERE ID = @TableID)
    SET @TypeName = (SELECT TypeName FROM @TempTable WHERE ID = @TableID)
    SET @Size = (SELECT Max_length FROM @TempTable WHERE ID = @TableID) 

    SET @Query='ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @TypeName+ ISNULL ('(' +CAST(@Size AS VARCHAR(200))+')', '') +' COLLATE '+ @NewCollation  
    PRINT (@Query)

    SET @TableID = (SELECT MIN(ID) FROM @TempTable WHERE ID > @TableID)
END 

এটি আমার প্রথম উত্তর পোস্ট করা আমার ক্ষমা ক্ষমা করুন


-1

সমস্ত ডেটা (লগইন, লিঙ্কযুক্ত সার্ভার, এসকিউএল এজেন্ট জবস, ডিবি মেল সেটিংস, ইত্যাদি) রফতানি করা এবং ইনস্ট্যান্স-স্তরের ডেটা পুনর্নির্মাণ করা , এবং ব্যবহারকারীর সমস্ত ডেটা পুনরায় লোড করা অনেক কাজ। এবং ALTER DATABASEএত কিছুর পরেও, এখনও কোনও গ্যারান্টি নেই যে আপনি কোনও ডাটাবেজের ডিফল্ট কোলেশন আপডেট করতে পারবেন কারণ বেশ কয়েকটি শর্ত রয়েছে যা অপারেশনটি সম্পূর্ণ হতে বাধা দেবে ( বিশদ জন্য ডকুমেন্টেশনের "ডেটাবেস কোলেশন পরিবর্তন" বিভাগটিALTER DATABASE দেখুন) ।

তবে একটি অননুমোদিত পদ্ধতি রয়েছে যা অনেক সহজ। মূল অসুবিধা হ'ল এটি অসমর্থিত। এটি এমনটি বলার অপেক্ষা রাখে না যে কোনও কিছু ভুল হয়ে যাবে, ঠিক এটি যদি কিছু হয় তবে মাইক্রোসফ্ট এটিকে ঠিক করতে সহায়তা করবে না (কারণ তারা কখনই গ্যারান্টি দেয় না যে এটি কার্যকর হবে)।

আমি যে পদ্ধতিটির কথা বলছি sqlservr.exeতা -q {new_collation_name}স্যুইচ দিয়ে চলছে । এটির চেয়ে আরও কিছু আছে তবে এটি মূল ধারণা। এই পদ্ধতিটি কেবলমাত্র সিস্টেম মেটা-ডেটা আপডেট করে, যার সুবিধাগুলি এবং পরিণতিগুলি রয়েছে, যার প্রধানটি হ'ল:

সুবিধাগুলি

  • বেশ দ্রুত
  • ALTER DATABASEকাজ করা থেকে বাধা দেয় এমন সীমাবদ্ধতাগুলিকে বাইপাস করুন
  • লোকেরা ড্রপ এবং পুনরায় তৈরি করতে বছরের পর বছর ধরে যে কোনও স্ক্রিপ্টের চেয়ে সম্ভবত আরও সঠিক accurate

অপূর্ণতা

  • কিছু ভুল হলে অসমর্থিত
  • VARCHARতথ্য করতে , পরিবর্তন করলে কোড পৃষ্ঠা পুরাতন এবং নতুন collations মধ্যে ভিন্ন, এবং 128 মান দিয়ে অক্ষর - 255 (0x80 - 0xFF) বিদ্যমান, এবং যারা অক্ষর নতুন কোডের উপর একই মান সঙ্গে একই চরিত্র উপস্থিত না থাকার পাতা। সুতরাং ডেটা ক্ষতির সম্ভাবনা রয়েছে এবং এই অবস্থার অস্তিত্ব নেই তা নিশ্চিত করার জন্য আপনার ডেটা প্রথমে গবেষণা করা দরকার। তবে এর অর্থ হ'ল কেবলমাত্র অক্ষরগুলির সাথে 0 - 127 এর মান রয়েছে এমন প্রচুর কেস রয়েছে যা কোডের পৃষ্ঠায় পরিবর্তন হলেও কোনও বিপদে নেই।
  • ব্যবহারকারী-সংজ্ঞায়িত সারণী প্রকারগুলি (ইউডিটিটি) এড়ানো হয় এবং ম্যানুয়ালি আপডেট করা দরকার।

sqlservr.exe -qপদ্ধতিটি কী করে এবং কী করে না তার বিশদ বিবরণের জন্য (কীভাবে বিভিন্ন স্তরে কোলেশনগুলি কীভাবে কাজ করে তার বিশদ এবং কীভাবে নজর রাখার সম্ভাব্য সমস্যাগুলি সহ) সহ দয়া করে আমার পোস্টটি দেখুন:

সমস্ত ব্যবহারকারীর ডেটাবেসগুলিতে ইনস্ট্যান্স, ডেটাবেস এবং সমস্ত কলামের সংকলন পরিবর্তন করা: কীভাবে সম্ভবত ভুল হতে পারে?

(সিস্টেম ডাটাবেস অন্তর্ভুক্ত রয়েছে: শুধুমাত্র উদাহরণস্বরূপ পরিবর্তন করতে master, model, msdb, এবং tempdb) এবং এক বা একাধিক ডাটাবেস (কিন্তু সব ডাটাবেস), কেবল ডাটাবেসের (গুলি) বিচ্ছিন্ন যে আপনি এই অপারেশন থেকে বাদ দেওয়ার বিষয়ে, এবং তারপর তাদের পুনঃ-সংযুক্ত একবার কোলেশন আপডেট সম্পূর্ণ হয়।

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