Jake, does this mean that if we are using direct connects that your method of deleting old/orphan SID/SPID's at the SQL level is okay? We stop and restart our services every night and from what I can see of the processes, we have a bunch of orphans from yesterday out there in addition to the ones that started this morning. Will running this command clear those out? Thanks.
Brent,It looks like you are connecting to you SDE geodatabase using an ArcSDE service. Have you considered using a direct connection? This is usually the recommended way to connect an SDE geodatabase.
Unfortunately I had to remove the "answered". While you can remove the database reference to the user and remove him from the list of "Sdemon -o info -I users". Deleting the line from the database does NOT remove the GSRVR.EXE that the user is using. Eventually you get enough of them and SDE refuses any more connections -- Even if it says you only have 12 users on the instance.Sorry Jake, but your solution doesn't work. Brent
Thanks for the tip, Jake. I've been familiar with this table but didn't know if it was safe/acceptable to just delete rows for old connections or if I needed to go the sdemon -o kill route.
You can execute the following cleanup procedure to purge those rows if it is a concern (but the software will do it when it needs to anyhow) so you do NOT need to shutdown your ArcSDE instance - set SERVEROUTPUT ON DECLARE CURSOR process_list IS SELECT sde_id, owner, nodename FROM sde.process_information; lock_name VARCHAR2(30); lock_handle VARCHAR2(128); lock_status INTEGER; cnt INTEGER DEFAULT 0; BEGIN FOR check_locks IN process_list LOOP lock_name := 'SDE_Connection_ID#' || TO_CHAR (check_locks.sde_id); DBMS_LOCK.ALLOCATE_UNIQUE (lock_name,lock_handle); lock_status := DBMS_LOCK.REQUEST (lock_handle,DBMS_LOCK.X_MODE,0,TRUE); IF lock_status = 0 THEN DELETE FROM sde.process_information WHERE sde_id = check_locks.sde_id; DELETE FROM sde.state_locks WHERE sde_id = check_locks.sde_id; DELETE FROM sde.table_locks WHERE sde_id = check_locks.sde_id; DELETE FROM sde.object_locks WHERE sde_id = check_locks.sde_id; DELETE FROM sde.layer_locks WHERE sde_id = check_locks.sde_id; cnt := cnt + 1; dbms_output.put_line('Removed entry ('||check_locks.sde_id||'): '||check_locks.owner||'/'||check_locks.nodename||''); END IF; END LOOP; DELETE FROM sde.process_information WHERE sde_id NOT IN (SELECT sde_id FROM sde.process_information); DELETE FROM sde.state_locks WHERE sde_id NOT IN (SELECT sde_id FROM sde.process_information); DELETE FROM sde.table_locks WHERE sde_id NOT IN (SELECT sde_id FROM sde.process_information); DELETE FROM sde.object_locks WHERE sde_id NOT IN (SELECT sde_id FROM sde.process_information); DELETE FROM sde.layer_locks WHERE sde_id NOT IN (SELECT sde_id FROM sde.process_information); COMMIT; dbms_output.put_line('Removed '||cnt||' entries.'); END; / This script is also beneficial for cleaning out the process_inforamation table.
It may be best to delete the entries from the 'sde.sde_process_information' table. What database are using (Oracle, SQL Server, PostgreSQL,...)?
delete from sde.SDE_process_information where start_time < (select getdate() - 1)
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.