que - no igual en sas
Para un conjunto de datos SAS, ¿cuál es la mejor manera de evitar el bloqueo para el acceso de múltiples usuarios (1)
Gracias por leer esto
Estoy utilizando un servicio compartido (server = sharedLib) al configurar mi libref, para permitir a los usuarios de mi aplicación SAS / IntrNet modificar y actualizar (agregar nuevos) registros de un solo conjunto de datos. La aplicación también se usará para consultar mi conjunto de datos. Para minimizar el bloqueo, solo estoy usando un paso de datos para modificar y actualizar en lugar de SQL Proc (que bloquea todo el miembro). Sin embargo, me pregunto si el bloqueo es más o menos probable si solo actualizar / modificar el acceso a los datos utiliza el servicio compartido, pero las consultas no lo hacen.
%if &type=QUERY %then %do ;
LIBNAME lib ''/myServer/library'' ;
%end ;
%else %do ;
LIBNAME lib ''/myServer/library'' server=shareLib ;
%end;
este no es mi código real, pero sí sé si la solicitud solo enviará datos o modificará un registro existente o agregará un nuevo registro (actualización);
Originalmente, hice esta distinción porque estábamos teniendo algunas fallas conectadas al servicio compartido (no estoy seguro de que sea la terminología correcta), pero hacer referencia a la lib para consultar los datos no falló. Desde entonces tenemos, creo que resolvió este problema, pero me pregunto si me estoy preparando para problemas.
Gracias
Dado que su pregunta es más como una solicitud de asesoramiento general sobre acceso a datos y concurrencia en SAS, mi respuesta se formará como un consejo general, más que una solución específica.
Hay excelentes documentaciones en línea de SAS. Visite el índice y encuentre la información relevante para su posterior lectura.
- Por favor, eche un vistazo a la opción de nombre de
ACCESS=READONLY
"ACCESS=READONLY
". Hace más o menos lo que dice, a saber, restringir el acceso a los miembros de datos en el nombre de lib para que sea de solo lectura. Esto tiene el beneficio de que usted no altera sus datos por accidente durante una consulta no alterada. También permite a SAS dejar espacio para consultas de modificación de datos para obtener mayores niveles de control sobre los datos. - SAS / SHARE permite el acceso a datos simultáneos, por lo que si necesita proporcionar acceso simultáneo (lectura / escritura) a los mismos datos, SAS / SHARE es una buena opción. Significa que puede salirse con la suya asignando su nombre de libra solo una vez, dando a su declaración de nombre de lib la opción "
SERVER=SHARELIB
", y tener acceso de datos concurrente a SAS / SHARE. Si asigna el nombre de la libra al proceso del servidor SAS / SHARE, todos los procesos SAS posteriores que necesiten acceso a este nombre solo deben asignar el nombre de la libra como"LIBNAME LIB SERVER=SHARELIB"
(tenga en cuenta que no existe una ruta física: el proceso del servidor SAS / SHARE se encarga de eso). Esta configuración funciona mejor si tiene un proceso SAS separado para su servidor SAS / SHARE. - También puede bloquear su nombre de lib con la instrucción LOCK o el comando LOCK. Esto significa que su programa SAS puede garantizar derechos de acceso exclusivos a un nombre de lib, en caso de que eso sea lo que necesita. Otros procesos SAS pueden usar el comando de bloqueo para consultar un nombre de libra específico y ver si puede obtener acceso (exclusivo).
- También puede controlar el acceso en el nivel de miembro de datos. Esto se hace con la opción de conjunto de datos CNTLLEV. Por ejemplo, "
DATA LIB.MYDATA(CNTLLEV=LIB);
" especifica que el control de acceso está en el nivel de la biblioteca, restringiendo el acceso simultáneo a solo un proceso de actualización a la biblioteca.CNTLLEV=MEM
yCNTLLEV=REC
restringe el acceso concurrente a nivel de miembro y nivel de registro respectivamente.
Estas opciones se pueden combinar de muchas formas diferentes, dando mucho espacio para que pueda acceder de la manera más precisa que necesite. Espero que estas elecciones te ayuden a completar tu tarea.