ডিএমভিগুলি থেকে, আপনি কি বলতে পারবেন কোনও সংযোগ অ্যাপ্লিকেশন-ইনটেন্ট = রিড ওলি ব্যবহার করে?


23

আমার একটি সর্বদা উপলভ্যতা গোষ্ঠী স্থাপন করা আছে এবং আমি নিশ্চিত করতে চাই যে আমার ব্যবহারকারীরা তাদের সংযোগের স্ট্রিংগুলিতে অ্যাপ্লিকেশন-ইনডেন্ট = রিডইনলি ব্যবহার করছে।

এসএমএল সার্ভার থেকে ডিএমভিস (বা বর্ধিত ইভেন্টগুলি বা যাই হোক না কেন) এর মাধ্যমে, আমি কি বলতে পারি যে কোনও ব্যবহারকারী তাদের সংযোগের স্ট্রিংয়ে অ্যাপ্লিকেশন-ইনটেন্ট = রিডইনলি যুক্ত হয়েছে?

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

ধরে নিন যে ব্যবহারকারীদের একাধিক অ্যাপ্লিকেশন রয়েছে। উদাহরণস্বরূপ, বব এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও এবং এক্সেলের সাথে সংযুক্ত রয়েছে। আপডেট করার দরকার পড়লে তিনি এসএসএমএসের সাথে সংযোগ স্থাপন করেন এবং এক্সেল যখন তাঁর পড়া দরকার। তিনি যখন এক্সেলের সাথে সংযোগ স্থাপন করেন তখন কেবলমাত্র তিনি অ্যাপ্লিকেশনস = রিডইনলি ব্যবহার করছেন তা নিশ্চিত করা দরকার। (এটি হুবহু দৃশ্যাবলী নয়, তবে এটি চিত্রিত করার মতো যথেষ্ট কাছাকাছি))


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

2
"কেবল পঠনযোগ্য রাউটিং প্রথমে প্রাথমিকের সাথে সংযোগ করে এবং তারপরে সর্বাধিক উপলব্ধ পঠনযোগ্য মাধ্যমিকের সন্ধান করে" এটি প্রদর্শিত হয় মাধ্যমিক এটি একটি সাধারণ সংযোগ হিসাবে দেখবে। যদি কোনও এক্সএভেন্ট ট্রিগার হয় তবে এটি প্রাথমিক হবে। আমি জানি না আমি কী বিষয়ে কথা বলছি তা অনুমান করছি।
রেমাস রুসানু

1
@ রেমুসরুসানু আপনি sqlserver.read_only_route_completeকেবলমাত্র প্রাথমিকটিতে ট্রিগার হওয়ার কারণে কথা বলছেন ?
কিন শাহ

@ আপনি সেখানে যান, ঠিক যেমন আমার কোডটি ছিল;)
রেমাস রুসানু

2
@ রেমাসরুসানু আমি এটি নিয়ে খেলছিলাম এবং আমি অনুমান করি এটির কাছের যেটি আপনি গোটচেসের সাথে পেতে পারেন - কেবলমাত্র পঠনযোগ্য URL টি সঠিকভাবে কনফিগার করা হয়েছে এবং কোনও সংযোগের সমস্যা নেই। এই দুটি ক্ষেত্রেই সেই ইভেন্টটি সফল হবে।
কিন শাহ

উত্তর:


10

আপ অবচয় sqlserver.read_only_route_completeএক্সটেন্ডেড ইভেন্ট কিন এবং রেমাস উল্লেখ, এটি একটি চমৎকার ডিবাগ ঘটনা, কিন্তু তা সঙ্গে তথ্য একটি মহান চুক্তি বহন করে না - শুধু route_port(যেমন 1433) এবং route_server_name(যেমন sqlserver-0.contoso.com) ডিফল্টভাবে । এটি কেবলমাত্র কেবল পঠনযোগ্য অভিপ্রায় সংযোগটি সফল হয়েছিল তা নির্ধারণে সহায়তা করবে। একটি read_only_route_failইভেন্ট আছে তবে আমি এটিতে আগুন লাগাতে পারিনি, রাউটিং ইউআরএল নিয়ে যদি কোনও সমস্যা ছিল, তখন গৌণ উদাহরণটি অনুপলব্ধ / শাটডাউনটি যতদূর আমি বলতে পারব, তখন এটি আগুন লাগবে না।

sqlserver.loginএটিকে কাজে লাগানোর জন্য কিছু ক্রিয়াকলাপ (যেমন sqlserver.username) এর পাশাপাশি ইভেন্ট এবং কার্যকারিতা ট্র্যাকিং সক্ষম করার সাথে আমার এতে যোগ দেওয়ার কিছুটা সাফল্য ছিল ।

ধাপ পুনর্গঠন কর

প্রাসঙ্গিক ইভেন্টগুলি ট্র্যাক করতে বর্ধিত কার্য ক্রিয়াকলাপ এবং কার্যকারিতা ট্র্যাক করতে একটি বর্ধিত ইভেন্টস সেশন তৈরি করুন:

CREATE EVENT SESSION [xe_watchLoginIntent] ON SERVER 
ADD EVENT sqlserver.login
    ( ACTION ( sqlserver.username ) ),
ADD EVENT sqlserver.read_only_route_complete
    ( ACTION ( 
        sqlserver.client_app_name,
        sqlserver.client_connection_id,
        sqlserver.client_hostname,
        sqlserver.client_pid,
        sqlserver.context_info,
        sqlserver.database_id,
        sqlserver.database_name,
        sqlserver.username 
        ) ),
ADD EVENT sqlserver.read_only_route_fail
    ( ACTION ( 
        sqlserver.client_app_name,
        sqlserver.client_connection_id,
        sqlserver.client_hostname,
        sqlserver.client_pid,
        sqlserver.context_info,
        sqlserver.database_id,
        sqlserver.database_name,
        sqlserver.username 
        ) )
ADD TARGET package0.event_file( SET filename = N'xe_watchLoginIntent' )
WITH ( 
    MAX_MEMORY = 4096 KB, 
    EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, 
    MAX_DISPATCH_LATENCY = 30 SECONDS,
    MAX_EVENT_SIZE = 0 KB, 
    MEMORY_PARTITION_MODE = NONE, 
    TRACK_CAUSALITY = ON,   --<-- relate events
    STARTUP_STATE = ON      --<-- ensure sessions starts after failover
)

এক্সই অধিবেশন চালান (এটি একটি ডিবাগ ইভেন্ট হিসাবে নমুনা বিবেচনা করুন) এবং কিছু লগইন সংগ্রহ করুন:

sqlcmd সংযোগগুলি

এখানে নোট করুন স্কেলসার্ভার -0 হ'ল আমার পঠনযোগ্য মাধ্যমিক এবং স্ক্যালসারভার -১ প্রাথমিক। এখানে আমি কেবল-পঠনযোগ্য অ্যাপ্লিকেশন অভিপ্রায় লগইন এবং কিছু এসকিউএল লগইন অনুকরণ করতে -Kস্যুইচ ব্যবহার করছি sqlcmd। কেবলমাত্র পঠনযোগ্য ইভেন্টটি সফলভাবে পঠনযোগ্য উদ্দেশ্য লগইনে আগুন ধরে।

অধিবেশন বিরতি বা থামানোর সময় আমি এটি জিজ্ঞাসা করতে পারি এবং দুটি ইভেন্টের লিঙ্ক করার চেষ্টা করতে পারি, যেমন:

DROP TABLE IF EXISTS #tmp

SELECT IDENTITY( INT, 1, 1 ) rowId, file_offset, CAST( event_data AS XML ) AS event_data
INTO #tmp
FROM sys.fn_xe_file_target_read_file( 'xe_watchLoginIntent*.xel', NULL, NULL, NULL )

ALTER TABLE #tmp ADD PRIMARY KEY ( rowId );
CREATE PRIMARY XML INDEX _pxmlidx_tmp ON #tmp ( event_data );


-- Pair up the login and read_only_route_complete events via xxx
DROP TABLE IF EXISTS #users

SELECT
    rowId,
    event_data.value('(event/@timestamp)[1]', 'DATETIME2' ) AS [timestamp],
    event_data.value('(event/action[@name="username"]/value/text())[1]', 'VARCHAR(100)' ) AS username,
    event_data.value('(event/action[@name="attach_activity_id_xfer"]/value/text())[1]', 'VARCHAR(100)' ) AS attach_activity_id_xfer,
    event_data.value('(event/action[@name="attach_activity_id"]/value/text())[1]', 'VARCHAR(100)' ) AS attach_activity_id
INTO #users
FROM #tmp l
WHERE l.event_data.exist('event[@name="login"]') = 1
  AND l.event_data.exist('(event/action[@name="username"]/value/text())[. = "SqlUserShouldBeReadOnly"]') = 1


DROP TABLE IF EXISTS #readonly

SELECT *,
    event_data.value('(event/@timestamp)[1]', 'DATETIME2' ) AS [timestamp],
    event_data.value('(event/data[@name="route_port"]/value/text())[1]', 'INT' ) AS route_port,
    event_data.value('(event/data[@name="route_server_name"]/value/text())[1]', 'VARCHAR(100)' ) AS route_server_name,
    event_data.value('(event/action[@name="username"]/value/text())[1]', 'VARCHAR(100)' ) AS username,
    event_data.value('(event/action[@name="client_app_name"]/value/text())[1]', 'VARCHAR(100)' ) AS client_app_name,
    event_data.value('(event/action[@name="attach_activity_id_xfer"]/value/text())[1]', 'VARCHAR(100)' ) AS attach_activity_id_xfer,
    event_data.value('(event/action[@name="attach_activity_id"]/value/text())[1]', 'VARCHAR(100)' ) AS attach_activity_id
INTO #readonly
FROM #tmp
WHERE event_data.exist('event[@name="read_only_route_complete"]') = 1


SELECT *
FROM #users u
    LEFT JOIN #readonly r ON u.attach_activity_id_xfer = r.attach_activity_id_xfer

SELECT u.username, COUNT(*) AS logins, COUNT( DISTINCT r.rowId ) AS records
FROM #users u
    LEFT JOIN #readonly r ON u.attach_activity_id_xfer = r.attach_activity_id_xfer
GROUP BY u.username

কোয়েরিতে অ্যাপ্লিকেশন কেবল পঠনযোগ্য অভিপ্রায় ছাড়াই এবং লগইনগুলি প্রদর্শন করা উচিত:

অনুসন্ধান ফলাফল

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

    ALTER EVENT SESSION [xe_watchLoginIntent] ON SERVER
    ADD TARGET package0.pair_matching ( 
        SET begin_event = N'sqlserver.login',
            begin_matching_actions = N'sqlserver.username',
            end_event = N'sqlserver.read_only_route_complete',
            end_matching_actions = N'sqlserver.username'
        )

5

না, এটা মনে হয় না কোন না DMV-উদ্ভাসিত সংযোগ সম্পত্তি (হয় সেখানে যে sys.dm_exec_connections বা sys.dm_exec_sessions ) অথবা এমনকি CONNECTIONPROPERTY যে সম্পর্ক ApplicationIntentConnectionString শব্দ।

যাইহোক, মাইক্রোসফ্ট কানেক্টের মাধ্যমে এটি অনুরোধ করার উপযুক্ত যে এটি sys.dm_exec_connectionsএসএমএল সার্ভারের স্মৃতিতে কোথাও সঞ্চিত সংযোগের সম্পত্তি বলে মনে হচ্ছে এই সম্পত্তিটি ডিএমভিতে যুক্ত করা হবে , নিম্নলিখিত তথ্যের উপর ভিত্তি করে এমএসডিএন পৃষ্ঠায় পাওয়া তথ্য উচ্চ প্রাপ্যতা, দুর্যোগ পুনরুদ্ধারের জন্য স্ক্যালক্লিয়েন্ট সহায়তা (ইটালিকাইজড জোর খনি):

অ্যাপ্লিকেশন উদ্দিষ্ট নির্দিষ্ট করা হচ্ছে

যখন অ্যাপ্লিকেশনসেন্ট = কেবলমাত্র পঠনযোগ্য , ক্লায়েন্ট যখন ওভারলিওএন সক্ষম ডাটাবেসের সাথে সংযুক্ত থাকে তখন একটি পড়ার কাজের চাপের জন্য অনুরোধ করে। সার্ভার সংযোগের সময় এবং কোনও ইউএসই ডাটাবেস বিবৃতি দেওয়ার সময় কেবলমাত্র সর্বদা চালু সক্ষম ডেটাবেসগুলিতে অভিপ্রায়টি কার্যকর করে।

যদি কোনও USEবিবৃতি যাচাই করা যায়, তবে ApplicationIntentপ্রাথমিক সংযোগের প্রচেষ্টা ছাড়াই প্রয়োজন থাকা প্রয়োজন। তবে আমি ব্যক্তিগতভাবে এই আচরণটি যাচাই করি নি।


পিএস আমি ভাবছিলাম যে আমরা সত্যগুলি ব্যবহার করতে পারি যে:

  • প্রাথমিক প্রতিলিপিটি এক বা একাধিক ডেটাবেসগুলিতে পঠনযোগ্য অ্যাক্সেসকে নিষ্ক্রিয় করতে সেট করা যেতে পারে এবং
  • "উদ্দেশ্য" কার্যকর করা হবে যখন কোনও USEবিবৃতি কার্যকর করা হয়।

ধারণাটি ছিল কেবলমাত্র এই সেটিংটি পরীক্ষা ও ট্র্যাক করার উদ্দেশ্যে একটি নতুন ডাটাবেস তৈরি করা। নতুন ডিবি একটি নতুন উপলভ্যতা গোষ্ঠীতে ব্যবহৃত হবে যা কেবল READ_WRITEসংযোগের অনুমতি দেওয়ার জন্য সেট করা হবে । তত্ত্বটি হ'ল লগন ট্রিগারটির ভিতরে, EXEC(N'USE [ReadWriteOnly]; INSERT INTO LogTable...;');একটি TRY...CATCHনির্মাণের মধ্যে একটি , CATCHব্লকের মধ্যে মূলত কিছুই না থাকলে , হয় রাইডরাইট সংযোগগুলির জন্য কোনও ত্রুটি তৈরি করতে পারে না (যা তাদেরকে নতুন ডিবিতে লগ করবে), অথবা কেবলমাত্র USEপঠন সংযোগে ত্রুটি ঘটবে, তবে তবুও ত্রুটি ধরা এবং উপেক্ষা করা হওয়ার কারণে কিছুই ঘটবে না (এবং INSERTবিবৃতিটি কখনই পৌঁছাতে পারে না)। উভয় ক্ষেত্রেই, আসল লগন ইভেন্টটিকে আটকানো / অস্বীকার করা হবে না । লগন ট্রিগার কোড কার্যকরভাবে হবে:

BEGIN TRY
    EXEC(N'
        USE [ApplicationIntentTracking];
        INSERT INTO dbo.ReadWriteLog (column_list)
          SELECT sess.some_columns, conn.other_columns
          FROM   sys.dm_exec_connections conn
          INNER JOIN sys.dm_exec_sessions sess
                  ON sess.[session_id] = conn.[session_id]
          WHERE   conn.[session_id] = @@SPID;
        ');
END TRY
BEGIN CATCH
    DECLARE @DoNothing INT;
END CATCH;

দুর্ভাগ্যবশত, যখন একটি জারি প্রভাব পরীক্ষা USEএকটি মধ্যে বিবৃতি EXEC()একটি মধ্যে TRY...CATCHএকটি লেনদেনের ভিতরে, আমি দেখেছি যে এক্সেস লঙ্ঘন একটি ব্যাচ-স্তরের পরিত্যাগ, না একটি বিবৃতি পর্যায়ের পরিত্যাগ করেন। এবং সেটিং XACT_ABORT OFFকিছুই পরিবর্তন হয়নি। এমনকি আমি ব্যবহারের জন্য একটি সাধারণ এসকিউএলসিআরআর সঞ্চিত পদ্ধতি তৈরি করেছিলাম Context Connection = true;এবং তারপরে একটিটির SqlConnection.ChangeDatabase()মধ্যে ডেকে আনে try...catchএবং লেনদেনটি এখনও বাতিল ছিল। এবং আপনি Enlist=falseপ্রসঙ্গ সংযোগ ব্যবহার করতে পারবেন না । এবং এসকিউএলসিআরআর-এ নিয়মিত / বাহ্যিক সংযোগ ব্যবহারের মাধ্যমে লেনদেনের বাইরের দিকে পদক্ষেপ নিতে সহায়তা করবে না কারণ এটি সম্পূর্ণ নতুন সংযোগ হবে।

একটি খুব, খুব পাতলা সম্ভাবনা রয়েছে যে বিবৃতিটির পরিবর্তে HAS_DBACCESS ব্যবহার করা যেতে পারে USE, তবে এটি বর্তমান সংযোগের তথ্যটি তার চেকগুলিতে অন্তর্ভুক্ত করতে সক্ষম হওয়ার জন্য আমার খুব বেশি আশা নেই। তবে আমার এটি পরীক্ষা করার কোনও উপায় নেই।

অবশ্যই, যদি কোনও ট্রেস পতাকা থাকে যা অ্যাক্সেস লঙ্ঘনকে ব্যাচ-গর্ভপাত বন্ধ না করে দিতে পারে, তবে উপরে উল্লিখিত পরিকল্পনার কাজ করা উচিত ;-)।


দুর্ভাগ্যক্রমে, আমি তাদের অস্বীকার করতে পারি না - অন্যান্য পাঠযোগ্য রেপ্লিকাগুলি ডাউন হতে পারে। প্রাথমিকটিতে কাজ করার জন্য এখনও আমার পড়ার প্রশ্নগুলি দরকার - সেগুলি কখন ঘটছে তা আমার কেবল জানতে হবে।
ব্রেন্ট ওজার

@ ব্রেন্টওজার আমি একটি নতুন পদক্ষেপ 3 অন্তর্ভুক্ত করার জন্য আমার উত্তরটি আপডেট করেছি যা এই শর্তটি পরীক্ষা করবে এবং যদি সেখানে সেকেন্ডারি নেই, তবে এটি সংযোগের অনুমতি দেবে। এছাড়াও, যদি অভিপ্রায়টি এখনও "আপনার ঘটনাটি ঘটছে তা জানতে" থাকে তবে একই সেটআপটি ব্যবহার করা যেতে পারে, কেবল ROLLBACKলগইন ট্রিগারটিতে INSERTএকটি লগ টেবিলটিতে পরিবর্তন করুন :-)
সলোমন রুটজকি

1
এটি একটি দুর্দান্ত উত্তর, কিন্তু এটি এই প্রশ্নের জন্য নয়। আমার ব্যবহারকারীদের থামার দরকার নেই, কখন এটি ঘটছে তা পর্যবেক্ষণ করা দরকার। আমাদের বিদ্যমান অ্যাপ্লিকেশন রয়েছে যা আমাদের ধীরে ধীরে পয়েন্টপয়েন্ট করে ঠিক করতে হবে। আমি যদি ব্যবহারকারীদের লগ ইন করা বন্ধ করে দিয়েছিলাম তবে এটি তাত্ক্ষণিকভাবে বিদ্রোহের কারণ হতে পারে। আপনি যদি এর জন্য একটি পৃথক প্রশ্ন তৈরি করতে চান এবং আপনার উত্তরটি সেখানে পোস্ট করতে চান তবে দুর্দান্ত লাগবে - তবে দয়া করে আপনার উত্তরটি এখানে আমার আসল প্রশ্নে ফোকাস করুন। ধন্যবাদ।
ব্রেন্ট ওজার

@ ব্রেন্টওজার দুঃখিত, আমি টমকে আপনার মন্তব্যটি ভুল ধারণা বুঝিয়েছি যার অর্থ কেবল ট্র্যাকিং / লগিংয়ের চেয়ে কিছুটা শক্তিশালী as অ্যাক্সেস রোধ করার ক্ষেত্রে আমার উত্তরের সেই অংশটি আমি সরিয়েছি।
সলোমন রুটজকি

@ ব্রেন্টওজার আমি লাইনের নীচে কিছু কিছু নোট যুক্ত করেছি (পিএস বিভাগে) যা সমাধান হওয়ার খুব কাছাকাছি ছিল, তবে একেবারে শেষে ব্যর্থ হয়েছিল। আমি এই নোটগুলি পোস্ট করেছিলাম যদি এটি আপনার (বা অন্য কারও) কাছে অনুপস্থিত টুকরো বা এমনকি সম্পূর্ণ আলাদা কিছু নিয়ে আসে, যাতে এই ধাঁধাটি সমাধান হতে পারে idea
সলোমন রুটজকি

2

আপনি কতটা অসুস্থ হতে চান? টিডিএস স্ট্রিমটি প্রক্সির পক্ষে এতটা কঠিন নয়, আমরা এটি আমাদের সস অ্যাপ্লিকেশনটির জন্য করেছি। আপনি যে বিটটি খুঁজছেন (আক্ষরিকভাবে খানিকটা) লগইন 7 বার্তায় রয়েছে। আপনি আপনার ব্যবহারকারীদের একটি প্রক্সি মাধ্যমে সংযুক্ত হতে এবং সেখানে কিছুটা লগ / প্রয়োগ করতে পারেন। জাহান্নাম, আপনি তাদের জন্য এটি চালু করতে পারেন। :)


আমি হতে চাই এটি অবশ্যই আরও অসুস্থ, তবে ধন্যবাদ, হাহাহাহা।
ব্রেন্ট ওজার

-1

আপনার অ্যাপ্লিকেশনটি কোনও পরিষেবা অ্যাকাউন্ট বা একাধিক পরিষেবা অ্যাকাউন্ট ব্যবহার করে? যদি তা হয় তবে আপনার লগইন ট্র্যাফিক নিরীক্ষণের জন্য বর্ধিত ইভেন্টটি ব্যবহার করুন তবে সর্বদা চালু থাকা সার্ভারে আপনার পরিষেবা অ্যাকাউন্টগুলি বাদ দিন। আপনারা এখন দেখতে পারা উচিত যে কে সর্বদা চালু থাকা সার্ভারে লগ ইন করছে এবং কেবলমাত্র পঠন গৌণ সংযোগ স্ট্রিংটি ব্যবহার করছে না। আমি অলওয়েজ-অন ইনস্টল করার জন্য প্রস্তুত হয়ে যাচ্ছি এবং আপনি যা না বললে এটি কাজ করবে না আমি এই কাজটি করতে যাচ্ছি।


1
টম - ধরে নিন যে ব্যবহারকারীদের একাধিক অ্যাপ্লিকেশন রয়েছে। উদাহরণস্বরূপ, বব এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও এবং এক্সেলের সাথে সংযোগ স্থাপন করে। আপডেট করার দরকার পড়লে তিনি এসএসএমএসের সাথে সংযোগ স্থাপন করেন এবং এক্সেল যখন তাঁর পড়া দরকার। তিনি যখন এক্সেলের সাথে সংযোগ স্থাপন করেন তখন কেবলমাত্র তিনি অ্যাপ্লিকেশনস = রিডইনলি ব্যবহার করছেন তা নিশ্চিত করা দরকার। (এটি হুবহু দৃশ্যের নয়, তবে এটি চিত্রিত করার পক্ষে যথেষ্ট কাছে close)
ব্রেন্ট ওজার

আমার কাছে খুব সীমিত অ্যাক্সেস সহ লোকেরাও আমার প্রোডাকশন সার্ভারে এক্সেলের সাথে সংযুক্ত রয়েছে। তারা তাদের অধিকারের সাথে সংযুক্ত থাকে। আমি তাদের দেখতে সক্ষম হবে আশা করি। আমরা শীঘ্রই আমাদের সর্বদা চালু করব।
আর্মোরড্বা

-1

দুর্ভাগ্যক্রমে আমার কাছে নিম্নলিখিতটি পরীক্ষা করার মতো পরিবেশ নেই এবং নিঃসন্দেহে বেশ কয়েকটি পয়েন্ট রয়েছে যেখানে এটি ব্যর্থ হতে পারে, তবে আমি এটির মূল্য এখানে রেখে দেব।

একটি সিএলআর সঞ্চিত পদ্ধতিটিতে new SqlConnection("context connection=true")কনস্ট্রাক্টের মাধ্যমে বর্তমান সংযোগটিতে অ্যাক্সেস রয়েছে ( এখান থেকে নেওয়া )। স্কেল সংযোগ প্রকারটি একটি কানেকশনস্ট্রিং সম্পত্তি প্রকাশ করে । যেহেতু অ্যাপ্লিকেশনসেন্টটি প্রাথমিক সংযোগের স্ট্রিংয়ের মধ্যে রয়েছে বলে আমি মনে করি এটি এই সম্পত্তিটিতে উপলব্ধ হবে এবং পার্স করা যাবে। সেই শৃঙ্খলে অবশ্যই অনেকগুলি হ্যান্ড অফ রয়েছে, অবশ্যই, এটি সকলের জন্য নাশপাতি আকারের হওয়ার প্রচুর সুযোগ রয়েছে।

এটি কোনও লগন ট্রিগার থেকে চালিত হবে এবং প্রয়োজনীয় মানগুলি প্রয়োজনীয় হিসাবে স্থির থাকবে।


1
এটি কাজ করবে না। এসকিউএলসিআরআর কোডটির বর্তমান সংযোগটিতে অ্যাক্সেস নেই, প্রসঙ্গ সংযোগের মাধ্যমে বর্তমান সেশনে এটির অ্যাক্সেস রয়েছে। .NET কোডের SQLlC কানেকশন অবজেক্টটি মূল ক্লায়েন্ট সফ্টওয়্যার থেকে এসকিউএল সার্ভারে তৈরি প্রকৃত সংযোগটিতে আলতো চাপছে না। এগুলি দুটি পৃথক জিনিস।
সলোমন রুটজকি

ওহ ভাল, কিছু মনে করবেন না।
মাইকেল গ্রীন

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