docs.datacontroller.io/dci-deploysas9/index.html

1444 lines
39 KiB
HTML
Raw Normal View History

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="How to deploy Data Controller in a production SAS 9 environment">
<link rel="canonical" href="https://docs.datacontroller.io/dci-deploysas9/">
<link rel="shortcut icon" href="../img/favicon.ico">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.1.0">
<title>DC SAS 9 Deployment - Data Controller for SAS® Documentation</title>
<link rel="stylesheet" href="../assets/stylesheets/main.bc7e593a.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab28b872.min.css">
<meta name="theme-color" content="#ffffff">
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,400i,700%7CUbuntu+Mono&display=fallback">
<style>body,input{font-family:"Open Sans",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Ubuntu Mono",SFMono-Regular,Consolas,Menlo,monospace}</style>
<link rel="manifest" href="../manifest.webmanifest" crossorigin="use-credentials">
<link rel="stylesheet" href="../font-awesome.css">
<meta name="author" content="Allan Bowe">
<meta property="og:type" content="website" />
<meta property="og:title" content="Data Controller Documentation">
<meta property="og:url" content="https://docs.datacontroller.io/dci-deploysas9/" />
<meta property='og:image' content="https://docs.datacontroller.io/img/dci_deploymentdiagram.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:description" content="How to deploy Data Controller in a production SAS 9 environment" />
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "https://analytics.4gl.io/";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '4']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="white" data-md-color-accent="amber">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#sas-9-deployment" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid" aria-label="Header">
<a href="https://docs.datacontroller.io" title="Data Controller for SAS® Documentation" class="md-header-nav__button md-logo" aria-label="Data Controller for SAS® Documentation">
<img src="../img/favicon.ico" alt="logo">
</a>
<label class="md-header-nav__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<span class="md-header-nav__topic md-ellipsis">
Data Controller for SAS® Documentation
</span>
<span class="md-header-nav__topic md-ellipsis">
DC SAS 9 Deployment
</span>
</div>
</div>
<label class="md-header-nav__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active">
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header-nav__source">
<a href="https://github.com/datacontroller/dcdocs.github.io/" title="Go to repository" class="md-source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 00-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 01-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-40.81z"/></svg>
</div>
<div class="md-source__repository">
datacontroller/dcdocs.github.io
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://docs.datacontroller.io" title="Data Controller for SAS® Documentation" class="md-nav__button md-logo" aria-label="Data Controller for SAS® Documentation">
<img src="../img/favicon.ico" alt="logo">
</a>
Data Controller for SAS® Documentation
</label>
<div class="md-nav__source">
<a href="https://github.com/datacontroller/dcdocs.github.io/" title="Go to repository" class="md-source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 00-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 01-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-40.81z"/></svg>
</div>
<div class="md-source__repository">
datacontroller/dcdocs.github.io
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2">
<label class="md-nav__link" for="nav-2">
User Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="User Guide" data-md-level="1">
<label class="md-nav__title" for="nav-2">
<span class="md-nav__icon md-icon"></span>
User Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dc-overview/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../dc-userguide/" class="md-nav__link">
DC User Guide
</a>
</li>
<li class="md-nav__item">
<a href="../dcu-datacatalog/" class="md-nav__link">
Data Catalog
</a>
</li>
<li class="md-nav__item">
<a href="../dcu-lineage/" class="md-nav__link">
Data Lineage
</a>
</li>
<li class="md-nav__item">
<a href="../dcu-fileupload/" class="md-nav__link">
File Uploads
</a>
</li>
<li class="md-nav__item">
<a href="../filter/" class="md-nav__link">
Filter Mechanism
</a>
</li>
<li class="md-nav__item">
<a href="../locking-mechanism/" class="md-nav__link">
Locking Mechanism
</a>
</li>
<li class="md-nav__item">
<a href="../dcu-tableviewer/" class="md-nav__link">
Table Viewer
</a>
</li>
<li class="md-nav__item">
<a href="../viewboxes/" class="md-nav__link">
ViewBoxes
</a>
</li>
<li class="md-nav__item">
<a href="../admin-services/" class="md-nav__link">
Admin Services
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
<label class="md-nav__link" for="nav-3">
Table Guide
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Table Guide" data-md-level="1">
<label class="md-nav__title" for="nav-3">
<span class="md-nav__icon md-icon"></span>
Table Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../tables/mpe_audit/" class="md-nav__link">
MPE_AUDIT
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_column_level_security/" class="md-nav__link">
MPE_COLUMN_LEVEL_SECURITY
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_config/" class="md-nav__link">
MPE_CONFIG
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_datacatalog_libs/" class="md-nav__link">
MPE_DATACATALOG_LIBS
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_datacatalog_tabs/" class="md-nav__link">
MPE_DATACATALOG_TABS
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_datacatalog_vars/" class="md-nav__link">
MPE_DATACATALOG_VARS
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_datastatus_libs/" class="md-nav__link">
MPE_DATASTATUS_LIBS
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_datastatus_tabs/" class="md-nav__link">
MPE_DATASTATUS_TABS
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_lockanytable/" class="md-nav__link">
MPE_LOCKANYTABLE
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_review/" class="md-nav__link">
MPE_REVIEW
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_submit/" class="md-nav__link">
MPE_SUBMIT
</a>
</li>
<li class="md-nav__item">
<a href="../tables/mpe_tables/" class="md-nav__link">
MPE_TABLES
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
<label class="md-nav__link" for="nav-4">
Configuration
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Configuration" data-md-level="1">
<label class="md-nav__title" for="nav-4">
<span class="md-nav__icon md-icon"></span>
Configuration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../column-level-security/" class="md-nav__link">
Column Level Security
</a>
</li>
<li class="md-nav__item">
<a href="../dcc-dates/" class="md-nav__link">
Dates / Datetimes
</a>
</li>
<li class="md-nav__item">
<a href="../dynamic-cell-dropdown/" class="md-nav__link">
Dynamic Cell Dropdown
</a>
</li>
<li class="md-nav__item">
<a href="../emails/" class="md-nav__link">
Emails
</a>
</li>
<li class="md-nav__item">
<a href="../excel/" class="md-nav__link">
Excel Formulas
</a>
</li>
<li class="md-nav__item">
<a href="../formats/" class="md-nav__link">
Formats
</a>
</li>
<li class="md-nav__item">
<a href="../dcc-groups/" class="md-nav__link">
Groups
</a>
</li>
<li class="md-nav__item">
<a href="../libraries/" class="md-nav__link">
Libraries
</a>
</li>
<li class="md-nav__item">
<a href="../dcc-options/" class="md-nav__link">
Options
</a>
</li>
<li class="md-nav__item">
<a href="../row-level-security/" class="md-nav__link">
Row Level Security
</a>
</li>
<li class="md-nav__item">
<a href="../dcc-security/" class="md-nav__link">
Security
</a>
</li>
<li class="md-nav__item">
<a href="../dcc-selectbox/" class="md-nav__link">
Selectboxes
</a>
</li>
<li class="md-nav__item">
<a href="../dcc-tables/" class="md-nav__link">
Tables
</a>
</li>
<li class="md-nav__item">
<a href="../dcc-validations/" class="md-nav__link">
Validations
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../macros/" class="md-nav__link">
Macros
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
<label class="md-nav__link" for="nav-6">
Installation
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Installation" data-md-level="1">
<label class="md-nav__title" for="nav-6">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dci-requirements/" class="md-nav__link">
System Requirements
</a>
</li>
<li class="md-nav__item">
<a href="../dci-deploysasviya/" class="md-nav__link">
SAS Viya Deploy
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
SAS 9 Deploy
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
SAS 9 Deploy
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#deployment-process" class="md-nav__link">
Deployment Process
</a>
<nav class="md-nav" aria-label="Deployment Process">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#full-deployment" class="md-nav__link">
Full Deployment
</a>
<nav class="md-nav" aria-label="Full Deployment">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1-deploy-stored-processes" class="md-nav__link">
1 - Deploy Stored Processes
</a>
</li>
<li class="md-nav__item">
<a href="#2-deploy-the-frontend" class="md-nav__link">
2 - Deploy the Frontend
</a>
</li>
<li class="md-nav__item">
<a href="#3-run-the-configurator" class="md-nav__link">
3 - Run the Configurator
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#streaming" class="md-nav__link">
Streaming
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#deployment-diagram" class="md-nav__link">
Deployment Diagram
</a>
<nav class="md-nav" aria-label="Deployment Diagram">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#client-device" class="md-nav__link">
Client Device
</a>
</li>
<li class="md-nav__item">
<a href="#sas-mid-tier" class="md-nav__link">
SAS Mid Tier
</a>
</li>
<li class="md-nav__item">
<a href="#sas-application-server" class="md-nav__link">
SAS Application Server
</a>
</li>
<li class="md-nav__item">
<a href="#sas-metadata-server" class="md-nav__link">
SAS Metadata Server
</a>
</li>
<li class="md-nav__item">
<a href="#databases" class="md-nav__link">
Databases
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../dci-stpinstance/" class="md-nav__link">
SAS 9 Dedicated STP
</a>
</li>
<li class="md-nav__item">
<a href="../dci-troubleshooting/" class="md-nav__link">
Troubleshooting
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
<label class="md-nav__link" for="nav-7">
Legal
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Legal" data-md-level="1">
<label class="md-nav__title" for="nav-7">
<span class="md-nav__icon md-icon"></span>
Legal
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../privacy/" class="md-nav__link">
Privacy Policy
</a>
</li>
<li class="md-nav__item">
<a href="../evaluation-agreement/" class="md-nav__link">
Evaluation Licence
</a>
</li>
<li class="md-nav__item">
<a href="../licences/" class="md-nav__link">
Other Licences
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../videos/" class="md-nav__link">
Videos
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9">
<label class="md-nav__link" for="nav-9">
Roadmap
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Roadmap" data-md-level="1">
<label class="md-nav__title" for="nav-9">
<span class="md-nav__icon md-icon"></span>
Roadmap
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../roadmap/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../api/" class="md-nav__link">
DC API
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="#deployment-process" class="md-nav__link">
Deployment Process
</a>
<nav class="md-nav" aria-label="Deployment Process">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#full-deployment" class="md-nav__link">
Full Deployment
</a>
<nav class="md-nav" aria-label="Full Deployment">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1-deploy-stored-processes" class="md-nav__link">
1 - Deploy Stored Processes
</a>
</li>
<li class="md-nav__item">
<a href="#2-deploy-the-frontend" class="md-nav__link">
2 - Deploy the Frontend
</a>
</li>
<li class="md-nav__item">
<a href="#3-run-the-configurator" class="md-nav__link">
3 - Run the Configurator
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#streaming" class="md-nav__link">
Streaming
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#deployment-diagram" class="md-nav__link">
Deployment Diagram
</a>
<nav class="md-nav" aria-label="Deployment Diagram">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#client-device" class="md-nav__link">
Client Device
</a>
</li>
<li class="md-nav__item">
<a href="#sas-mid-tier" class="md-nav__link">
SAS Mid Tier
</a>
</li>
<li class="md-nav__item">
<a href="#sas-application-server" class="md-nav__link">
SAS Application Server
</a>
</li>
<li class="md-nav__item">
<a href="#sas-metadata-server" class="md-nav__link">
SAS Metadata Server
</a>
</li>
<li class="md-nav__item">
<a href="#databases" class="md-nav__link">
Databases
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/datacontroller/dcdocs.github.io/edit/master/docs/dci-deploysas9.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="sas-9-deployment">SAS 9 Deployment<a class="headerlink" href="#sas-9-deployment" title="Permanent link">&para;</a></h1>
<h2 id="deployment-process">Deployment Process<a class="headerlink" href="#deployment-process" title="Permanent link">&para;</a></h2>
<p>There are two ways to deploy Data Controller on SAS 9:</p>
<ul>
<li>Full Deployment (preferred)</li>
<li>Streaming (for quick demos)</li>
</ul>
<h3 id="full-deployment">Full Deployment<a class="headerlink" href="#full-deployment" title="Permanent link">&para;</a></h3>
<h4 id="1-deploy-stored-processes">1 - Deploy Stored Processes<a class="headerlink" href="#1-deploy-stored-processes" title="Permanent link">&para;</a></h4>
<p>The Stored Processes are deployed using a SAS Program. This should be executed using an account that has WRITE METADATA (WM) permissions to the necessary root folder (<code>appLoc</code>) in metadata.</p>
<div class="highlight"><pre><span></span><code><span class="nb">%let</span> appLoc=/Shared Data/apps/DataController; <span class="c">/* CHANGE THIS!! */</span>
<span class="k">filename</span> dc url <span class="s">&quot;https://git.4gl.io/dc/deploy/-/raw/main/s9_noweb.sas&quot;</span>;
<span class="nf">%inc</span> dc;
</code></pre></div>
<p>If you don't have internet access from SAS, download <a href="https://git.4gl.io/dc/deploy/-/raw/main/s9_noweb.sas">this file</a> and change the <code>compiled_apploc</code> on line 2: </p>
<p><img alt="" src="../img/sas9_apploc.png" /></p>
<p>You can also change the <code>serverName</code> here, which is necessary if you are using any other logical server than <code>SASApp</code>.</p>
<h4 id="2-deploy-the-frontend">2 - Deploy the Frontend<a class="headerlink" href="#2-deploy-the-frontend" title="Permanent link">&para;</a></h4>
<p>The Data Controller frontend comes pre-built, and ready to deploy to the root of the SAS Web Server (mid-tier).</p>
<p>Deploy as follows:</p>
<ol>
<li>Download the zip file from: <a href="https://git.4gl.io/dc/deploy/-/raw/main/frontend.zip">https://git.4gl.io/dc/deploy/-/raw/main/frontend.zip</a></li>
<li>Unzip and place in the <a href="https://sasjs.io/frontend-deployment/#sas9-deploy">htdocs folder of your SAS Web Server</a> - typically <code>!SASCONFIG/LevX/Web/WebServer/htdocs</code>.</li>
<li>Open the <code>index.html</code> file and update the values for <code>appLoc</code> (per SAS code above) and <code>serverType</code> (to <code>SAS9</code>).</li>
</ol>
<p>You can now open the app at <code>https://YOURWEBSERVER/unzippedfoldername</code> and follow the configuration steps (DC Physical Location and Admin Group) to complete deployment.</p>
<h4 id="3-run-the-configurator">3 - Run the Configurator<a class="headerlink" href="#3-run-the-configurator" title="Permanent link">&para;</a></h4>
<p>When opening Data Controller for the first time, a configuration screen is presented. Be sure to log in with an account that has WRITE METADATA (WM) on the following metadata folders:</p>
<ul>
<li><code>services/admin</code> - so the configurator STP can be deleted after being run</li>
<li><code>services/common</code> - so the <code>Data_Controller_Settings</code> STP can be updated</li>
<li><code>Data</code> - so the library and tables can be registered (using proc metalib)</li>
</ul>
<p>There are two things to configure:</p>
<ol>
<li>Path to the designated physical staging area. Make sure that the SAS Spawned Server account (eg <code>sassrv</code>) has WRITE access to this location.</li>
<li>Admin Group. ⚠️ Note that anyone in this group will have unrestricted access to Data Controller! ⚠️ "Unrestricted access" is provided by code logic. Post installation, Data Controller will never update nor modify metadata.</li>
</ol>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you do not see any groups, then it is possible your Stored Process is running from a different metadata repository to the location of your SAS users (eg Foundation). To fix this, update the <code>services/admin/configurator</code> STP with this code: <code>%let dc_repo_users=YOUUSERRMETAREPO;</code></p>
</div>
<p>After you click submit, the Stored Process will run, configure the staging area and create the library tables (as datasets).</p>
<p>You will then be presented with three further links:</p>
<ol>
<li>Refresh Data Catalog. Run this to scan all available datasets and update the catalog.</li>
<li>Refresh Table Metadata. Run this to update the table-level data lineage.</li>
<li>Launch. Currently this feature only works for streaming apps - just refresh the page for a full deployment.</li>
</ol>
<h3 id="streaming">Streaming<a class="headerlink" href="#streaming" title="Permanent link">&para;</a></h3>
<p>The streaming approach is optimised for rapid deployment, and works by bundling the frontend into metadata. This is a highly inefficient way to serve web content, and thus should only really be used for demos / evaluation purposes.</p>
<p>Deployment is very easy - just run the SAS code below (after changing the <code>appLoc</code>):</p>
<div class="highlight"><pre><span></span><code><span class="nb">%let</span> appLoc=/Shared Data/apps/DataController; <span class="c">/* CHANGE THIS!! */</span>
<span class="k">filename</span> dc url <span class="s">&quot;https://git.4gl.io/dc/deploy/-/raw/main/s9.sas&quot;</span>;
<span class="nf">%inc</span> dc;
</code></pre></div>
<p>If you don't have internet access from your SAS environment, you can also <a href="https://git.4gl.io/dc/deploy/-/raw/main/s9.sas">download the file directly</a> and modify the <code>appLoc</code> on line 2, as follows:</p>
<p><img alt="" src="../img/sas9_apploc.png" /></p>
<p>After that, continue to the configuration as described above.</p>
<h2 id="deployment-diagram">Deployment Diagram<a class="headerlink" href="#deployment-diagram" title="Permanent link">&para;</a></h2>
<p>A Full Deployment of Data Controller for SAS 9 consists of:</p>
<ul>
<li>Frontend on the web server</li>
<li>Stored Processes (+ Library &amp; Table definitions) in metadata</li>
<li>Staging Area on the physical filesystem</li>
<li>Database <em>or</em> SAS Base library</li>
</ul>
<p>The below areas of the SAS platform are modified when deploying Data Controller:</p>
<p><img alt="" src="../img/dci_deploymentdiagram.svg" />
<!--img src="/img/dci_deploymentdiagram.svg" height="350" style="border:3px solid black" -->
</p>
<h3 id="client-device">Client Device<a class="headerlink" href="#client-device" title="Permanent link">&para;</a></h3>
<p>Nothing needs to be deployed or modified on the client device. We support a wide range of browsers (the same as SAS). Browsers make requests to the SAS Web Server, and will cache assets such as JS, CSS and images. Some items (such as dropdowns) are kept in local storage to improve responsiveness.</p>
<h3 id="sas-mid-tier">SAS Mid Tier<a class="headerlink" href="#sas-mid-tier" title="Permanent link">&para;</a></h3>
<p>A single <code>index.html</code> file plus several CSS / JS / image files are served from a subfolder in the static content area SAS Web Server.</p>
<p>This is served up by the <em>existing</em> SAS Web Server, no additional server (running) process is required.</p>
<p>If you are running more than one web server, you will need to deploy to them all.</p>
<h3 id="sas-application-server">SAS Application Server<a class="headerlink" href="#sas-application-server" title="Permanent link">&para;</a></h3>
<p>Given the enhanced permissions needed of the system account, a dedicated / secured STP instance is recommended as described <a href="/dci-stpinstance">here</a>.</p>
<p>All deployments of Data Controller also make use of a physical staging directory. This is used to store staged data, logs, plus CSV and Excel files as uploaded by end users. This directory should NOT be accessible by end users - only the SAS system account (eg <code>sassrv</code>) requires access to this directory.</p>
<p>A typical small deployment will grow by a 10-20 mb each month. A very large enterprise customer, with 100 or more editors, might generate up to 1 GB or so per month, depending on the size and frequency of the Excel EUCs and CSVs being uploaded. Web modifications are restricted only to modified rows, so are typically just a few kb in size.</p>
<h3 id="sas-metadata-server">SAS Metadata Server<a class="headerlink" href="#sas-metadata-server" title="Permanent link">&para;</a></h3>
<p>The items deployed to metadata include:</p>
<ul>
<li>Folder tree</li>
<li>Stored Processes</li>
<li>Library Object &amp; tables</li>
</ul>
<p>All SAS code is embedded in Stored Processes (so there is no need to deploy programs to the file system, no SASAUTOs). There is no use of X commands, no use of external internet access, full LOCKDOWN is supported.</p>
<p>After the installation process (which updates <code>public/settings</code> and removes the <code>admin/makedata</code> STP), there are no write actions performed against metadata.</p>
<h3 id="databases">Databases<a class="headerlink" href="#databases" title="Permanent link">&para;</a></h3>
<p>We strongly recommend that the Data Controller configuration tables are stored in a database for concurrency reasons.</p>
<p>We have customers in production using Oracle, Postgres, Netezza, SQL Server to name a few. Contact us for support with DDL and migration steps for your chosen vendor.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Data Controller does NOT modify schemas! It will not create or drop tables, or add/modify columns or attributes. Only data <em>values</em> (not the model) can be modified using this tool.</p>
</div>
<p>To caveat the above - it is also quite common for customers to use a BASE engine library. Data Controller ships with mechananisms to handle locking (internally) but it cannot handle external contentions, such as those caused when end users open datasets directly, eg with Enterprise Guide or Base SAS.</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href="../dci-deploysasviya/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-footer-nav__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
SAS Viya Deploy
</div>
</div>
</a>
<a href="../dci-stpinstance/" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-footer-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
SAS 9 Dedicated STP
</div>
</div>
<div class="md-footer-nav__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
All rights reserved &copy;2022 Bowe IO Ltd.
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<script src="../assets/javascripts/vendor.6a3d08fc.min.js"></script>
<script src="../assets/javascripts/bundle.71201edf.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script>
<script>
app = initialize({
base: "..",
features: [],
search: Object.assign({
worker: "../assets/javascripts/worker/search.4ac00218.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>