আরকপাইয়ের সাথে একচেটিয়া স্কিমা লক ত্রুটিটি এড়ানো হচ্ছে?


11

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

ExecuteError: ERROR 000464: Cannot get exclusive schema lock. 
              Either being edited or in use by another application.

আমি কি কিছু কমান্ডের মাধ্যমে, ফাইলগুলি অনুলিপি করে, এমনকি কিছু ব্যবহারকারীর দ্বারা খোলার জন্য ফাইটন স্ক্রিপ্টটি জোর করতে পারি? স্ক্রিপ্টটি চালানোর আগে আমি কি আমার ডাটাবেসে সমস্ত সংযোগগুলি নামিয়ে রাখতে পারি?


1
এটি একটি আরকি / আর্কিগিসিপিটিং ত্রুটি বলে মনে হচ্ছে। আপনি কোনটি ব্যবহার করছেন এবং কোন ডেটাবেস ব্যবহার করছেন তা দয়া করে নিশ্চিত করুন।
blah238

উত্তর:


5

আমি মনে করি আপনি এসডিইয়ের সাথে কাজ করছেন।

sdemonকমান্ড-লাইন সরঞ্জামটি ব্যবহার করে আপনার সমস্ত সংযোগ বন্ধ করা উচিত ।

  1. আপনি যদি স্ক্রিপ্টটি চালাচ্ছেন সেখানে পিসিতে যদি কোনও আরকিএসডিই ইনস্টল থাকে তবে আপনি sdemon -o killসমস্ত সংযোগকে মেরে ফেলতে স্থানীয়ভাবে কার্যকর করতে পারেন । এই সহায়তার বিষয়টি একবার দেখুন । আমি নিশ্চিত না যে এটি 10.0-এ সরাসরি সংযোগগুলি হত্যা করছে। আমার মনে আছে এটি 9.3 এ এক ধরণের সমস্যা ছিল এবং এটি অবশ্যই 10.1 তে সরাসরি সংযোগগুলি হত্যা করছে।
  2. যদি আপনার কাছে আরকিএসডিই ইনস্টল না থাকে এবং এটি কেবল একটি পৃথক সার্ভারে চলমান থাকে তবে আপনি পাইথন থেকে দূরবর্তীভাবে এই কমান্ডটি কার্যকর করতে পারেন। এই বিষয়ে কিছু আলোচনা আছে ।

হ্যাঁ, আমি এসডিই ব্যবহার করছি (কোনও সার্ভারে ইনস্টলড)। কিন্তু "sdemon -o হত্যা" কমান্ড একটি সিনট্যাক্স ত্রুটি ফিরিয়ে দিয়েছে।
অ্যাভেরচি

আর্কেএসডিইতে sdemon কমান্ডটি কার্যকর করতে হবে। আমি কি এটি আমার পাইথন স্ক্রিপ্টে রাখতে পারি?
অ্যাভেরচি


2
কমান্ড sdemon -o killযথেষ্ট নয়। আপনার অতিরিক্ত পরামিতিগুলি পাস করতে হবে, সরবরাহিত লিঙ্কটি একবার দেখুন ।
অ্যালেক্স মার্কভ

2

আরেকটি সম্ভাবনা যেহেতু আপনি বলেন আপনি SDE ব্যবহার করছেন থেকে ভাগ কেশ মুছতে হয় layer_locksএবং table_locksটেবিল এসকিউএল, পিএল / এসকিউএল, টি-এসকিউএল, ইত্যাদি যেমন ব্যবহার করছে:

DELETE FROM TABLE_LOCKS WHERE SDE_ID = :b1 AND REGISTRATION_ID = :b2

আমি অবশ্যই কোনও সংস্করণযুক্ত জিওডাটাবেজে এই পদ্ধতির সুপারিশ করব না। আরও দেখুন: আর্কএসডিই এবং জিওডাটাবেজে বিভিন্ন লক প্রক্রিয়া কীভাবে প্রয়োগ করা হয়?


2

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

উপরের লিঙ্ক থেকে উদাহরণ খুব দরকারী:

import arcpy

admin_workspace = "Database Connections/tenone@sde.sde"
arcpy.env.workspace = admin_workspace
user_name = "GDB"

# Look through the users in the connected user list and get the SDE ID.
# Use the SDE ID to disconnect the user that matches the username variable
users = arcpy.ListUsers() # The environment is set, no workspace is needed.
for item in users:
    if item.Name == user_name:
        arcpy.DisconnectUser(admin_workspace, item.ID)

আমি এটি চালিয়েছি এবং এটি আমার বর্তমান সেশনআইডি-তে আঘাত না হওয়া এবং ত্রুটি না ছোঁড়া পর্যন্ত কাজ করে চলেছে seemed ব্যবহারকারীদের মধ্য দিয়ে লুপ করার এবং বর্তমান ব্যবহারকারীর (যদি আইটেম.নাম == 'ডিবিও' এবং আইটেম.আইডি! = <বর্তমান ব্যবহারকারীর সেশন আইডি>) এড়ানোর কোনও উপায় আছে? আমি বর্তমান ব্যবহারকারীর সেশন আইডি খুঁজে বের করার কোনও উপায় খুঁজে পাচ্ছি না।
মিঃওয়াকার

0

আমি পোস্টগ্রেস্কল এর সাথে খুব বেশি পরিচিত নই তবে আমি মনে করি এই পোস্টটি আপনাকে সঠিক দিকে নিয়ে যেতে পারে:

/programming/5108876/kill-a-postgresql-session-connection

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