এসকিউএল সার্ভার 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.