2009-02-21 18 views
5

Grazie per aver letto questo.Per un set di dati SAS, qual è il modo migliore per impedire il blocco per l'accesso a più utenti

Sto utilizzando un servizio condiviso (server = sharedLib) durante l'impostazione della mia libref, per consentire agli utenti della mia applicazione SAS/IntrNet di modificare e aggiornare (aggiungere nuovi) record di un singolo set di dati. L'applicazione verrà anche utilizzata per interrogare il mio set di dati. Per ridurre al minimo il blocco, sto solo utilizzando un passaggio di dati per modificare e aggiornare piuttosto che Proc SQL (che blocca l'intero membro). Tuttavia, mi chiedo se il blocco è più o meno probabile se solo l'aggiornamento/modifica dell'accesso ai dati utilizza il servizio di condivisione, ma le query non lo fanno.

%if &type=QUERY %then %do ; 
LIBNAME lib '/myServer/library' ; 
%end ; 
%else %do ; 
LIBNAME lib '/myServer/library' server=shareLib ; 
%end; 

questo non è il mio codice vero e proprio, ma so se la richiesta sta per inviare solo i dati di nuovo o modificare un record esistente o di aggiungere un nuovo record (aggiornamento);

Avevo originariamente fatto questa distinzione perché stavamo avendo alcuni errori collegati al servizio di condivisione (non sono sicuro che sia la terminologia corretta), ma il riferimento alla lib per interrogare i dati non ha avuto esito negativo. Da allora abbiamo, penso, risolto questo problema, ma mi chiedo se mi sto preparando per i problemi.

Grazie

risposta

7

Dal momento che la tua domanda è più simile a una richiesta di consigli generali in materia di accesso dei dati e la concorrenza in SAS, la mia risposta sarà formata come consiglio generale, più di una soluzione specifica.

Esistono eccellenti documentazioni online SAS. Visita la pagina the index e trova le informazioni rilevanti per la tua ulteriore lettura.

  1. Si prega di dare un'occhiata all'opzione libname "ACCESS=READONLY". Fa praticamente quello che dice, vale a dire limitare l'accesso ai membri dei dati nel libname per essere di sola lettura. Ciò comporta il vantaggio di non alterare i dati per errore durante una query non alterata. Consente inoltre a SAS di lasciare un margine di spazio per la modifica dei dati delle query per ottenere livelli più elevati di controllo sui dati.
  2. SAS/SHARE abilita l'accesso simultaneo ai dati, quindi se è necessario fornire accesso simultaneo (lettura/scrittura) agli stessi dati, SAS/SHARE è una buona scelta. Significa che puoi farla franca assegnando il tuo libname una sola volta, dando la tua istruzione libname all'opzione "SERVER=SHARELIB", e hai SAS/SHARE a gestire l'accesso simultaneo ai dati. Se si assegna il nome di libname al processo del server SAS/SHARE, tutti i processi SAS successivi che necessitano dell'accesso a questo libname devono solo assegnare il nome di libname come "LIBNAME LIB SERVER=SHARELIB" (nota che non esiste un percorso fisico - il processo SAS/SHARE del server si occupa di ciò). Questa configurazione funziona al meglio se si dispone di un processo SAS separato per il server SAS/SHARE.
  3. Puoi anche bloccare il tuo libname con l'istruzione LOCK o il comando LOCK. Ciò significa che il tuo programma SAS può garantirsi diritti di accesso esclusivi a un libname, nel caso in cui sia ciò di cui hai bisogno. Altri processi SAS possono quindi utilizzare il comando di blocco per eseguire una query su un libname specifico e vedere se può ottenere l'accesso (esclusivo).
  4. È inoltre possibile controllare l'accesso a livello di membro dati. Questo viene fatto con l'opzione di set di dati CNTLLEV. Ad esempio "DATA LIB.MYDATA(CNTLLEV=LIB);" specifica che il controllo di accesso è a livello di libreria, limitando l'accesso simultaneo a un solo processo di aggiornamento alla libreria. CNTLLEV=MEM e CNTLLEV=REC restringono l'accesso simultaneo a livello di membro e livello di record rispettivamente.

Queste opzioni possono essere combinate in molti modi diversi, dando molto spazio per rendere l'accesso a grana fine quanto necessario. Spero che queste scelte ti aiutino a completare il tuo compito.

+0

Grazie per la risposta –

Problemi correlati