এসকিউএল সার্ভার 'ডাটাবেস তৈরি করুন' বিবৃতি। কীভাবে অটোগ্রোথ সেটিংস উত্তরাধিকারী?


9

আমি এসকিউএল সার্ভার 2008 আর 2 ব্যবহার করছি এবং অবিচ্ছিন্ন মোতায়েনের মাধ্যমে ডেটাবেস তৈরি করছি।

আমাদের সিস্টেমে, এসকিউএল সার্ভারে ডিফল্ট 1 এমবি / 10% অটোগ্রোথ সেটিংস আমাদের ডেটা নিয়ে খারাপভাবে কাজ করে। বিশেষত আমাদের লিগ্যাসি অ্যাপ্লিকেশন রয়েছে যা আমাদের স্কিমা পরিবর্তন করতে বাধা দেয়। আমরা উদাহরণস্বরূপ ডাটাবেস সেটিংস কনফিগার করা চাই যাতে আমরা এটি পর্যায়যুক্ত মোতায়েনের জন্য পরিবর্তন করতে পারি।

আমি বেশ কয়েকটি জায়গায় পড়েছি যে কোনও নতুন ডিবির জন্য ডিফল্ট সেটিংস 'মডেল' এর সেটিংসের উপর ভিত্তি করে তৈরি হয় তবে এটি প্রদর্শিত হয় কেবল এসকিউএল ম্যানেজমেন্ট স্টুডিও ইউআই-তে নতুন ডাটাবেস ক্লিক করে কাজ করে এবং কোনও স্ক্রিপ্ট থেকে নয় যেমন তৈরি করুন ডেটাব্যাস [মাইডিবি]।

msdn.microsoft.com/en-us/library/ms186388(v=sql.105).aspx

sqlservercentral.com/Forums/Topic1065073-391-1.aspx

/programming/8828557/possible-to-configure-database-autogrowth-settings-at-the-instance-level/8828604#comment15586568_8828604

আসলে কি কেউ তৈরি স্ক্রিপ্ট নিয়ে কাজ করতে পেরেছে? আমি কি সার্ভারের প্রতিটি প্রতি অটোগ্রোথ সেট করতে পারি তার অন্য কোনও উপায় আছে?


5
আপনি যদি এটির সাথে স্ক্রিপ্ট করছেন তবে আপনি CREATE DATABASEকেন এটি কেবল আপনার স্ক্রিপ্টে নির্দিষ্ট করতে পারবেন না?
জেএনকে

1
@ জেএনকে আমি মনে করি যে এটি কী হওয়া উচিত তা যাচাই না করে তিনি উত্তরাধিকার সূত্রে চান। এবং এটি করা উচিত, তবে আমার একমত হতে হবে যে এটি হয় না (এবং এটি ২০১২ সালেও করছে না)। আমি এটি চেষ্টা না করা পর্যন্ত আমি আসলে এটি বিশ্বাস করি নি - আমি নিশ্চিত যে এটি কোনও পর্যায়ে সঠিকভাবে কাজ করেছে। 10000% জিনিসটির জন্য বাগ ফিক্সগুলি থেকে কোনও রিগ্রেশন হতে পারে
অ্যারন বার্ট্র্যান্ড

সেক্ষেত্রে ডিএমভিতে কি সেই চিত্রগুলি পাওয়া যায়? আপনি কি উপযুক্ত মানগুলির জন্য সিস্টেম টেবিল বা ডিএমভিগুলি জিজ্ঞাসা করে সম্ভবত এটিকে স্ক্রিপ্ট করতে পারবেন? '
জেএনকে

স্পষ্ট করার জন্য, আমরা বরং উত্তরাধিকারী হতে চাই। আমাদের পর্যাপ্ত পরিবেশে বিভিন্ন ডেটা স্টোরেজ সহ পরিবেশের প্রতি স্ক্রিপ্ট পরিবর্তনগুলি নিয়ন্ত্রণ করার জন্য আমাদের প্রচুর সংখ্যক ডিবি সার্ভার রয়েছে এই পর্যায়ে আরও কাজ হতে পারে। @ জেএনকে-র ধারণাটি আমি ভাবিনি। দেখে মনে হচ্ছে এমন কোনও কোয়েরি থাকতে পারে যা সহায়তা করবে: পরাশক্তি.com
মিশেল স্টিল

উত্তর:


2

এসকিউএল সার্ভার 2005+ এর জন্য আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

SELECT FILE_ID, type, type_desc, 
CAST( CAST( (CASE WHEN size < 128 THEN 128 ELSE size END) * 8. / 1024. AS INT ) AS VARCHAR(20) ) + 'MB' AS SIZE, 
CASE max_size WHEN -1 THEN 'UNLIMITED' ELSE CAST( CAST( max_size * 8. / 1024. AS INT ) AS VARCHAR(20) ) + 'MB' END  AS MAXSIZE,
CASE is_percent_growth
    WHEN 0 THEN CAST( CAST( growth * 8. / 1024. AS INT ) AS VARCHAR(20) ) + 'MB'
    WHEN 1 THEN CAST( growth AS VARCHAR(30) ) + '%'
END AS FILEGROWTH
FROM sys.master_files
WHERE database_id = DB_ID('model')
GO

এটি মডেল ডাটাবেসগুলির জন্য ফাইল সংজ্ঞা পুনরুদ্ধার করবে।
পরে আপনি এটি তৈরি করুন ডেটাবেস বা ডেটাব্যাসের পরিবর্তে ব্যবহার করতে পারেন।

এসএসএমএস আসলে এই প্যারামিটারগুলি পুনরুদ্ধার করতে এসএমও ব্যবহার করে এবং তারপরে এমন স্ক্রিপ্ট তৈরি করে যা দেখে মনে হয়:

CREATE DATABASE [aaa] ON  PRIMARY 
( NAME = N'aaa', FILENAME = N'D:\Data\aaa.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'aaa_log', FILENAME = N'D:\Logs\aaa_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO

যদি আপনার অ্যাপ্লিকেশনটি ডেটাবেস তৈরি করছে এবং আপনি অ্যাপ্লিকেশনটি পরিবর্তন করতে পারবেন না -
তবে তৈরির কাজ শেষ করার পরে আপনাকে ALTER DATABASE ব্যবহার করতে হবে:

ALTER DATABASE [aaa] MODIFY FILE ( NAME = N'aaa', MAXSIZE = 102400KB )
GO
ALTER DATABASE [aaa] MODIFY FILE ( NAME = N'aaa_log', FILEGROWTH = 10240KB )
GO

এর জন্য কমপক্ষে ALTER DATABASE অনুমতি প্রয়োজন
(যে কোনও ডেটাবেস সার্ভারের অনুমতি দ্বারা উল্লিখিত)
স্পষ্টতই, আপনি প্রথম কোডের নমুনা (FYM sys.master_files) ব্যবহার করে সেই স্ক্রিপ্টটি তৈরি করতে পারেন।

আমি এসকিউএল সার্ভার 2008 আর 2 এর জন্য সিসাল্টফায়াল ব্যবহার করব না কারণ এটি হ্রাস পেয়েছে।

শুভ কামনা
রই


0

কেমন:

use master
go

declare @newDbName sysname
, @fn nvarchar(1024)
, @growthAmount integer
, @growth nvarchar(128)
, @growthAmount_log integer
, @growth_log nvarchar(128)

set @newDbName = 'myNewDB'

--see what's available to us
--select * 
--from sys.sysaltfiles saf
--inner join sys.databases db
--  on saf.dbid = db.database_id
--where db.name = 'model'

select @growthAmount = saf.growth 
, @growth = case saf.status & 0x100000 when 0 then 'MB' else '%' end
, @fn = replace(saf.filename,'model.mdf','')
from sys.sysaltfiles saf
inner join sys.databases db
    on saf.dbid = db.database_id
where db.name = 'model'
and saf.name = 'modeldev'

select @growthAmount_log = saf.growth 
, @growth_log = case saf.status & 0x100000 when 0 then 'MB' else '%' end
from sys.sysaltfiles saf
inner join sys.databases db
    on saf.dbid = db.database_id
where db.name = 'model'
and saf.name = 'modellog'

if @growth = 'MB' set @growthAmount = @growthAmount / 128
if @growth_log = 'MB' set @growthAmount_log = @growthAmount_log / 128

set @growth = cast(@growthAmount as nvarchar(10)) + @growth
set @growth_log = cast(@growthAmount_log as nvarchar(10)) + @growth_log

print '
    CREATE DATABASE ' + @newDbName + '
    ON 
    (   
        NAME = ' + @newDbName + '_data
        ,FILENAME = ''' + @fn + @newDbName + '.mdf''
        ,FILEGROWTH = ' + @growth + '
    )
    LOG ON
    ( 
        NAME = ' + @newDbName + '_log
        ,FILENAME = ''' + @fn + @newDbName + '.ldf''
        ,FILEGROWTH = ' + @growth_log + '
    ) 
'
exec('
    CREATE DATABASE ' + @newDbName + '
    ON 
    (   
        NAME = ' + @newDbName + '_data
        ,FILENAME = ''' + @fn + @newDbName + '.mdf''
        ,FILEGROWTH = ' + @growth + '
    )
    LOG ON
    ( 
        NAME = ' + @newDbName + '_log
        ,FILENAME = ''' + @fn + @newDbName + '.ldf''
        ,FILEGROWTH = ' + @growth_log + '
    ) 
')

পুনশ্চ. এই টেবিলটি সম্পর্কে আরও তথ্য এখানে: এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms181338.aspx । উপরের আমার কোডে আমি সর্বাধিক আকার = 0 কেস হিসাবে দাবী করিনি (অর্থাত্ বৃদ্ধি নেই), এবং ডকুমেন্টেশনের ক্ষেত্রে শতকরা হারের জন্য আমার আলাদা চিত্র থাকার কারণে স্থিতির কোডটি মুখোশ দিয়েছি, তবে মানগুলির মাধ্যমে তুলনীয় করে তুলতে সক্ষম হয়েছি মাস্কিং। আমি 0 টি স্ট্যাটাস কোড সম্পর্কে উদ্বিগ্ন নই, যেহেতু এটি ম্যাক্সেসাইজ (এটি প্রয়োগ করা হয়েছিল) দ্বারা যত্ন নেওয়া হয়েছিল।
জনএলবেভান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.