Créer une caslib Oracle
Si vous êtes un fidèle lecteur de mon blog, vous avez sans doute lu mon article pour créer une caslibc odbc.
Aujourd'hui, je vous présente comment créer un caslib oracle (ce qui est plus ou moins la même chose)
Avant de vérifier si la connexion à Oracle fonctionne dans CAS, vérifier la présence des variables d'environnement dans les fichiers de configuration cas.settings ou cas_usermods.settings (dans /opt/sas/viya/config/etc/cas/default).
Votre fichier doit contenir au moins les 3 variables ci-dessous :
Bien-sûr les chemins indiqués doivent correspondre à votre installation.
La première étape consiste à créer une session cas :
Supprimons ensuite la caslib oralib (on ne sait jamais si elle existe encore ... ) :
Nous pouvons maintenant créer notre caslib oracle :
Puis les librairies associés :
Enfin, chargeons un table depuis Oracle vers CAS :
A noter, que la connexion à la base de données ne se fait PASau moment de la création de la caslib, mais au moment de l'exécution de proc casutil de chargement ou lorsque vous souhaitez lister les tables qu'il est possible de charger en mémoire CAS ( via la commande ci-dessous) :
Ce qui donne :
1 2 3 |
export ORACLE_HOME="/opt/sas/instantclient_12_2" export TNS_ADMIN="/opt/sas/instantclient_12_2" export NLS_LANG="AMERICAN_AMERICA.AL32UTF8" |
1 |
cas sessionhousset sessopts=(caslib=casuser timeout=3600 metrics=true); |
1 |
caslib oralib drop; |
1 2 3 4 5 6 |
caslib oralib desc='Oracle Caslib' datasource=(srctype="oracle" username="SASUSER" password="password" schema="SASUSER" path="XE"); |
1 |
caslib _all_ assign; |
1 2 3 4 5 |
proc casutil; list tables incaslib="oralib"; load casdata="PERSONS60" incaslib="oralib" outcaslib="oralib" casout="PERSONS60"; list tables incaslib="oralib"; quit; |
1 2 3 |
proc casutil; list files incaslib="oralib"; run; |
Quelques erreurs
Au moment de l'exécution de la proc casutil, vous pouvez obtenir l'erreur ci-dessous :NOTE: Executing action 'table.loadTable'.
NOTE: Performing serial LoadTable action using SAS Data Connector to Oracle.
ERROR: The connection to the data source driver failed.
ERROR: General error ORA-01017: invalid username/password; logon denied
ERROR: Function failed.
ERROR: The action stopped due to errors.
Si cette erreur survient, et comme l'indique le message d'erreur Oracle ( ORA-01017) il faut vérifier votre les valeur de username et de password. Contrairement au libname, dans une caslib, la valeur de username est sensible à la casse. Vérifier cette valeur dans votre base de données Oracle :
1 |
select username from dba_users; |
Pour valider la casse du mot de passe, vous pouvez également exécuter le code suivant dans votre session SAS :
1 2 3 |
PROC FEDSQL nolibs noprompt='DRIVER=ORACLE;uid="sasuser";pwd="xxxxx";path="XE";catalog="ORALIB" '; quit; |
Ce qui donne :
Le même test avec le login en majuscule :
1 2 3 |
PROC FEDSQL nolibs noprompt='DRIVER=ORACLE;uid="SASUSER";pwd="xxxx";path="XE";catalog="ORALIB" '; quit; |