এসকিউএল সার্ভার 2016 এ সারণী নামকরণ কনভেনশন এবং নীতি পরিচালনার সাথে ইস্যু করুন


10

এসকিউএল সার্ভার ২০১২-এ, আমার একটি নীতি সেট ছিল যাতে কোনও টেবিলের নাম ফাঁকা না দেওয়ার জন্য সেট করা হয়েছিল। যাইহোক, আমি যখন এসকিউএল সার্ভার 2016 এ একই নীতিটি ব্যবহার করি তখন আমার ত্রুটি হয়।

শর্তটির জন্য কোডটি এখানে:

DECLARE @condition_id INT
EXEC msdb.dbo.sp_syspolicy_add_condition @name=N'No Spaces', @description=N'No spaces in table names.', @facet=N'IMultipartNameFacet', @expression=N'<Operator>
  <TypeClass>Bool</TypeClass>
  <OpType>NOT_LIKE</OpType>
  <Count>2</Count>
  <Attribute>
    <TypeClass>String</TypeClass>
    <Name>Name</Name>
  </Attribute>
  <Constant>
    <TypeClass>String</TypeClass>
    <ObjType>System.String</ObjType>
    <Value>% %</Value>
  </Constant>
</Operator>', @is_name_condition=4, @obj_name=N'% %', @condition_id=@condition_id OUTPUT
SELECT @condition_id

নীতির কোড এখানে:

DECLARE @object_set_id INT
EXEC msdb.dbo.sp_syspolicy_add_object_set @object_set_name=N'Table Names_ObjectSet', @facet=N'IMultipartNameFacet', @object_set_id=@object_set_id OUTPUT
SELECT @object_set_id

DECLARE @target_set_id INT
EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/Sequence', @type=N'SEQUENCE', @enabled=False, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/Sequence', @level_name=N'Sequence', @condition_name=N'', @target_set_level_id=0

EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/StoredProcedure', @type=N'PROCEDURE', @enabled=False, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/StoredProcedure', @level_name=N'StoredProcedure', @condition_name=N'', @target_set_level_id=0

EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/Synonym', @type=N'SYNONYM', @enabled=False, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/Synonym', @level_name=N'Synonym', @condition_name=N'', @target_set_level_id=0

EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/Table', @type=N'TABLE', @enabled=True, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/Table', @level_name=N'Table', @condition_name=N'', @target_set_level_id=0

EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/UserDefinedFunction', @type=N'FUNCTION', @enabled=False, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/UserDefinedFunction', @level_name=N'UserDefinedFunction', @condition_name=N'', @target_set_level_id=0

EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/UserDefinedType', @type=N'TYPE', @enabled=False, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/UserDefinedType', @level_name=N'UserDefinedType', @condition_name=N'', @target_set_level_id=0

EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/View', @type=N'VIEW', @enabled=False, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/View', @level_name=N'View', @condition_name=N'', @target_set_level_id=0

EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'Table Names_ObjectSet', @type_skeleton=N'Server/Database/XmlSchemaCollection', @type=N'XMLSCHEMACOLLECTION', @enabled=False, @target_set_id=@target_set_id OUTPUT
SELECT @target_set_id

EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0
EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database/XmlSchemaCollection', @level_name=N'XmlSchemaCollection', @condition_name=N'', @target_set_level_id=0


GO

DECLARE @policy_id INT
EXEC msdb.dbo.sp_syspolicy_add_policy @name=N'Table Names', @condition_name=N'No Spaces', @policy_category=N'', @description=N'', @help_text=N'', @help_link=N'', @schedule_uid=N'00000000-0000-0000-0000-000000000000', @execution_mode=1, @is_enabled=True, @policy_id=@policy_id OUTPUT, @root_condition_name=N'', @object_set=N'Table Names_ObjectSet'
SELECT @policy_id


GO

এসকিউএল সার্ভার 2012 এবং 2014-এ, এটি প্রত্যাশিত ফলাফল দেয়:

CREATE TABLE [test table]
(Id INT NULL)

নীতি 'সারণীর নামগুলি' SQLSERVER: \ SQL \ LSRSQL07 \ SQL2012 \ ডাটাবেসগুলি \ পরীক্ষার \ টেবিলগুলি \ dbo.test সারণী দ্বারা লঙ্ঘন করা হয়েছে। এই লেনদেনটি আবার ঘুরিয়ে দেওয়া হবে। নীতি শর্ত: '@ নাম পছন্দ করেন না'% [-।]% 'এবং @ নাম পছন্দ করেন না'% [^ এ-জা-জেড-৯ [_]]% '' নীতি বিবরণ: '' অতিরিক্ত সহায়তা: '': '' বিবৃতি: 'টেবিল তৈরি করুন [পরীক্ষার টেবিল] (আইডি IN NULL)'। এমএসজি 3609, স্তর 16, রাজ্য 1, পদ্ধতি এসপি_সিসপলিসি_ডিস্পাচ_সামগ্রী, লাইন 65 [ব্যাচ শুরুর লাইন 48] লেনদেনটি ট্রিগারটিতে শেষ হয়েছে। ব্যাচটি বাতিল করা হয়েছে।

এবং যদি আমি নিম্নলিখিত কোডটি চালাই তবে আমি কোনও ত্রুটি পাই না:

CREATE TABLE [testtable]
(Id INT NULL)

তবে, CREATE TABLEএসকিউএল সার্ভার ২০১ on-তে আমি নীতি সক্ষম হওয়ার সাথে সাথে যদি কোনও বিবৃতি চালিত করি তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

নীতি 'সারণী নামগুলি' SQLSERVER: \ SQL \ LSRSQL07 \ SQL2016 \ ডাটাবেসসমূহ \ পরীক্ষা \ টেবিলগুলি \ dbo.testtable দ্বারা লঙ্ঘন করা হয়েছে। এই লেনদেনটি আবার ঘুরিয়ে দেওয়া হবে। নীতি শর্ত: '@ নাম'% '' পছন্দ করেন না 'নীতির বিবরণ:' 'অতিরিক্ত সহায়তা:' ':' 'বিবৃতি:' টেবিল তৈরি করুন [পরীক্ষামূলক) (আইডি আইএনটি নাল) '। এমএসজি 515, স্তর 16, রাষ্ট্র 2, পদ্ধতি sp_syspolicy_execute_policy, লাইন 69 [ব্যাচ শুরুর লাইন 44] কলাম 'টার্গেট_কোয়ারি_এক্সপ্রেসন' এর মধ্যে NULL মান সন্নিবেশ করা যায় না, সারণী 'msdb.dbo.syspolicy_policy_execution_history_details_intern'; কলামটি নালার অনুমতি দেয় না। INSERT ব্যর্থ হয়। বিবৃতিতে বাতিল করা হয়েছে।

এসকিউএল সার্ভার ২০১ 2016-তে, আমি কোনও টেবিল তৈরি করতে পারি না , এটি শর্তটি পাশ করে কিনা।

এটি এসকিউএল সার্ভার 2016, এসপি 1, সিইউ 3।

এই সম্পর্কে কোন ধারণা?

সম্পাদনা করুন: "পরিবর্তন চলছে: প্রতিরোধ করুন" হতে হলে আমার মূল্যায়ন মোডটি প্রয়োজন

উত্তর:


6

কোনও এসকিউএল সার্ভার 2016 এসপি 1 সিই 2 উদাহরণে স্ক্রিপ্টগুলি পরীক্ষা করেছে এবং মূল্যায়ন মোডটি "চালু করুন: প্রতিরোধ করুন" এ সেট করা থাকলে নীতি কাজ করে। ( একটি বাগ রয়েছে যা আপনাকে নির্দিষ্ট দিকগুলি ব্যবহার করে এমন নীতিগুলি মূল্যায়ন করতে দেয় না)।

এদিকে, আপনি যদি কেবল সারণির নামগুলির জন্য নীতি ব্যবহার করেন তবে আপনি একই কনফিগারেশন ( @NAME NOT LIKE '% %') সহ "মাল্টিপার্টনাম" এর পরিবর্তে "টেবিল বিকল্প" ফ্যাক্টও চেষ্টা করতে পারেন ।


যদি আমি মূল্যায়নের মোডটিকে "অন ডিমান্ড" এ সেট করি তবে এটি কাজ করে, তবে সত্যি কথা বলতে আমি এর আগে চেষ্টা করেছিলাম না। আমি এই পরিবর্তনটি পছন্দ করতে চাই: লোককে টেবিল তৈরি করা থেকে বিরত রাখতে এবং তারপরে খারাপ নামকরণ করা টেবিলগুলিকে উল্লেখ করে সংরক্ষণ করা প্রক্সগুলি সংরক্ষণ করুন।
— জন

আমার জন্য মূল্যায়ন মোডটিকে "অন ডিমান্ডে" সেট করতে এবং নীতিটি ম্যানুয়ালি মূল্যায়নের কাজ করে না। মূল্যায়নটি "চালু করুন: প্রতিরোধ করুন" এ সেট করে এবং সারণী তৈরি করার চেষ্টা করা থাকলে এটি কাজ করে। আপনি সমস্যাটি মাইক্রোসফ্ট সংযোগে পোস্ট করার চেষ্টা করতে পারেন এটি কোনও ত্রুটিযুক্ত কিনা তা সন্ধান করার জন্য।
— ড্রাগগোস

ধন্যবাদ, @ ড্রাগস এটি কি কোনও টেবিলে ঘটছে, এমনকি শর্তটি পার হওয়া উচিত?
— জন

নামে কোনও শ্বেত স্পেস নেই এমন টেবিলগুলি সফলভাবে তৈরি হয়ে যায় এবং যেগুলির সাদা স্পেস রয়েছে তারা নীতি লঙ্ঘনের ত্রুটিতে ব্যর্থ হয়।
— ড্রাগগোস

সঞ্চিত প্রক্রিয়া এবং দৃষ্টিভঙ্গি দেখার সাথে আমাদের একই সমস্যা রয়েছে। আমরা এসকিউএল 2016 এসপি 1 সিই 3 (সর্বশেষ)। জন যেমন বলেছিলেন, এটি একটি ত্রুটির মতো মনে হচ্ছে তবে ভাবছিল যে কেউ যদি কোনও কাজের ভিত্তি বের করতে সক্ষম হয়?
— ডিবিএউজার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.