SAS Scalable Performance Data Server 4.
The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2009. SAS® Scalable Performance Data Server® 4.5: Administrator’s Guide. Cary, NC: SAS Institute Inc. SAS® Scalable Performance Data Server® 4.5: Administrator’s Guide Copyright © 2009, SAS Institute Inc., Cary, NC, USA All rights reserved. Produced in the United States of America.
Contents PART 1 Product Notes 1 Chapter 1 • SPD Server 4.5 Product Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 What's New in SPD Server 4.5? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 SPD Server 4.5 Platform Support Changes . . . . . . . . . . . . . . . . . . . . . . . . . .
iv Contents SPD Server Command Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 SPD Server and the SAS Management Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Lightweight Directory Access Protocol (LDAP) Authentication . . . . . . . . . . . . . . . . . . 52 Notes for SPD Server Administrators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Troubleshooting . . . . . . . . . . . . . . . . . . . . . . .
Contents v Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Syntax for the -PARMFILE Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112 Syntax for the spdsserv.parm Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 spdsserv.parm Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vi Contents Ixutil Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221 Chapter 18 • SPD Server Table List Utility Spdsls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 SPD Server Table List Utility Spdsls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Chapter 19 • SPD Server Backup and Restore Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 Part 1 Product Notes Chapter 1 SPD Server 4.5 Product Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
3 Chapter 1 SPD Server 4.5 Product Notes Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 What's New in SPD Server 4.5? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Overview of SPD Server 4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 SPD Server 4.5 Platform Support Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Chapter 1 • SPD Server 4.5 Product Notes • SPD Server now supports user formats with the put() function that are greater than 8 characters in length. An SPD Server host can read user format catalog files that were created by SAS running on Windows, or on the same machine as the SPD Server host. The spdsls list utility has been enhanced to add a -verbose option.
5 Part 2 Installation Chapter 2 SPD Server Pre-Installation and System Requirements Guide . . . . . . 7 Chapter 3 SPD Server UNIX Installation Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Chapter 4 SPD Server Windows Installation Guide . . . . . . . . . . . . . . . . . . . . . . . . . .
6
7 Chapter 2 SPD Server Pre-Installation and System Requirements Guide AIX Requirements and Tuning for 64-bit SPD Server . . . . . . . . . . . . . . . . . . . . . . . . 7 HP-UX Requirements and Tuning for 64-bit SPD Server . . . . . . . . . . . . . . . . . . . . . 7 System Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Kernel Tuning Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 Chapter 2 • SPD Server Pre-Installation and System Requirements Guide • Minimum System Configuration: HP-PA 2.0 server system with minimum 2Gb memory. Kernel Tuning Requirements The following kernel parameters are for HP-UX 11.11 and HP-UX 11.23. They need to be adjusted on the HP server system where you will run SPD Server. After you make these kernel parameter changes, be sure to reboot the system before you attempt to use the SPD Server.
System Requirements 9 Solaris on Sparc Requirements and Tuning for 64bit SPD Server System Requirements The following kernel parameter needs to be adjusted on Solaris server systems where you will run SPD Server. • rlim_fd_max = Process limit for open files. Adjust the parameter to accommodate the maximum number of the number of concurrently open SPD tables multiplied by the maximum number of partitions in an SPD Server table.
10 Chapter 2 • SPD Server Pre-Installation and System Requirements Guide Windows Requirements and Tuning for 32-bit SPD Server System Requirements • Required OS level: Windows NT 4.0 Service pack 3 or greater • Minimum System Configuration: NT server system. SPD Server 4.5 Client Requirements System Requirements • Required SAS level: SPD Server 4.5 requires SAS 9.2.
11 Chapter 3 SPD Server UNIX Installation Guide SAS Scalable Performance Data Server 4.5 and SAS Deployment Wizard . . . . . . 12 Before You Install: Precautions and Required Permissions . . . . . . . . . . . . . . . . . . . 12 Packing List for SPD Server Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Directory Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Upgrading SPD Server 3.x to SPD Server 4.5 . . .
12 Chapter 3 • SPD Server UNIX Installation Guide SAS Scalable Performance Data Server 4.5 and SAS Deployment Wizard SAS Scalable Performance Data Server (SPD Server) 4.5 can be installed as part of your initial SAS 9.2 installation. Or, SPD Server 4.5 can be installed as an add-on product to an existing SAS 9.2 installation. In either case, the SPD Server 4.5 installation is facilitated by the SAS Deployment Wizard.
Directory Contents • 13 If your SPD Server clients access the SPD Server host using name services instead of specifying port numbers, you need Write access to the services files on the clients, in the path /etc/services or /etc/inet/services For Windows, the path is C:\winnt\system32\drivers\etc\services • Insert the WORKPATH= server option in your spdsserv.parm file. Use the WORKPATH= option to configure your server to use a high-performance file system.
14 Chapter 3 • SPD Server UNIX Installation Guide • spdsnlslib is the NLS library. • spdsnlslibd is the debug version of spdsnlslib. • spdsiotest is the stand alone SPD Server I/O scalability test. The lib/ subdirectory contains the following SPD Server library files: • spdslib is the run-time library that performs SQL Pass-Through from C and C++ applications to SPD Server. • spds.dll is the application extension library that is accessed via the SAS ODBC Driver.
Overview of Upgrading from SPD Server 3.x to SPD Server 4.5 15 • symbsub.sas shows how symbolic substitution in SQL Pass-Through statements can provide row-level security in tables. • fmtgrpby.sas shows how to use formatted parallel GROUP BY statements in SQL Pass-Through. • scale.sas can be used to benchmark the scalability of your SPD Server. • dynamic_cluster*.sas shows how to use dynamic clusters with a MIN and MAX variable list. • minmax*.
16 Chapter 3 • SPD Server UNIX Installation Guide Upgrading SPD Server 4.x to SPD Server 4.5 Overview of Upgrading from SPD Server 4.x to SPD Server 4.5 SPD Server 4.x tables are compatible for use with SPD Server 4.5. No conversion is required to use SPD Server 4.x tables with SPD Server 4.5. You can start SPD Server 4.5 using domains that include tables created by any SPD Server 4.x host. Configuring SPD Server Host Software for Your Site After you install SPD Server 4.
Configuring SPD Server Host Software for Your Site 17 groupdef and add commands prompt you for values to enter. Use the following transcript file from a typical command sequence for reference. You should notice that the password prompt does not echo any characters as you type. If you want to verify your work, you can use the Password Manager list command to print the contents of the SPD Server password file, following the add command.
18 Chapter 3 • SPD Server UNIX Installation Guide thought and planning. You should decide how to organize your existing disk storage to best exploit the capabilities of the SPD Server. For more information, see “SPD Server Host Commands” on page 27 and the libsamp.parm file. For more information about managing resources, see “Managing Computing Resources with a Name Server” on page 67 . 6. Edit and configure the resource script file rc.spds.
Configuring SPD Server Host Software for Your Site 19 # addition, the SPDS server listen port and operator port # must be surfaced through the firewall. If you are not # running through a firewall allow the server to choose # these ports. # # SRVLPORT is the SPDS server listen port; # leave as 0 if NOT running through a firewall. # # SRVOPORT is the SPDS server operator port; # leave as 0 if NOT running through a firewall.
20 Chapter 3 • SPD Server UNIX Installation Guide # port number. If not explicitly specified it # will default to the "spdssnet" service in /etc/services # /bin/sleep 2 if [ -z "$SNSPORT" ]; then spdssnet 1>$SNSLOG 2>&1 & else spdssnet -listenport $SNSPORT 1>$SNSLOG 2>&1 & • SNET Port Assignments: The rc.spds script assumes that you are running SPD Server concurrently with an SPD Server 3.x environment.
Configuring SPD Server Host Software for Your Site 21 The LOGFILE= and LOGTIME= spdsserv options are enabled by default with the following shell variables: LOGFILE=spdsserv Specifies the spdsserv process log file prefix. LOGTIME=00:00 Specifies the time of day to cycle the log file. These settings enable automatic log filename generation and cycling by specifying the log file prefix and the log file cycle time of day.
22 Chapter 3 • SPD Server UNIX Installation Guide Service declaration for the SPD Server Name Server spdssnet 5191/tcp # SPDs SNET Server Service declaration for the SNET Server. You only need the SNET service if you plan to run the SNET Server. By default, the sample rc.spds script runs spdssnet. If you choose to use different port addressses, replace the ???? strings with unused 4digit port addresses. Also remember to update your rc.spds script accordingly.
Configuring SPD Server Client Software 23 If the spds* processes are not running, check the log for errors. Unless you change the log file defaults in rc.spds, the log paths are the following: • InstallDir/log/spdsnsrv.log • InstallDir/log/spdsnsrv_mmddyyyy_hh:mm:ss.spdslog • InstallDir/log/spdsserv.log • InstallDir/log/spdsserv_mmddyyyy_hh:mm:ss.spdslog • InstallDir/log/spdssnet.log • InstallDir/log/spdssnet_mmddyyyy_hh:mm:ss.
24 Chapter 3 • SPD Server UNIX Installation Guide The service defines the port number for the SPD Server Name Server process. Make sure the added port number matches the port number used during the SPD Server installation. If you are running SAS with an existing SPD Server installation, this service name is probably already defined. You can either define another service name for the SAS client to use (for example, sp45name) or you can directly include the SPD Server port number in your SAS statements.
Testing Your SPD Server Installation Using SAS 25 LIBNAME test sasspds 'tmp' server=serverNode.spdsname user='anonymous'; In addition, you should verify that the row level integrity LIBNAME assignment works correctly: LIBNAME testrl sasspds 'tmp' server=serverNode.port user='anonymous' locking=YES; When you verify these statements, you confirm the connectivity between the SAS client and the SPD Server environment.
26 Chapter 3 • SPD Server UNIX Installation Guide 4. Verify that SQL Pass-Through services are working in SPD Server by submitting the following SAS commands: %let spdshost=serverNode; %let spdsport=port; %include 'InstallDir/samples/verptsql.sas'/source2; serverNode and port are described in Step 2. SPD Server Command Reference SPD Server operation revolves around the executable files described in the packing list. The executables are in the /bin subdirectories.
SPD Server Host Commands 27 -listenport port# Specifies the explicit TCP port number that the Name Server uses to accept connections from the SPD Server LIBNAME engine and its SPD Server hosts. If no port is specified, the Name Server queries the system for port addresses using the service name spdsname. If no such service has been registered, SPD Server chooses a dynamic port number for the Name Server to use. -licensefile lic-file License file keys are generated by SAS and provided to you.
28 Chapter 3 • SPD Server UNIX Installation Guide When using automatic server log cycling or audit log cycling, remember to periodically clean the log files. Proper log file maintenance includes archiving logs using secondary or long-term storage. Many users only retain a few generations of log files for quick reference. A shell script that runs on a regular basis (such as CRONTAB) is a good way to perform log maintenance on your server machine.
SNET Server Commands 29 -auditfile fileSpec Enables audit logging for the server and automatic audit log file creation by the audit process. fileSpec specifies a path or filename specification that is used to generate the complete audit file path. For example, if you specified fileSpec as /audit/ spds, the generated name would appear as: /audit/spds_mmddyyyy_yyyy.spdsaudit, where mmddyyyy is taken from the system date when the log file is created.
30 Chapter 3 • SPD Server UNIX Installation Guide Password Utility Reference The SPD Server psmgr utility allows the SPD Server administrator to create and maintain the data set containing the authorized SPD Server user IDs. This is the SPD Server analog of the normal UNIX user ID facility. If you choose to run SPD Server ACL support, you need to create and populate the SPD Server password file using this utility before starting the SPD Server.
SPD Server Lightweight Directory Access Protocol (LDAP) Authentication 31 Table 3.1 Parameters for spdsserv.
32 Chapter 3 • SPD Server UNIX Installation Guide If no distinguished name is specified in the spdsserv.parm file, SPD Server uses the LDAP Server host's domain name to generate values for DOM1, DOM2, and DOM3. The SPD Server user ID becomes the value for uid. The resulting value becomes the default user location for LDAP database members. For example, suppose the LDAP host machine is sunhost.unx.sun.com and the user ID is sunjws.
LDAP Password Authentication 33 Here are some options for establishing the appropriate UNIX user ID for your SPD Server processes: Establish a dedicated UNIX account for the SPD Server administrator. Always execute the rc.spds script from that account. The rc.spds script that starts the SPD Server processes should use the setuid bit. It does not matter who executes the script, the user ID of the shell executing the script is the script owner.
34 Chapter 3 • SPD Server UNIX Installation Guide Troubleshooting Troubleshooting networked applications is often difficult. Key information for SPD Server troubleshooting can be found in the Name Server and SPD Server host process log files. With those two log files, you can reconstruct SAS interaction with SPD Server components. Entries in these log files are time-stamped for reference. You should be able to correlate activities between the two logs by using the time-stamp information.
SAS LIBNAME Assignment Failed 35 1? libname foo sasspds 'test' server=sunspot.spdsname passwd='xxx'; ERROR: Module FOO not found in search paths. ERROR: Error in the LIBNAME or FILENAME statement. 2. Invalid specification of the logical LIBNAME domain name in the LIBNAME statement. The domain name 'test' is not defined in the SPD Server Name Server sunspot.spdsname. 2? libname foo sasspds 'test' server=sunspot.spdsname passwd='xxx'; ERROR: ERROR: Libname path info not found in SPDS name server..
36 Chapter 3 • SPD Server UNIX Installation Guide Using SETINIT to Extend SPD Server Software When you receive SPD Server, licensing information is pre-initialized. When you renew the license, you receive a new license to replace your existing license. You must restart SPD Server to use the new license. Note: You should not change the licensing information unless you are logged in with the user ID of the owner of SPD Server. You designated the owner of these files when you licensed the software.
37 Chapter 4 SPD Server Windows Installation Guide SAS Scalable Performance Data Server 4.5 and SAS Deployment Wizard . . . . . . 38 Before You Install: Precautions and Required Permissions . . . . . . . . . . . . . . . . . . . 38 Packing List for SPD Server Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Directory Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38 Chapter 4 • SPD Server Windows Installation Guide SAS Scalable Performance Data Server 4.5 and SAS Deployment Wizard SAS Scalable Performance Data Server (SPD Server) 4.5 can be installed as part of your initial SAS 9.2 order, or SPD Server 4.5 can be installed as an add-on to an existing SAS 9.2 order. In either case, your SPD Server 4.5 installation will be facilitated by the SAS Deployment Wizard utility.
Directory Contents 39 • spdsnsrv.exe is the SPD Server Name Server. • spdsserv.exeis the SPD Server host. • spdsbase.exe is the LIBNAME proxy . • spdslog.exe is the message logger . • spdsaud.exe is the audit logger. • spdseng.dll is the SQL Pass-Through engine. • ixutil.exe is the data set index utility. • psmgr.exe is the password file utility. • spdssnet.exe is the ODBC, JDBC, and htmSQL gateway. • spdsperf.exe is the Performance Server. • spdsls.
40 Chapter 4 • SPD Server Windows Installation Guide • spdsserv.parm is a sample SPD Server host parameter file. It sets the defaults for SPD Server options. Use this file with the -PARMFILE option for the spdsserv command. • rc.spds is a Bourne shell script to start a standard SPD Server environment. • doc_examples.sas contains sample SAS code that is used in the SAS Scalable Performance (SPD) Data Server 4.5: User's Guide.
Validating Default Port and Library Assignments • spdsstartsvc.bat is the "start SPD Server service" batch file. • spdsstopsvc.bat is the "stop SPD Server service" batch file. • spdsnsrv.bat is the SPD Server Name Server start-up batch file. • spdssnet.bat is the SPD Server SNET server start-up batch file. • spdsserv.bat is the SPD Server start-up batch file. 41 The spdssmc\ directory contains the SAS Management Console files that support SPD Server.
42 Chapter 4 • SPD Server Windows Installation Guide Initializing the Password Manager Database Before you can start SPD Server, you must initialize the SPD Server Password Manager database from the SPD Account Manager. To open the SPD Account Manager, use the Windows Start button to select:Programs ð SAS ð SPD Server 4.5 ð SPD Account Manager. The SPD Account Manager launches in a command window.
Installing SPD Server as a Service 43 When you configure SPD Server in the Services window for the first time, the Status column for the servers will be blank, and the Startup Type column will be set to Manual. Most users want to configure SPD Server to automatically start and stop the Name Server, Data Server, and SNET server. The Automatic setting loads the Name Server, Data Server, and SNET server without prompting. It stops the services without prompting when you close Windows.
44 Chapter 4 • SPD Server Windows Installation Guide Select Automatic from the Startup type list. This configures the Name Server service to automatically start and stop with the Windows operating environment. Select OK to apply the changes and close the window. Repeat this process to change the Startup type setting for the Data Server and SNET Server.
Configuring SPD Server Software on Your Windows Host 45 2. Add your SPD Server user IDs to the SPD Server password file. You should run the SPD Account Manager to perform this function. You can add to or modify the SPD Server password file at any time, even when SPD Server is running. 3. Use the SPD Account Manager to add users and groups. For more information, see, "Connecting to SPD Server via ODBC, JDBC, and htmSQL" in the SAS Scalable Performance Data (SPD) Server 4.5: User's Guide .
46 Chapter 4 • SPD Server Windows Installation Guide Upgrading SPD Server 3.x to SPD Server 4.5 Overview of Upgrading SPD Server 3.x tables are not compatible with SPD Server 4.5. If you want to use your SPD Server 3.x tables with SPD Server 4.5, you must first convert your SPD Server 3.x tables.For more information about converting SPD Server 3.x tables for use with SPD Server 4.5, see SPD Server 3.x to SPD Server 4.5 Conversion Utility on page 59. Upgrading SPD Server 4.4 to SPD Server 4.
Testing Your SPD Server Installation Using SAS 47 port number that was used during the SPD Server host installation. If you are already running SAS with an earlier version of SPD Server, this service name is probably already defined. You can either define another service name for the SAS client to use (for example, sp45name) or you can directly include the SPD Server port number in your SAS statements. 2. The SPD Server host can be accessed via the SAS ODBC driver, the SAS JDBC driver, and SAS htmSQL.
48 Chapter 4 • SPD Server Windows Installation Guide When you use simple statements like these to verify assignments, you ensure that you have connectivity between the SAS client and the SPD Server host components. Successfully performing the LIBNAME assignments means that the network configuration is correct and that most of the SPD Server host configuration is correct. You will need to fill in serverNode with the network node name where the Name Server and Data Server processes reside.
SPD Server Host Commands 49 Name Server Commands The SPD Server LIBNAME engine connects to the Name Server. The Name Server resolves LIBNAME domain names into physical file system paths for librefs. The Name Server also resolves host node and end-point (TCP port) addresses for each LIBNAME. Each SPD Server host process (spdsserv process) registers LIBNAME domain information from its configuration file with its appointed Name Server process (spdsnsrv process).
50 Chapter 4 • SPD Server Windows Installation Guide SAS job which processes the audit log and produces a report is provided. Check samples \audit.sas for information about processing the audit log and generating the report. To enable the audit trail log, use the spdsserv command with the -auditfile option. When using automatic server log cycling or audit log cycling, you should periodically clean up the log files.
SPD Server and the SAS Management Console 51 where mmddyyyy and hh:mm:ss are taken from the system time when the log file is created. -logtime hh:mm Specifies a time of day to cycle a new generation of the server log file. At this time each day, the previous log file will be closed and new log file will be opened. -auditfile fileSpec Enables audit logging for the server and automatic audit log file creation by the audit process.
52 Chapter 4 • SPD Server Windows Installation Guide Lightweight Directory Access Protocol (LDAP) Authentication In SPD Server 4.5, clients can be authenticated by either the PSMGR password facility, or by a Lightweight Directory Access Protocol (LDAP) Server that is running on the SPD Server host. LDAP authentication integrates with the SPD Server password facility and offers a centralized approach to User ID and password management.
SPD Server User IDs 53 The LDAPBINDDN parameter is the "Distinguished Name" (DN), or the location in the LDAP Server's database where the client's information is stored. The form of this string is "ID= , rdn1=RDN1, rdn2=RDN2, ...". "ID" is the identifier for the Relative Distinguished Name of a User ID that exists in the LDAP Server database. The default value of the DN is "uid= , dc=DOM1, dc=DOM2, dc=DOM3". If no Distinguished Name is specified in the spdsserv.
54 Chapter 4 • SPD Server Windows Installation Guide If you use SPD Server user IDs, you will need to add them to the SPD Server password file created during the installation phase. The Account Manager command reads its commands from its stdin so you can pipe commands to it from another command, script, or from an input file. Troubleshooting Overview of Troubleshooting Troubleshooting networked applications is often difficult.
SAS LIBNAME Assignment Failed 55 should be able to diagnose the reason for the failure from this message. Some common problems include: 1. Invalid specification of the LIBNAME engine selector in the LIBNAME statement. The SPD Server engine name is sasspds and is misspelled in the following LIBNAME statement. 1? libname foo sasspds 'test' server=sunspot.spdsname passwd='xxx'; ERROR: Module FOO not found in search paths. ERROR: Error in the LIBNAME or FILENAME statement. 2.
56 Chapter 4 • SPD Server Windows Installation Guide 10? libname foo sasspds 'test' user='xxx' passwd='xxx'; ERROR: Error on server libname ERROR: SPD server has rejected ERROR: Error in the LIBNAME or server=sunspot.spdsname socket. login from user xxx.. FILENAME statement. Using SETINIT to Extend SPD Server Software When you receive SPD Server software, the licensing information is pre-initialized. When you renew your license, you will receive a new license to replace your existing one.
57 Part 3 Migration Chapter 5 SPD Server 3.x to SPD Server 4.5 Conversion Utility . . . . . . . . . . . . . .
58
59 Chapter 5 SPD Server 3.x to SPD Server 4.5 Conversion Utility Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Before You Convert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Overview of the SPDSCONV Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Using SPDSCONV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60 Chapter 5 • SPD Server 3.x to SPD Server 4.5 Conversion Utility SPDSCONV on the copied versions to convert them for use with SPDS 4.5, while maintaining archival versions of the SPD Server 3.x tables. Overview of the SPDSCONV Utility The SPDSCONV utility converts SPD Server 3.x metadata files for use with SPD Server 4.4. The conversion updates the physical structure of the metadata file and renames the files. The SPDSCONV utility will also update the data partition files if the SPD Server 3.
Using SPDSCONV 61 SPDSCONV reads the SPD Server 3.x metadata file a section at a time, recreating each structure in the SPD Server 4.4 metadata file as it is read. After the SPD Server 4.4 metadata file is fully populated, the data partition file component is checked to determine if updates are required. If SPDSCONV detects the presence of compression block headers, then the data partition file contains SAS 8 compression information that is not compatible in SPD Server 4.
62 Chapter 5 • SPD Server 3.x to SPD Server 4.5 Conversion Utility -j creates a SAS job in the log directory for each SPD Server 3.x table conversion where indexes are present. When run, the SAS job recreates the indexes on the SPD Server 4.4 table. The SAS job must be run after the SPDSCONV utility completes. Because index recreation may be computation-intensive, users may want to schedule SAS index recreation jobs as a SAS batch jobs for off-peak hours.
Converting Tables and Recreating Indexes 63 Converting Tables and Recreating Indexes Suppose you want to convert all tables in the sales domain. You also want SPDSCONV want to create SAS jobs that you can run to recreate the indexes after the table conversion completes. You want the SAS jobs put into the directory $HOME/salesv9. You also want a verbose output of the conversion.
64 Chapter 5 • SPD Server 3.x to SPD Server 4.
65 Part 4 Configuration Chapter 6 Using the SPD Server Name Server to Manage Resources . . . . . . . . 67 Chapter 7 Administering and Configuring SPD Server Using the SAS Management Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Chapter 8 SPD Server SQL Query Rewrite Facility . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Chapter 9 Using SPD Server With Other Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
67 Chapter 6 Using the SPD Server Name Server to Manage Resources Managing Computing Resources with a Name Server . . . . . . . . . . . . . . . . . . . . . . . 67 Configuring SPD Server on a Corporate Network . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Inventory Available Corporate Network Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Running the Name Server on Machine Namecpu . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Configuring SPD Server on Worldcpu . . . . .
68 Chapter 6 • Using the SPD Server Name Server to Manage Resources asiacpu a data store for the company's Asia department, which uses the data to generate reports, analysis, and so on. namecpu the machine that runs the name server. Because data for worldwide operations is stored in an SPD Server table on worldcpu, the Asia department periodically must access worldcpu. The Asia users want to extract worldcpu data to create SPD Server tables that will reside on their own departmental server, asiacpu.
Which SAS Program Statement Runs Where? 69 with the name server. When a SAS LIBNAME statement contains the domain name 'asia' in combination with the appropriate name server, it will locate SPD Server tables in the directory /spds on machine asiacpu. The SAS LIBNAME statement that invokes the SPD Server engine and makes this association is libname asialib sasspds 'asia' server=namecpu.spdsname; Note that the value that follows the LIBNAME server specification is the same in all these LIBNAME statements.
70 Chapter 6 • Using the SPD Server Name Server to Manage Resources
71 Chapter 7 Administering and Configuring SPD Server Using the SAS Management Console The SAS Management Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Accessing the SPD Server Manager in SAS Management Console . . . . . . . . . . . . . 72 Password Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Overview of the Password Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console • library definitions • user definitions • resource access controls • metadata repositories • job schedules Metadata definitions that are created through SAS Management Console are stored in a repository or on a SAS Metadata Server where they are available for other applications to use.
Connecting to an SPD Server 73 There are two window tabs: Users and Groups. When no server connection exists, no data is displayed and the only permitted operation is connecting to an SPD Server . Connecting to an SPD Server Select Connect on the Users tab of the SAS Management Console window to open the Connect to SPD Server window: The Connect to SPD Server window contains input fields for the following components.
74 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console Domain - the SPD domain User - user name that has privilege to be ACL special Password - password associated with the user name Group - optional group name ACL Special - select this box to enable ACL special privileges Complete the required information, and then click Connect. After you connect to an SPD Server host, the remaining command buttons on the Users tab are enabled.
Users and Groups 75 Users Tab On the Users tab of the SAS Management Console window, click List to display the defined users and groups. The window contains the following components: User Name - the name of the user. This field cannot be changed directly. To change a user name, delete the user and then add a new user. Auth Level - the numeric authorization level, ranging from 0 to 7. To change the value, select the field and edit it.
76 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console Def Group - the default group for a user. Use the drop-down list for the field to change the currently defined group. Group 2 - Group 5 - shows the numbered groups 2 - 5 that are assigned to each user. Use the drop-down list to change the currently defined groups. Expires - the number of days that are remaining until the current password expires. A zero value represents infinity.
Overview of the ACL Manager 77 Deleting a User To delete a user using the Users tab of the SAS Management Console window, select the user from the list and click Delete. The user is deleted and the list is updated. Deleting a Group To delete a group using the Groups tab of the SAS Management Console window, select the group from the list and click Delete. The group is deleted and the list is updated.
78 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console You must connect to an SPD Server host machine before you can use the SPD Management utilities. The section “Connecting to an SPD Server ” on page 73 provides detailed instructions on connecting to an SPD Server host. Listing ACL Resources Click List ACL in the ACL Manager of the SAS Management Console window to display the ACL resources that have been defined.
Adding an ACL Resource 79 Type - the type of resource (for example, DATA, CATALOG, VIEW, or MDDB). The Type field cannot be changed directly. To change the Type value, delete the current resource and then add a new one. Column- the column name, if the resource is limited by a column constraint. The column name cannot be changed directly. To change the column name, delete the existing resource and then add a new one. Persist - a Boolean flag.
80 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console LIBNAME - select if the resource is a LIBNAME resource. R, W, A, C - select the appropriate default and group permissions to grant Read, Write, Alter, and Control as appropriate. Model - specify the name of another existing ACL resource for this ACL resource to be modeled after. Deleting an ACL Resource To delete an ACL resource, select any row in the ACL resource table and click Delete ACL.
Refresh Domains 81 Server Manager Overview of the Server Manager The Server Manager folder in the SPD Management utilities in the SAS Management Console window is used to refresh the server's configuration and to run selected SPD Server utilities. You must connect to an SPD Server host machine before you can use the SPD Management utilities. For additional information, see “Connecting to an SPD Server ” on page 73 provides detailed instructions on connecting to an SPD Server host.
82 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console Refresh Parms Click Refresh Parms in the Server Manager to reload the current spdsserv.parm file. The spdsserv.parm file controls server configuration and options. Perform Commands To run an SPD Server operator command or utility function, click Perform Command in the Server Manager. Enter the command or utility in the window, and then click Perform.
SPD Process Profiler 83 The following example below shows the Server Manager after using Perform Command to run a spdsbkup command: SPD Process Profiler The SPD Management folder in SAS Management Console contains an SPD Process Profiler utility. Use the SPD Process Profiler to view server resources that are monitored by the SPD Server Performance Server.
84 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console The SPD Server Performance Server gathers SPD Server process performance information and distributes it across the SPD Management section of the SAS Management Console. The SPD Server process performance information consists of memory and resource allocations that are attributable to users and SPD Server processes that are spawned by an SPD Server Name Server.
Overview of the Proxy Manager 85 Note: Some host systems provide varying amounts of available resource information. Performance and resource information can vary from host to host. The host performance profile information is automatically updated whenever the SPD Server Performance Server performs another capture. The frequency of the SPD Server Performance Server's information capture frequency is specified by the -coption when the SPD Server Performance Server is started.
86 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console You can filter, sort, reorder, and hide Proxy Manager table columns to display proxies of interest. You perform filtering and sorting by clicking on the column headings and selecting the appropriate choice from the menu. Filtering can be specified for any number of the columns. Column filters offer three possible states: • Show all values in the column. • Show only the highlighted value or values in the column.
Proxy Cancel 87 Proxy Cancel Click Cancel to cancel all proxies in the selected libref. The proxy's activity is immediately halted, and any open data connections are immediately closed. Clicking Cancel to stop a proxy from accessing a data set or a given domain is recommended when the interrupt operation is unacceptably delayed.
88 Chapter 7 • Administering and Configuring SPD Server Using the SAS Management Console
89 Chapter 8 SPD Server SQL Query Rewrite Facility Overview of the SQL Query Rewrite Facility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Configuring Storage Space for the SQL Query Rewrite Facility . . . . . . . . . . . . . . . 89 SQL Query Rewrite Facility Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 _QRWENABLE Option: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 _QRW Option: . . . . . . . . . . .
90 Chapter 8 • SPD Server SQL Query Rewrite Facility concurrent SPD Server users. Why is only one domain enough? The SQL Query Rewrite Facility uses the SPD Server TEMP=YES option setting when accessing the LIBNAME domain for intermediate result tables. The TEMP=YES option creates a processing environment where multiple SPD Server users can concurrently create tables with no name or resource contention issues.
_QRW Option: 91 the performance of the SQL query execution. The SQL Query Rewrite Facility is enabled by default.
92 Chapter 8 • SPD Server SQL Query Rewrite Facility
93 Chapter 9 Using SPD Server With Other Clients Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Using Open Database Connectivity (ODBC) to Access SPD Server Tables . . . . . . 94 Why Use ODBC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Installing OBDC Drivers on the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94 Chapter 9 • Using SPD Server With Other Clients SPD Server can read tables exported from Base SAS software using PROC COPY, and, with the proper drivers installed on the network, allows queries on the tables from client machines that do not have SAS software. There are four possible options: • ODBC: Open Database Connectivity - This is an interface standard that provides a common interface for accessing databases.
Configuring ODBC on the Client • 95 You need to view or change SPD Server tables using Windows tools you are familiar with. Installing OBDC Drivers on the Server Instructions for installing the OBDC driver are included in the download package. Configuring ODBC on the Client 1. Configure an ODBC data source. 2. Make your query using a Windows program. Figure 9.
96 Chapter 9 • Using SPD Server With Other Clients Figure 9.
Configuring an ODBC Data Source to Connect Directly to an SPD Server 97 Primary and Secondary LIBNAME Domains When a connection to the SPD server is established a primary LIBNAME domain is assigned. The primary LIBNAME domain is specified by the "DBQ" connection options parameter. Immediately after the connection is made the SAS ODBC Driver assigns the secondary LIBNAME domains which are configured through the Libraries tab of the SAS ODBC Driver Configuration window.
98 Chapter 9 • Using SPD Server With Other Clients 10. Use SQL Pass-Through syntax rules for libref statements when you enter a value in the Options text field. Configuring an ODBC Data Source for SPD SNET Once the SAS ODBC driver is installed, you will need to configure your ODBC data source. When you open the ODBC manager, you'll get a display screen that allows you to enter information that points the OBDC driver to the data on the SPD Server. 1.
Why Would I Want to Use JDBC? 99 Table 9.1 How to Add Service Name and Port Number to the Services File column1 column2 column3 column4 spdssnet nnnn/tcp not required not required spdssnet=name nnnn=port number assigned to server protocol is always /tcp Remember: The service name, spdssnet must match the server name that you used in step 6 of “Configuring an ODBC Data Source for SPD SNET” on page 98.
100 Chapter 9 • Using SPD Server With Other Clients • The audience for the information understands Web browsing and wants point-and-click access to the information. • You want to distribute the information over the World Wide Web. • Your planned application requires the power of the Java programming language. How Is JDBC Set Up on the Server? JDBC is usually set up on the server at the time the SPD Server is installed. The process is covered in the SPD Server installation manual.
JDBC Code Examples and Tips 101 3. JDBC handles the request, formats the information, and returns the result to the Web page. JDBC Code Examples and Tips The following lines must be a part of the HTML file for JDBC:
102 Chapter 9 • Using SPD Server With Other Clients Limitations of Using JDBC with the SPD Server JDBC Used with SAS Versus JDBC Used with the SPD Server SPD Server is treated as a foreign database. SPD Server clients can't query the JDBC metadata class for available tables and other metadata. Users must write their own queries to do this.
How Is htmSQL Set Up on the Client? 103 • You want to distribute the information across your corporate intranet through a Web page. • The clients on your network are varied: UNIX boxes, Windows PCs, and workstations. One thing they might have in common is browser access to your intranet. • The audience for the information understands Web browsing and wants point-and-click access to the data.
104 Chapter 9 • Using SPD Server With Other Clients How Do I Use htmSQL to Make a Query? 1. Log on to the World Wide Web and enter the URL for the Web page that contains the htmSQL code. 2. Click on the desired information. 3. htmSQL handles the request, formats the information, and returns the result to the Web page. Examples of Setting Up an htmSQL Web Page SAS Institute maintains a Web site that explains the technical details of setting up htmSQL Web pages.
105 Chapter 10 Configuring Disk Storage for SPD Server Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 SPD Server Component File Types and Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Creating SPD Server Component Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Which Component Files Are Created for SPD Server Tables? . . . . . . . . . . . . . . .
106 Chapter 10 • Configuring Disk Storage for SPD Server Table Metadata Table Data Segmented Index(es) Global Index(es) .mdf .dpf .idx .hbx Very small Large Medium to Large Medium to Large 1 1 to many 0 or more 0 or more Creating SPD Server Component Files Which Component Files Are Created for SPD Server Tables? At a minimum, an SPD Server table consists of two component files, the metadata .mdf file and the data .dpf file.
Example 2: Using ROPTIONS= to Store SPD Server Table Data and Index Component Files in Other File Systems 107 spdsserv -acl -acldir InstallDir/site -nameserver samson -libnamefile libnames.parm The following is an example of a libnames.parm file entry for a UNIX system: libname=all_users pathname=/disk1/peruser_tables; The following is an example of a libnames.
108 Chapter 10 • Configuring Disk Storage for SPD Server Example 3: Adding More File Systems to a Path Option When Its File System Is Full spdsserv -acl -acldir InstallDir/site -nameserver samson -libnamefile libnames.parm Sample libnames.
Recommended: Use ROPTIONS= 109 In contrast, when you (the administrator) use OPTIONS=, a keyword that is syntactically the same as ROPTIONS=, you are not overriding a user specification. Instead, you are supplementing the user-specified options. In this case, if a user specifies an option, the user's setting is implemented. If the user omits an option, your OPTIONS= specification in the libnames.parm file is used.
110 Chapter 10 • Configuring Disk Storage for SPD Server
111 Chapter 11 Setting Up SPD Server Parameter Files Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Syntax for the -PARMFILE Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Syntax for the spdsserv.parm Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 spdsserv.parm Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
112 Chapter 11 • Setting Up SPD Server Parameter Files SPD Server User IDs and Passwords That Are Not In Their Default Location in the LDAP Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 SPD Server User IDs and Passwords That Are Not In Their Default Location in the LDAP Database and in the LDAP Server That Is Using TCPIP_PORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 SPD Server Parameter File Configurations for Auditing . . . . . . . . . . . . .
GRPBYROWCACHE= 113 spdsserv.parm Options BINBUFSIZE= controls the amount of memory that is used for each bin buffer during sorting. Each bin is equal to the value that is specified for SORTSIZE. When the sort operation overflows a single sort bin, SPD Server writes the contents of the bin to disk and then merges the bin contents to produce the final, sorted results. This option sets the size of the I/O buffer that must be used to read each bin.
114 Chapter 11 • Setting Up SPD Server Parameter Files share the memory that is specified using GRPBYROWCACHE to cache groups in memory; each thread receives 1/MAXWHTHREADS= of the cache. Once a thread accumulates enough distinct groups to fill its cache, the groups are moved to secondary bins. At the completion of the parallel GROUP BY, the parallel group aggregations in memory and secondary bins are merged to produce the final sorted results.
MAXGENNUM= 115 LDAPPORT= specifies the TCP/IP port that is used to communicate with the LDAP server. The default value is LOCAL_HOST or port 389. Usage LDAPPORT= ; LDAPBINDMETH= indicates the LDAP authentication security level. The default value for LDAPBINDMETH= is ANONYMOUS. The ANONYMOUS value is not recommended for use with secure environments.
116 Chapter 11 • Setting Up SPD Server Parameter Files Usage MAXGENNUM= ; MAXSEGRATIO= controls segment candidate pre-evaluation for WHERE clause predicates with a hybrid index. The WHERE clause planner pre-evaluates the segment candidates for the predicate. Only the segment candidates are searched to resolve the WHERE clause.
RANDOMPLACEDPF 117 [NO]LDAP turns SPD Server LDAP user authentication on or off. If the LDAP option is found or set during SPD Server start-up, then the SPD Server host creates a context for LDAP user authentication. Usage LDAP ; NOLDAP; [NO]NLSTRANSCODE enables or suppresses the server-side SPD Server NLS processing. The default value for NLSTRANSCODE is NONLSTRANSCODE if the option is not found in the spdsserv.parm file. The default spdsserv.
118 Chapter 11 • Setting Up SPD Server Parameter Files RANDOMPLACEDPF in SPD Server 4.5, include a NORANDOMPLACEDPF statement in your spdsserv.parm file. Usage RANDOMPLACEDPF; RANIOBUFMIN= specifies the minimum random I/O buffer size. The specified value becomes the minimum I/O buffer size that is used by the proxy when it performs random I/O and table requests.
LDAP Server and SPD Server Host That Are Running On Different Machines 119 WORKPATH= specifies the LIBNAME proxy path for work files. If you think that the work files might overflow a single file system, you can specify multiple paths. When specifying multiple paths, enclose the complete path statement in double quotation marks. Usage WORKPATH= "('DirPath1' 'DirPath2' ...
120 Chapter 11 • Setting Up SPD Server Parameter Files SPD Server User IDs and Passwords That Are Not In Their Default Location in the LDAP Database For this configuration, assume that you want to perform LDAP user authentication, but the SPD Server user IDs and passwords are not in their default locations in the LDAP database. Assume that all other LDAP settings use the default configuration.
SQLAUDLEN= 121 /audit/spds_mmddyyyy.spdsaudit where mmddyyyy is taken from the system date when the audit log file is created. WHAUDLEN= Specifies the maximum size of the WHERE clause in the audit log when proxy auditing is enabled in SPD Server, and when the WHEREAUDIT option is specified. Usage: WHAUDLEN= The default value for WHAUDLEN is 512 characters. The maximum value for WHAUDLEN is 4,096 characters.
122 Chapter 11 • Setting Up SPD Server Parameter Files
123 Chapter 12 Setting Up SPD Server Libname Parameter Files Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Domain Naming Syntax for Libnames.parm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Domain Path Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Overview of Data Path Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
124 Chapter 12 • Setting Up SPD Server Libname Parameter Files libnames.parm file as a central tool to control SPD Server domain resources and user access to SPD Server domains. Domain Naming Syntax for Libnames.parm To define an SPD Server domain in the libnames.parm file, you must define the domain as a LIBNAME and define the path that points to the directory where data files for the domain are stored. LIBNAME=domain-name PATHNAME=primary-metadata-path OPTIONS="option-1 <...
WORKPATH= 125 SPD Server domain optional path parameters are specified using either standard option statements or using reserved option statements. The difference between non-reserved and reserved option statements is that non-reserved option statements can be altered by subsequent libref statements that are submitted to SPD Server via SAS code. Use the roption (reserved option) specification to ensure that the domain options that you declare in libnames.
126 Chapter 12 • Setting Up SPD Server Libname Parameter Files Usage: WORKPATH=('/work1/spds123' '/work2/spds123' '/work3/spds123' '/work4/spds123') METAPATH= Specifies a list of paths that are allocated to contain overflow SPD Server metadata if the designated metadata space that is allocated in the PATHNAME= option statement becomes full. The additional metapaths provide a buffer space that can be used for update and append operations to existing SPD Server tables.
LIBACLINHERIT= 127 The non-intuitive names example uses different names for the declared domain name, pathname, data pathname, and index pathname. The structure is technically valid, but is also unnecessarily complex. In summary, it is a good idea to use the same name that is declared as a LIBNAME domain as the destination directory name for pathname, data path, and index path specifications.
128 Chapter 12 • Setting Up SPD Server Libname Parameter Files 4. If LIBNAME ACL permissions are defined for the accessor's group, the accessor gets the LIBNAME ACL permissions on the object. 5. Else, the accessor gets UNIVERSAL ACLs on the resource. An OWNER=LIBACLINHERIT=YES domain statement uses a slightly different methodology because of the OWNER= parameter.
LIBACLINHERIT= /* LIBNAME access for user anonymous */ PROC SPDO library=libinher ; /* Admin owns these ACLs */ set acluser admin ; /* Add a LIBNAME ACL to d1 */ add acl / libname ; /* Modify LIBNAME ACL Domain d1 /* Allow users in Group 1 /* read-only access to domain */ */ */ modify acl / libname read ; list acl _all_ ; quit ; /* Set up LIBNAME access for /* user anonymous PROC SPDO library=noinher ; */ */ /* Specify who owns these ACLs */ set acluser admin ; /* add a LIBNAME ACL to d1 */ add acl
130 Chapter 12 • Setting Up SPD Server Libname Parameter Files PROC PRINT data=a_noher.admins_table ; title 'without libaclinher' run ; DYNLOCK= Overview of Dynamic Locking Dynamic locking is an SPD Server feature that allows multiple users concurrent access to SPD Server tables. The tables can be concurrently accessed by multiple users for reading and writing, while maintaining the integrity of the table contents.
Data Table Space 131 Dynamic locking is not a replacement for using record-level locking in cases where the user requires SAS-style record-level integrity across multiple clients. Reading a record using dynamic locking does not guarantee that the record cannot change before a subsequent read or update is executed. If a true record-level lock is needed by a client, then the record-level locking protocol should be used.
132 Chapter 12 • Setting Up SPD Server Libname Parameter Files To ensure reliability, data table space is typically organized into RAID 1+0 or RAID-5 disk configurations. Very large warehouses should consider a RAID-5 configuration with a second storage array to mirror the data. Index Table Space When a domain is declared in a LIBNAME statement, index tables are stored in the space defined in the PATHNAME= specification, unless the INDEXPATH= option is specified.
Overview of Domains and Data Spaces 133 Work space refers to the area on disk that SPD Server software uses to store required files when the available CPU memory cannot contain the entire set of calculations. During events like these, some utility files are written to disk. Work space is important to scalability. Tasks such as large sorts, index creation, parallel group-by operations, and SQL joins can require dedicated work space to store temporary utility files.
134 Chapter 12 • Setting Up SPD Server Libname Parameter Files Permanent Table Space In SPD Server, large production, inventory, and sales data storage areas work best using permanent table space. A rolling five-year sales data table by division and company is an example of an SPD Server structure that is best suited to permanently allocated space on the enterprise computers.
Temporary Table Space 135 permanent table space should be accessible to the specific group (such as analysts) of regular SPD Server users. The SPD Server administrator can use the libnames.parm file to configure paths that map to an area of reserved disk space on a host computer, creating a safe place for permanent tables with limited user access. To reserve permanent table space, the LIBNAME domain statement in the libnames.
136 Chapter 12 • Setting Up SPD Server Libname Parameter Files creating temporary table spaces is to use the optional TEMP=YES specification when the LIBNAME domain statement is issued in submitted SPD Server job code. All tables residing in temporary table space are lost at the end of the SPD Server user session, when temporary table space is automatically deleted. Example Libname.
Example 3: Query-Rewrite Domain Configuration 137 The INDEXPATH= is designed to take advantage of multiple file systems. SPD Server 4.5, index components can take advantage of the SPD Server RANDOMPLACEDPF feature. The RANDOMPLACEDPF feature enables administrators to configure smaller disk partitions for index space, which benefits SPD Server backup and recovery operations.
138 Chapter 12 • Setting Up SPD Server Libname Parameter Files INDEX_MAXMEMORY=8M; NOCOREFILE; SEQIOBUFMIN=64K; RANIOBUFMIN=4K; MAXWHTHREADS=8; WHERECOSTING; RANDOMPLACEDPF; MINPARTSIZE=128M; TMPDOMAIN=QRW; WORKPATH=('c:\temp\work1'); Example 4: Multiple Domain Types and Paths Configuration Example 4 uses a combination of libnames.parm, spdsserv.
Example 4: Multiple Domain Types and Paths Configuration 139 '/data04/usertbls' '/data05/usertbls' '/data06/usertbls' '/data07/usertbls' '/data08/usertbls' '/data09/usertbls') INDEXPATH=('/idx01/usertbls' '/idx02/usertbls' '/idx03/usertbls' '/idx04/usertbls' '/idx05/usertbls')"; Finally, more libnames.parm file code defines the domain named SPDTEMP, which contains temporary table space that is automatically deleted at the end of the SPD Server session.
140 Chapter 12 • Setting Up SPD Server Libname Parameter Files SAS code submitted to SPD Server by the user connects to the PROD, USERTBLS, and SPDTEMP domains, and configures SPDTEMP as a temporary domain space. Tables in the SPDTEMP domain will be automatically deleted at the end of the SPD Server session. LIBNAME PROD sasspds "PROD" server=hostname.hostport user="user-id" password="password" IP=YES; LIBNAME USERTBLS sasspds "USERTBLS" server=hostname.
141 Chapter 13 Setting Up SPD Server Performance Server Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Starting the SPD Server Performance Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Overview of Starting the Performance Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Start Performance Server from Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . .
142 Chapter 13 • Setting Up SPD Server Performance Server The display of memory and resource allocations in the SPD Process Profiler allows SPD Server Administrators to use the SAS Management Console as a handy view point to review which SPD Server processes are occupying host computing resources, how the resources are distributed across users and processes at a given point in time, and whether the resource uses and distributions are appropriate for your computing environment.
Start Performance Server from Rc.perf Script 143 Start Performance Server from Command Line You can start the SPD Server Performance Server from a UNIX command line. SPD Server and the SAS Management Console applications must be running before you start the Performance Server. If SPD Server must be restarted, the SPD Server Performance Server must also be shut down and restarted after SPD Server is restarted.
144 Chapter 13 • Setting Up SPD Server Performance Server 2. You must update the UNIX environment setting for DISPLAY. This environmental variable tells the X server where to display the window for the Performance Server program. 3. The sample script uses the default SAS Name Server port ( NSPORT) and SAS SNet port (SNPORT) assignments.
Sample Rc.
146 Chapter 13 • Setting Up SPD Server Performance Server SHMATID=$(ps -eo pid,ppid,args | grep spdsbase | grep $SSRVPID | tr -s "\t" " " | sed -ne "1s/^ *//p" | cut -d " " -f4) echo "SPDSNSRV Pid: $SSRVPID" echo "SPDSSNET Pid: $SNETPID" echo "SHMATID: $SHMATID" INSTDIR=/usr/local/spds PATH=$INSTDIR/bin export PATH LD_LIBRARY_PATH=$INSTDIR/bin export LD_LIBRARY_PATH LIBPATH=$INSTDIR/bin export LIBPATH # substitute user's display machine name below. export DISPLAY=machine:0.
147 Part 5 Security Chapter 14 ACL Security Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Chapter 15 Managing SPD Server Passwords, Users, and Table ACLs . . . . . . .
148
149 Chapter 14 ACL Security Overview ACL Security Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 SPD Server ACL Security Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Overview of the ACL Security Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Enabling ACL Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
150 Chapter 14 • ACL Security Overview ACL Security Overview SPD Server uses Access Control Lists (ACLs) and SPD Server user IDs to secure domain resources. You obtain your user ID and password from your SPD Server administrator. SPD Server also supports ACL groups, which are similar to UNIX groups. SPD Server administrators can associate an SPD Server user as many as five ACL groups. ACL file security is turned on by default when an administrator brings up SPD Server.
Enabling ACL Security 151 ACLs. Likewise, areas created without ACLs should be accessed only by SPD Servers using -NOACL. SPD Server comes bundled with the SAS Management Console (SMC). The SAS Management Console is a GUI utility that an SPD Server administrator can use to manage passwords and ACLs. The SAS Management Console manages passwords using the same capabilities that the psmgr utility provides, and the SAS Management Console also manages ACLs using the same capabilities provided by PROC SPDO.
152 Chapter 14 • ACL Security Overview Example Server Setup with ACL Security The following command invokes SPD Server with ACL support enabled and configures it with the specified LIBNAME domain definitions. spdssrv -ACL -acldir InstallDir/site -nameserver samson -LIBNAMEfile libnames.parm The libnames.
Disabling ACL Security 153 PROC SPDO lib=clin; set acluser; add ACL / LIBNAME groupread; modify ACL / LIBNAME drfgood=(y,y,,y); quit; The owner of the LIBNAME domain 'clinical' has granted permission to other members of his or her ACL group to the LIBNAME domain to have READ access to the domain. This permits these users to perform SAS LIBNAME assignments to the domain. Users not belonging to the owner's ACL group will not even be permitted to make LIBNAME assignments to the 'clinical' domain.
154 Chapter 14 • ACL Security Overview SPD Server is invoked, connecting to the name server running on the machine called 'samson'. Despite no ACLs, a password file is still required in the directory called InstallDir/site. Note: InstallDir is a documentation substitute for the actual path specification for the directory where SPD Server is installed on a particular machine. LIBNAME domains 'open_access' and 'mgmt_access' are registered with the name server.
ACL Concepts 155 2. If a resource is owned by the same ACL group as the accessor, the accessor gets the resource's GROUP permissions. 3. If the resource is owned by a different ACL group than the accessor, the accessor gets the resource's UNIVERSAL permissions. To turn on LIBACLINHERIT permissions in your spdsserv.parm file, submit the statement: LIBACLINHERIT ; . To turn off LIBACLINHERIT permissions in your spdsserv.parm file, submit the statement:: NOLIBACLINHERIT ; . You can also use your libnames.
156 Chapter 14 • ACL Security Overview When defining user-specific ACL permissions, you can use an ACL group wherever you can use an explicit SPD Server user ACL. Using an ACL group grants privileges to the ACL group instead of only to a specific SPD Server user. Column Security SPD Server allows you to control access to table contents at the column level through the use of ACLs.
Overview of the ACL Command Set 157 SALESNE, SALESSE, SALESMW, SALESSW, SALESPW, and SALESNW, you could use the wildcard symbol to create the generic ACL name, SALES*, to cover them all. You then would define your ACL permissions on the SALES* generic ACL. When using PROC SPDO, use the /GENERIC command option to identify a generic ACL. Note: If you specify /GENERIC when defining a table column ACL, the /GENERIC applies to the table name, not to the column name. You cannot use wildcards with column names.
158 Chapter 14 • ACL Security Overview or member type at any point in a command sequence, and then continue with additional ACL commands in the new scope. SET ACLTYPE memtype; Sets the member type for subsequent ACL operations. Valid values are DATA, CATALOG, VIEW, and MDDB. The default is DATA. SET ACLUSER [name]; Sets the SPD Server user scope for subsequent ACL operations. The user scope restricts your view to only those ACL records which have the specified user name as the owner of the ACL entry.
ADD ACL Examples 159 C=cat Identifies the specified ACL names acl1 acl2... as the names of catalog entries in the catalog cat. You pair this value with the T= option. T=type Identifies the catalog entry type to associate with the specified ACLs acl1 acl2... when you specify the C=cat option. ADD ACL Examples Add LIBNAME Domain ACL This ACL grants universal READ and group WRITE access.
160 Chapter 14 • ACL Security Overview Add Generic ACL for Catalog Entries This ACL for catalog entries, MYCAT.MY*.CATAMS, grants universal READ and group READ access. set acltype catalog; add acl my c=mycat t=catams/generic read groupread; MODIFY ACL and MODIFY ACL _ALL_ MODIFY ACL acl1 acl2... [C=cat T=type] /options user list; MODIFY ACL _ALL_ /options user list; Modifies existing ACLs for resources acl1 acl2... where ACL entries acl1 acl2...
MODIFY ACL Examples 161 NOGROUPALTER Removes group ALTER access. GENERIC Specifies that acl1 acl2... are generic ACLs. LIBNAME Identifies the special LIBNAME domain ACL. C=cat Identifies the selected ACLs as names of catalog entries from the catalog cat. This value must be paired with the T= option. T=type Identifies the catalog entry type used to qualify the selected ACLs when the C=cat option is specified. userlist can be user name = (Y/N,Y/N,Y/N,Y/N) for (READ,WRITE,ALTER,CONTROL).
162 Chapter 14 • ACL Security Overview Modify Generic Column ACL This modifies generic column ACL, MINE*.SALARY, to add explicit READ and WRITE access for a given user. modify acl mine.salary/generic debby=(y,y,n,n); Modify ACL for a Catalog This modifies catalog MYCAT to remove universal READ and group WRITE access. set acltype catalog; modify acl mycat/noread nogroupwrite; Modify Generic ACL for Catalog Entries This modifies a generic ACL for catalog entries, MYCAT.MY*.
LIST ACL Examples LIST ACL Examples List All ACL Entries This lists all ACL entries for the current ACL type setting. list acl _all_; List a Generic ACL This lists a generic ACL entry for MINE*. list acl mine/generic; List All Column ACLS for a Table This lists all column ACLs for table MINE_JAN2003. list acl mine_jan2003._all_; List All Column ACLs for All Tables This lists all column ACLs for all tables. list acl _all._all_; List a Specific Column This lists the column ACL for MINE_JAN2006.SALARY.
164 Chapter 14 • ACL Security Overview DELETE ACL and DELETE ACL _ALL_ DELETE ACL acl1 acl2... [C=cat T=type] /options DELETE _ALL_[C=cat T=type] /options; Deletes existing ACLs for resources acl1 acl2... where ACL entries acl1 acl2... can be onepart resource names or two-part table.column names. Specifying _ALL_ deletes all existing resource ACLs for which you have control access. Specifying _ALL_ as the table identifier in a two-part name deletes all tables for which the given column is matched.
Symbolic Substitution Example 165 Delete All Column ACLs on a Table This deletes all column ACLs on table KBIKE. delete acl kbike._all_; Delete All Column ACLs on All Tables This deletes all column ACLs on all tables. delete acl _all_._all_; Delete a Catalog ACL This deletes an ACL on the catalog RBIKE. set acltype catalog; delete acl rbike; Delete a Generic ACL on Catalog Entries This deletes a generic ACL on the catalog entries MYCAT.MY*.CATAMS.
166 Chapter 14 • ACL Security Overview connect to sasspds (dbq="path1" server=host.
ACL Security Examples 167 "@SPDSSPEC" = "TRUE") by sasspds; /* /* /* /* /* Create a view to worktable that allows users to access only rows where the column "usergrp" matches their group.
168 Chapter 14 • ACL Security Overview pathname=/IDX1/spdsmgr/colsec owner=boss ; LIBNAME=onepath pathname=/IDX1/spdsmgr/onepath ; Password database List: User Level Entry Type Group ----------------------------------ADMINGRP 0 GROUP ENTRY GROUP1 0 GROUP ENTRY GROUP2 0 GROUP ENTRY GROUP3 0 GROUP ENTRY GROUP4 0 GROUP ENTRY PRODGRP 0 GROUP ENTRY ADMIN1 7 user ID ADMINGRP ADMIN2 7 user ID ADMINGRP PROD1 7 user ID PRODGRP PROD2 7 user ID PRODGRP USER1 0 user ID GROUP1 USER2 0 user ID GROUP2 USER3 0 user ID G
ACL Security Examples 169 add ACL / libname ; modify ACL / LIBNAME prodgrp=(y,y,y,y) group1=(y,y,n,n) group2=(y,n,n,n) group3=(y,n,n,n) ; /* Give spedific users access to */ /* the domain */ modify ACL / LIBNAME user7=(y,n,n,n) admin1=(y,n,n,n) ; list ACL _all_ ; quit ; The ID 'prod2' is in the group which has permissions to control the LIBNAME ACL. Any ID in that group can modify the LIBNAME ACL.
170 Chapter 14 • ACL Security Overview /* /* /* /* The ACLSPECIAL= statement allows */ the user 'admin1' to operate under */ the user ID 'prod1', allowing the */ ACLs to be modified. */ set acluser prod1 ; modify ACL / LIBNAME admingrp=(y,n,n,n) ; list ACL _all_ ; quit ; LIBACLINHERIT If the LIBACLINHERIT parameter file option is turned on, the ACL precedence of permission checks changes. Turning on LIBACLINHERIT creates a LIBNAME ACL on the specified LIBNAME domain.
ACL Security Examples end; run; /* Set up libname access for user anonymous */ PROC SPDO library=libinher; /* set who will own these ACLs */ set acluser admin; /* Add a libname ACL to d1 */ add acl / LIBNAME; /* Modify libname ACL Domain d1 */ /* Allow users in Group 1 read-only */ /* access to the domain */ modify acl / LIBNAME read; list acl _all_; quit; /* Set up libname access for user anonymous */ PROC SPDO library=noinher; /* Specify who owns these ACLs */ set acluser admin ; /* add a libname A
172 Chapter 14 • ACL Security Overview server=zztop.5129 user='anonymous'; PROC PRINT data=a_inher.admins_table; title 'with libaclinher'; run; PROC PRINT data=a_noher.admins_table; title 'without libaclinher'; run; Anonymous User Account The SPD Server uses a general ID that is called 'anonymous'. Any person that can connect to the server can do so using the anonymous user ID. The anonymous ID cannot be removed from the password database using the psmgr utility and the delete command.
ACL Security Examples LIBNAME user1 sasspds 'onepath' server=zztop.5162 user='user1' password='spds123' IP=YES ; PROC PRINT data=user1.
174 Chapter 14 • ACL Security Overview title 'mary reading anonymous_table' ; run ; /* Mary can't write to anonymous_table */ data mary.anonymous_table ; do i = 1 to 100 ; output ; end ; run ; Read Only Tables A common security measure in SPD Server assigns an SPD Server ID to act as the owner of a domain and to provide control over it. Typically, one or two user IDs administer table loads and refreshes .
ACL Security Examples 175 /* create two tables */ data d1.admin1_table1 ; do i = 1 to 100 ; output ; end ; run ; /* admin1 has write priviliges to */ /* the domain */ data d1.
176 Chapter 14 • ACL Security Overview 'read admin1_table1 by user1' ; run ; PROC PRINT data=user1d1.admin1_table2 (obs=10) ; title 'read admin1_table2 by user1' ; run ; /* Test access for a user in group2 */ LIBNAME user2d1 sasspds 'd1' server=zztop.5162 user='user2' password='spds123' IP=YES ; PROC PRINT data=user2d1.admin1_table1 (obs=10) ; title 'read admin1_table1 by user2' ; run ; PROC PRINT data=user2d1.
ACL Security Examples 177 LIBNAME user1d1 sasspds 'd1' server=zztop.5162 user='user1' password='spds123' IP=YES ; PROC PRINT data=user1d1.admin1_table2 (obs=10) ; title 'read admin1_table2 by user1' ; run ; /* Test access for a user in group2 */ LIBNAME user2d1 sasspds 'd1' server=zztop.5162 user='user2' password='spds123' IP=YES ; PROC PRINT data=user2d1.
178 Chapter 14 • ACL Security Overview add ACL / LIBNAME ; /* Allow any user in same group */ /* as admin to read, write, or */ /* alter tables in the domain */ modify ACL / LIBNAME admingrp=(y,y,y,n) group1=(y,n,n,n) group2=(y,n,n,n) group3=(y,y,n,n) group4=(y,y,n,n) ; list ACL _all_; run; /* admin1 has write privileges to */ /* the domain */ data d1.
ACL Security Examples data d1.admin1_table2 ; do i = 1 to 100 ; output ; end ; run ; /* generic ACL allows all users to /* read the tables */ */ PROC SPDO library=d1 ; /* assign who owns the ACLs */ set acluser admin1 ; /* /* /* /* /* /* Add a table and modify LIBNAME ACL for groupread and groupwrite.
180 Chapter 14 • ACL Security Overview /* in the same group as admin2 need /* to read tables created by admin2. */ */ add ACL / generic read groupread groupalter ; list ACL _all_; /* admin (same group) can read the /* table */ */ PROC PRINT data=d1.admin2_table (obs=10) ; title 'read by admin' ; run ; /* Admin has been given the ability to */ /* modify or replace tables created by */ /* admin2 with 'groupalter' */ data d1.
ACL Security Examples 181 password='spds123' IP=YES ; This example assumes that the Table prod1_table is already loaded in the domain and that the groups who use the table have access. PROC SPDO library=d2 ; /* assign who will owns these ACLs */ set acluser prod1 ; Modify the table ACL in the following ways: • Revoke read and control by user IDs that are in the same group. This prevents locks during table refreshes.
182 Chapter 14 • ACL Security Overview set acluser prod1 ; There is no need to issue an add ACL command for prod1_table. Deleting a table or replacing a table does not delete the ACLs. The ACL for that table remains until: • The table ACL is deleted using PROC SPDO delete syntax. • The table is deleted and another user creates a table with the same name. At that time, the ACLs have not been deleted. Deleting the table releases any rights that owner has on the table.
ACL Security Examples prodgrp=(y,y,y,y) group1=(n,n,n,n) group2=(n,n,n,n) group3=(n,n,n,n) group4=(n,n,n,n); list ACL _all_ ; run ; /* Modify ACL for tables to be refreshed */ PROC SPDO library=d2 ; /* set who owns the ACLs */ set acluser prod1 ; /* /* /* /* Modify table ACL to revoke read and */ control by user IDs in same group, */ which prevents locks during table */ refreshes.
184 Chapter 14 • ACL Security Overview run ; ACL Special Users SPD Server user IDs have two levels, 0 through 3 and 4 through 7. Level 4 through 7 user IDs can log in as an SPD Server 'super user' that can: • access any table • change table ACLs • disconnect users • perform administrative functions in a pinch In many ways, SPD Server super users must be able to take on database administrator functions.
ACL Security Examples 185 list ACL _all_ ; quit; Column-Level Security The goal of column-level security is to allow only privileged users to access sensitive columns of tables that other users cannot read. LIBNAME user1 sasspds 'onepath' server=zztop.5161 user='user1' password='spds123'; LIBNAME user2 sasspds 'onepath' server=zztop.5161 user='user2' password='spds123' aclgrp='group2'; LIBNAME user6 sasspds 'onepath' server=zztop.
186 Chapter 14 • ACL Security Overview run; /* Example of every BUT user2 in */ /* group2 being allowed to read */ /* column salary */ PROC SPDO library=user1 ; /* Assign who owns the ACLs */ set acluser; /* Clean Up Column ACL */ delete ACL t.salary; /* Create an ACL on column t.salary*/ /* to only allow members of group2 to */ /* read the column */ add ACL t.salary; modify ACL t.salary / user2=(y,n,n,n); /* User permissions have priority over */ /* group permissions.
Example - Listing ACL Objects using SQL Pass-Through 187 othgrps char(40) Label = 'Other Groups' expire char(6) Label = 'Expire Period' mod_date char(32) Label = 'Password Last Modified' log_date char(32) Label = 'Last Login' timeout char(6) Label = 'Timeout Period' strikes char(6) Label = 'Failed Login Attempts'} DICTIONARY.
188 Chapter 14 • ACL Security Overview Using SPD Server with an Internet Firewall Overview of Using SPD Server with a Firewall SPD Server and its clients communicate through ports that permit requests to be sent to the server and that send and receive data (such as table rows) between client and server. If the server is running with an Internet firewall, the ports that the client and server use must be configured so that the firewall will allow the communication.
Overview of SPD Server Auditing 189 and the SRVOPORT parameter defines the operator port. If the listen and operator ports are not defined, or are defined as a zero value, the SPD Server will by default use spdsserv_sas and spdsserv_oper in the operating system's services file. If there are no listen or operator ports defined in the operating system's services file, then SPD Server will choose any available ports for listen and operator port functions.
190 Chapter 14 • ACL Security Overview your SPD Server installation. These programs enable you to input the audit logs into SAS tables. Then, you can query the SAS tables to determine access to SPD Server tables and resources. Proxy Auditing Proxy auditing provides a means to determine access to SPD Server resources.
SQL Query Auditing 191 • Read permissions that were granted to an SPD Server user to access a resource • Write permissions that were granted to an SPD Server user while accessing a resource • the ACLs that are associated with a resource WHERE Clause Auditing WHERE clause auditing provides an audit record that contains the following information: • the length of the WHERE clause • the contents of the WHERE clause WHERE clause auditing is enabled using the WHEREAUDIT option.
192 Chapter 14 • ACL Security Overview
193 Chapter 15 Managing SPD Server Passwords, Users, and Table ACLs Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 The Password Manager Utility psmgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Overview of the psmgr Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Invoking the psmgr Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
194 Chapter 15 • Managing SPD Server Passwords, Users, and Table ACLs (directory path) where the table is located. The owner of the password table, typically the SPD Server administrator, can update the table.
Adding New Users with psmgr 195 1. Start the SPD Server 3.x psmgr utility using your SPD Server 3.x password table. 2. Export your SPD Server 3.x password table. 3. Start the SPD Server 4.5 psmgr utility with a new table. 4. Import the exported file from step 2 into the new password table.
196 Chapter 15 • Managing SPD Server Passwords, Users, and Table ACLs 30 8. Enter the group name if the user is part of an ACL group, or skip this step by pressing Enter. For example: groupname The user debby is added. The temporary password is good for one logon. The second part changes the user's password. Change the user's password with the NEWPASSWD= option.
psmgr Command Details 197 psmgr Commands The psmgr utility is an interactive program. It reads commands and operands from your computer, and prompts you for input when necessary. You can also send a file of commands to the utility, structuring each command so that no input is required. The commands and operands are positional, and they must be separated by blank spaces. If you give an insufficient number of operands, the utility prompts you for the remaining operands.
198 Chapter 15 • Managing SPD Server Passwords, Users, and Table ACLs expiretime a password expiration time; or a dash (-), which indicates that no password expiration time is being specified. The expiration time requires the user to change his password before the specified number of days has expired. The value, which is specified in days, represents the number of days from today (the current day) that the password is valid.
psmgr Command Details 199 CHGAUTH changes the authorization level for a user. Syntax chgauth username authlevel Arguments username the user ID of an SPD Server user. authlevel an authorization level for the user, which is specified using numbers 0 through 7. See the argument in the ADD command for an explanation of the numbers. CHGEXPIRE changes the expiration date for a given user's password. By default, a new user ID is created with an expired password.
200 Chapter 15 • Managing SPD Server Passwords, Users, and Table ACLs Arguments username the user ID of an SPD Server user. timeoutperiod a password logon timeout period. The timeout period requires the user to successfully logon before the specified number of days has expired. The value, which is specified in days, represents the number of days from the last successful logon that the password is valid. CHGPASS changes the password for a user.
psmgr Command Details 201 The EXPORT command generates a single line in the flat file for each record in the password table. User passwords are encrypted in the table. What you see in the flat file is a representation of what is stored in the password table. When you have changes that affect many users, it might be easier to edit the flat file than to use the psmgr utility. After making changes in the file, you can use the IMPORT command to construct a new, modified password table.
202 Chapter 15 • Managing SPD Server Passwords, Users, and Table ACLs Note: If you use the groupmem command in batch mode, the syntax requires you to submit five groupname arguments. If you want to update the user ID with less than five ACL group members, replace the empty groupname arguments with “ “. GROUPS lists the all the ACL groups in the password table. Syntax groups HELP displays general or command-specific help for the psmgr utility. Syntax help [command] Arguments command a psmgr command.
Using a File as Input to psmgr 203 Example list bar This example might produce the following listing: USER AUTHORIZATION IP ADDRESS ---- ------------- ----------bar 7 RESET resets a password for a user. The RESET command resets a user's password after three consecutive failed attempts to connect to a server. After the third failed attempt, the user ID is no longer enabled. After the password has been reset, the user must change the password before he can connect to a server.
204 Chapter 15 • Managing SPD Server Passwords, Users, and Table ACLs file. In UNIX environments, you can secure access to command files using native UNIX file permissions. To run the psmgr utility using the command file named pscmds as input, use the appropriate syntax: For UNIX: psmgr /usr/local/SPDS/site < pscmds For Windows: psmgr d:\spds\site < pscmds SAS Management Console Overview of SAS Management Console SPD Server supports the SAS Management Console.
Configuring LDAP Authentication 205 record is required for each SPD Server user. SPD Server uses the psmgr utility's password database to perform user access control tasks and other tasks that are not related to user authentication. • Users that connect to an SPD Server must have corresponding logon information on the LDAP server. The LDAP server user ID and the SPD Server user ID formats are the same. The logon password format is the host-operating-system format. A user ID must be 8 characters or less.
206 Chapter 15 • Managing SPD Server Passwords, Users, and Table ACLs
207 Part 6 System Management Chapter 16 SPD Server Operator Interface Procedure (PROC SPDO) . . . . . . . . . 209 Chapter 17 SPD Server Index Utility Ixutil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Chapter 18 SPD Server Table List Utility Spdsls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Chapter 19 SPD Server Backup and Restore Utilities . . . . . . . . . . . . . . . . . . . . . . . . 231 Chapter 20 SPD Server Directory Cleanup Utility . . . . . . . . .
208
209 Chapter 16 SPD Server Operator Interface Procedure (PROC SPDO) Special SPDO Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Overview of SPDO Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 SPDO Command Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 LIBNAME Proxy Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
210 Chapter 16 • SPD Server Operator Interface Procedure (PROC SPDO) SPDO Command Examples 1. List the WORKPATH directory: spdscmd 'ls /spdswork/*.spds'; spdscmd 'dir d:\spdswork\*.spds'; 2. Clean up WORKPATH files: spdscmd 'rm /spdswork/*.spds'; spdscmd 'del d:\spdswork\*.spds'; LIBNAME Proxy Commands Overview of Proxy Commands To issue proxy commands, you must first select the SPD Server user proxy.
LIBNAME Proxy Command Examples 211 used with a data set name dsname, detailed information about the specified data set table is displayed. LIBNAME Proxy Command Examples 1. List all of the users for the server 'sunburn.
212 Chapter 16 • SPD Server Operator Interface Procedure (PROC SPDO) 6. The user ANONYMOU performs a WHERE clause on the table BIGX. Show all of the open tables in LIBNAME FOO: showlibname FOO/data=_all_; LIBREF(FOO):Dataset name=BIGX LIBREF(FOO):ACL Owner=ANONYMOU LIBREF(FOO):ACL Defaults(R,W,A,C)=(N,N,N,N) LIBREF(FOO):WHERE clause read thread active 7.
Privileged OPER Commands 213 set user/locking anonymou threadid 7; NOTE: User ANONYMOU connected to record level proxy operator port with thread=7. 10. Show every LIBNAME for locking user ANONYMOU: showlibname _all_; LIBREF(LOCKING):Pathname assigned=/bigdisk/test/qabig1/ LIBREF(LOCKING):ACL Owner= LIBREF(LOCKING):ACL Defaults(R,W,A,C)=(Y,Y,Y,Y) 11. Show all of the open tables in LIBNAME LOCKING: showlibname LOCKING/data=_all_; NOTE: No data sets currently opened for LIBREF LOCKING.
214 Chapter 16 • SPD Server Operator Interface Procedure (PROC SPDO) unusable state. In this case, you can submit the PROC DATASETS REPAIR command to restore the tables to a usable state. The OPER DISCONNECT command differs from the OPER CANCEL command. When the OPER DISCONNECT command is submitted, the user proxy continues until it detects that the control socket connection has been dropped. As a result, the OPER DISCONNECT command has the potential to complete.
REFRESH Command Examples 215 /* verify the contents of the created table */ PROC CONTENTS data=&domain..staceys_table ; run; /* SPDO Truncate command deletes the table */ /* data but leaves the table structure in */ /* place so new data can be appended */ PROC SPDO lib=&domain; SET acluser; TRUNCATE staceys_table; quit; /* verify that no rows or data remain in */ /* the structure of staceys_table */ PROC CONTENTS data=&domain..
216 Chapter 16 • SPD Server Operator Interface Procedure (PROC SPDO) password='spds123' aclspecial=YES prompt=YES; PROC SPDO library=spds44; SET acluser admin; REFRESH PARMS; REFRESH DOMAINS; quit; Here is a more detailed example: /* Domain reftest is a pre-existing domain. /* Add domain reftest2 to libnames.
Commands to Nonexistent Users 217 the user ends the SAS session, or disconnects from a LIBNAME and the user proxy. If you submit an OPER command to a user that is no longer in session, or to a user that has ended a locking user proxy, you get the following message: ERROR: Specified locking user no longer exists. If the disconnected user used a non-locking user proxy, and you submit an OPER command, you get the following message: ERROR: Specified user with pid no longer exists.
218 Chapter 16 • SPD Server Operator Interface Procedure (PROC SPDO)
219 Chapter 17 SPD Server Index Utility Ixutil The Index Utility Ixutil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Ixutil Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Ixutil Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Ixutil Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
220 Chapter 17 • SPD Server Index Utility Ixutil ixutil -statjidx < data set2,column2> ... -libpath ; Gather statistics about the join index parts. Pay attention to the average join row percentage, which indicates the average number of rows that are read by a parallel join work unit. For example, a percentage of 75 indicates the parallel join work unit will use 75 percent of the rows it must read.
Create a Hybrid Index 221 -stats For each specified index, prints the index disk usage statistics and value segment list statistics. -runstats < index,index...> [ For each specified index, print the "run" statistics. "Runs" are defined as successive observations in a table that contain the same index value -reorg For each index, reorganize the index to reclaim any unused disk space and coalesce any fragmented value segment lists.
222 Chapter 17 • SPD Server Index Utility Ixutil base=my_data.test data=my_data.test1; run; PROC SQL; delete from my_data.test where x=1; quit; The SAS program above creates a hybrid index for column X of the table named test, on the machine named spot, in the directory named /spds.
Retrieve Index Distribution Statistics 223 • The average number of chunks for any value in the index. • The size of the idx file for the index. The idx file maintains the value segment lists and bitmaps. • The number of garbage bytes in the idx file. This is space in the file that was thrown away and cannot be reclaimed. Garbage bytes can result from deleting values, updating values, or appending values. • The percentage of garbage bytes in the idx file.
224 Chapter 17 • SPD Server Index Utility Ixutil • The minimum number of segments that any value is in. • The maximum number of segments that any value is in. • The average number of segments that all values are in. • The average percentage of segments that all values are in. The distribution statistics can be used to determine the effectiveness of the index. The index will perform better if the distribution of the index values is clustered in a minimum number of segments.
Generate Join Index Statistics +--n_seglist_chunks +--avg_chunks_per_list +--idx_file_bytes +--idx_garbage_bytes +--percent_idx_garbage = = = = = 225 2 1.00 9008 0 0.00 Create a Join Index Assume there are SPD Server tables in a domain in directory /tmp. A user has created two tables, Table1 and Table2 that can be joined on column ID. An SPD Server index exists on the column ID for both tables. A join index is created on the tables to allow a Parallel Range Join on column ID.
226 Chapter 17 • SPD Server Index Utility Ixutil +----: sobs=25001 eobs=50000 (Sorted) +-------unique_keys=25000, max_occurance=1 +-------obs=25000, joinobs=25000, rangepct=100.00 +----: sobs=-1 eobs=0 +-------unique_keys=0, max_occurance=0 +-------obs=2, joinobs=0, rangepct= 0.00 +-Range 2 +----: sobs=50001 eobs=75000 (Sorted) +-------unique_keys=25000, max_occurance=1 +-------obs=25000, joinobs=25000, rangepct=100.
227 Chapter 18 SPD Server Table List Utility Spdsls SPD Server Table List Utility Spdsls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
228 Chapter 18 • SPD Server Table List Utility Spdsls spdsls -info For a specified SPD Server table in the LIBNAME domain, list information about the table. This option provides one line of information about the table as a whole rather than a listing for each component of the table. Options -a Will include the domain ACL files in the listing. The files contain the ACLs (Access Control Lists) for any SPD Server table in the domain. -aonly Will include only the domain ACL files in the listing.
Spdsls Examples 229 [Table...] The table(s) to list. (If no table is specified, all tables in the LIBNAME domain are listed.) Return Values When spdsls exits, it generates a return value. If the spdsls return value is 0, the utility was successful. If the spdsls return value is 1, the utility was unable to complete normally.
230 Chapter 18 • SPD Server Table List Utility Spdsls
231 Chapter 19 SPD Server Backup and Restore Utilities Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Overview of the SAS Scalable Performance Data Server Backup and Restore Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Using Utilities with SPD Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
232 Chapter 19 • SPD Server Backup and Restore Utilities Restore Usage Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Using PROC SPDO to Back Up and Restore SPD Server Tables . . . . . . . . . . . . . 246 Back Up and Restore Table Indexes using SPD Server Full Backups . . . . . . . . . . 247 Back Up and Restore SPD Server Table Indexes using System Full Backups . . . 248 Back Up and Restore SPD Server Table Indexes Using System Full Backups . . .
Privileged Access Protection 233 • spdsbkup Performs incremental or full backups of SPD Server tables, storing the information in an SPD Server backup data file. • spdsrstr Performs incremental or full restores of SPD Server tables using the SPD Server backup data file created by the utility. Using Utilities with SPD Server SPD Server Utilities Path Requirements SPD Server provides National Language Support (NLS) for multiple languages and character sets in database operations.
234 Chapter 19 • SPD Server Backup and Restore Utilities Spdsbkup - the Table Backup Utility Description Spdsbkup performs a full or incremental backup of an SPD Server table or LIBNAME domain. It also creates a backup file that contains full backups of newly created SPD Server tables or incremental backups of tables that have been backed up before.
Example Libnames.parm Statements 235 Backup Requirements Client Access to an SPD Server Domain The client that performs the backup does not have to execute on the same machine as the SPD Server. However, the client must be able to access the physical path of the SPD Server domain that is being backed up. Access by the client to the physical path of the domain can be direct or through a network connection.
236 Chapter 19 • SPD Server Backup and Restore Utilities Backup Usage spdsbkup -d -f -h [-hash] [-s ] [-u ] [-fibfact ] [-p ][-t ] [-r ] [-a | -aonly] [-n] [-q] [-v] [-nv6warn] [-proj ] [Table ...] spdsbkup -inc -d -f -h [-hash] [-s ] [-u ] [-fibfact ] [-p ][-t ] [-r ] [-a | -aonly] [-q] [-v] [-nv6warn] [-proj ] [Table ...
Backup Options 237 -aonly Only include the domain ACL files in the backup. No tables will be backed up. -d The SPD Server LIBNAME domain. Note: The system that performs the backup must be able to access the physical path for the domain locally or through a network connection. -f The prefix filename for the backup data file. This filename is concatenated with _BK_ddmmmyyy_hhmmss.0.0.0.spds. The complete name identifies it as an SPD Server backup file.
238 Chapter 19 • SPD Server Backup and Restore Utilities -r The number of times spdsbkup should retry accessing a table that is not available to spdsbkup because it is being updated. A table that is being updated cannot be backed up. Spdsbkup 4.5 pauses five seconds, then retries the table if it was unavailable during the previous access attempt. The default retry count is one. -s The port number of the name server. If this is not specified, the default value is spdsname.
Backup Table of Contents File 239 The spdsbkup utility stores backup data in a file named file_BK_ddmmmyyyy_hhmmss. 0.0.0.spds. The suffix, added to the filename, generates a unique backup file that indicates when the backup was performed. Because the suffix is unique, the same filename can be used for successive backups of a domain or a table, without overwriting an existing file.
240 Chapter 19 • SPD Server Backup and Restore Utilities After performing each SPD Server backup, you should append the resulting table of contents file to the SAS table of contents backup file. This is an important step because it saves the backup history, and assists later when restoring tables. For example, if you want to determine which backup files you need to restore a specific table, using a last full backup with a known date, you could create the following SQL query: select bk_file from foo.
Restore Options 241 • When an incremental backup is restored, only the incremental changes to the observations are applied. • When a full backup is restored, the table is created with the attribute settings that existed when the full backup was performed, and then all of the rows are added. Restore Requirements Before you can use the spdsrstr utility to restore a table, the following must be true: • The table to be restored must be identical to the table that was backed up.
242 Chapter 19 • SPD Server Backup and Restore Utilities -aforce restore the backed up domain ACL files if they do not exist or overwrite the current files if they do exist. Note: This option should be used when restoring multiple files with the -e option to ensure that the domain ACL files are consistent with the last file restored. -aonly Only restore the domain ACL files, and nothing else. -d The SPD Server LIBNAME domain.
Restore Usage Examples 243 -v Verify which tables in the backup file can be restored, but do not actually perform the restore operations. [Table ...] The list of tables to restore from the backup file. If no tables are specified, all tables in the file are restored. Note: The list of tables must be the last option specified in your spdsrstr command. Restore Return Values When spdsrstr exits, it generates a return value. If the spdsrstr return value is 0, the utility was successful.
244 Chapter 19 • SPD Server Backup and Restore Utilities Example 1: Exclusive SPD Server Full and Incremental Backups You can use SPD Server backup and restore utilities exclusively to perform full and incremental table backups and restores. This example outlines the steps you use to perform a full backup of your domain once a week, and to perform incremental backups the rest of the week. The incremental backups will also fully back up any newly created tables. 1.
Restore Usage Examples 245 The utility creates the backup data file backup_BK_04Feb2008_233000.0.0.0.spds and a backup table of contents file backup_TC_04Feb2008_233000. The backup file contains incremental changes for tables that were modified after 23:30:00 on February 3, 2008, and full backups of tables created after 23:30:00 on February 4, 2008. Only the tables that were modified or created since the last full backup date are included in the backup file.
246 Chapter 19 • SPD Server Backup and Restore Utilities Alternatively, you could use the -e option of spdsrstr and restore all of the files with one single command: spdsrstr -d test -h hostname -s serv -e backup results Note: When you restore a single table, you do not need to restore the ACL files, because they were not deleted.
Back Up and Restore Table Indexes using SPD Server Full Backups 247 Use the following steps to use PROC SPDO to execute SPD Server backup and restore utilities: 1. Create an SPD Server LIBNAME, and specify 'special' privileges. libname backup sasspds 'test' host='sunny' serv='5150' user='admin' passwd='admin' ACLSPECIAL=YES; Our example creates the LIBNAME backup for domain "test" on the host machine 'sunny'. The port number of the name server is 5150, and 'admin' is the SPD Server user ID and password.
248 Chapter 19 • SPD Server Backup and Restore Utilities Back Up and Restore SPD Server Table Indexes using System Full Backups Back Up and Restore SPD Server Table Indexes Using System Full Backups Restoring indexes from system full backups and restores is not as clean as restoring indexes from SPD Server full backups and restores.
Method 2 – Recreate the Index after the Table Is Restored 249 The second method trades the resources that you save by not fully backing up the index files against the greater amount of time it can take to recreate the indexes fully, if the table must be restored.
250 Chapter 19 • SPD Server Backup and Restore Utilities
251 Chapter 20 SPD Server Directory Cleanup Utility Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Using the Directory Cleanup Utility Spdsclean . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Spdsclean Wildcards and Pattern Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Spdsclean Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
252 Chapter 20 • SPD Server Directory Cleanup Utility Using the Directory Cleanup Utility Spdsclean The spdsclean program is a command-line utility. It supports a set of command-line options and parameters you use to specify the location and names of tables to convert, and behaviors that you want to control during the conversion process. The command line is as follows: spdsclean <-options> The order of options on the command line does not matter. All options are global in scope.
Spdsclean Options that Modify Behavior 253 -parmfile parmFile The -parmfile option to the spdsclean command runs cleanup on the specified SPD Server environment that is defined in the named SPD Server parameter file. The cleanup action empties all directory resources that are defined in the SPD Server parameter file. All files contained in the WORKPATH= path list are deleted.
254 Chapter 20 • SPD Server Directory Cleanup Utility -lib11 The -lib11 setting enables deletion of the domain state file, .spdslib11. The default setting is +lib11. +lib11 The +lib11 setting disables deletion of the domain state file. This is the default setting for the lib111 variable. -verbose The -verbose setting is equivalent to specifying -vwork and -vdomain,enabling logging for resource cleanup from WORKPATH, system workspace directories, and LIBNAME domain directories.
Cleaning WORKPATH and LIBNAME Combinations 255 If you want spdsclean to log the files it deletes, add the -verbose option to the command. spdsclean -parmfile /opt/spds45/site/spdsserv.parm -verbose Cleaning Residual Temporary LIBNAME Domain Files This spdsclean command cleans all of the residual temporary files from all of the LIBNAME domains that are defined in the -libnamefile specified. spdsclean -libnamefile /opt/spds45/site/libnames.
256 Chapter 20 • SPD Server Directory Cleanup Utility spdsclean -parmfile /opt/spds45/site/spdsserv.parm -libnamefile /opt/spds45/site/libnames.parm -verbose Logging occurs for the WORKPATH and LIBNAME domain directories and for the files that were deleted from each. Cleaning Log Files This spdsclean command cleans the .spdslog files from the specified -logdir directory that are more than seven days old.
Glossary 257 Libnames.param File The libnames.parm file defines the SPD Server LIBNAME domains for the SPD Server environment. The libnames.parm file is a collection of LIBNAME statements. Each LIBNAME statement defines a storage domain that SPD Server uses with clients. You modify the libnames.parm file using the -libnamefile option with the spdsserv command. Residual Lock File When SPD Server accesses a data resource or table within a LIBNAME domain, it creates a lock file.
258 Chapter 20 • SPD Server Directory Cleanup Utility
259 Chapter 21 SPD Server Debugging Tools Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 SPD Server 4.5 LIBNAME Statement Debug Options . . . . . . . . . . . . . . . . . . . . . . 259 DEBUG= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 ALTPATH= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
260 Chapter 21 • SPD Server Debugging Tools YES launches a debug image (spdsbased and spdsengd) which will enable a good traceback. CORE launches debug images and sets the SPD Server parameter file option for that proxy. This ensures a good core file. NO disables the debug image for the specified proxy, if one is present.
RECORDFLAGS= 261 ALTBINPATH= Description The ALTBINPATH= option specifies the path to an alternate executable binary file directory. An alternate binary file path allows system administrators to load a nonproduction copy of SPD Server without having to replace the production copy of SPD Server. Syntax The ALTBINPATH= server parameter file option is enabled when a LIBNAME statement that contains a valid ALTBINPATH= specification is issued.
262 Chapter 21 • SPD Server Debugging Tools and to produce a core file if an unexpected exception is encountered while running (bit flag 4).
Your Turn We welcome your feedback. • If you have comments about this book, please send them to yourturn@sas.com. Include the full title and page numbers (if applicable). • If you have comments about the software, please send them to suggest@sas.com.
SAS Publishing Delivers! ® Whether you are new to the work force or an experienced professional, you need to distinguish yourself in this rapidly changing and competitive job market. SAS Publishing provides you with a wide range of resources to help you set yourself apart. Visit us online at support.sas.com/bookstore. ® SAS Press ® Need to learn the basics? Struggling with a programming problem? You’ll find the expert answers that you need in example-rich books from SAS Press.