<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-497787815177352569</atom:id><lastBuildDate>Wed, 19 Jun 2013 09:46:10 +0000</lastBuildDate><category>server setup and admin</category><category>performance and tuning</category><category>Database Deadpool</category><category>The fRiDaY File</category><category>announcement</category><category>housekeeping</category><category>xkcd</category><category>Foxhound</category><category>SQL code</category><category>SQLA</category><category>Design</category><category>off topic</category><category>Dilbert</category><category>database migration</category><category>latest EBFs</category><category>testimonial</category><category>HANA</category><category>The Thursday Quote</category><title>SQL Anywhere</title><description>Breck Carter's blog about SQL Anywhere®, the relational database management system from SAP.</description><link>http://sqlanywhere.blogspot.com/</link><managingEditor>noreply@blogger.com (Breck Carter)</managingEditor><generator>Blogger</generator><openSearch:totalResults>693</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SqlAnywhere" /><feedburner:info uri="sqlanywhere" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-6538945564019810747</guid><pubDate>Wed, 19 Jun 2013 09:45:00 +0000</pubDate><atom:updated>2013-06-19T05:46:10.849-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>TechEd 2013 Session Catalog</title><description>&lt;p&gt;There are 8 session tracks at &lt;a href="http://www.sapteched.com/2013/usa/home.htm" target="_blank"&gt;TechEd 2013 in Las Vegas on October 21 to 25&lt;/a&gt;...&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt; SAP Technology Innovation and Strategy (TEC)
 IT Management (ITM)
 Enterprise Analytics (AE)
 Real-Time Data Platform (RDP)
 Process Orchestration, Integration, and Portal (POP)
 Custom Development (CD)
 Security, Identity Management, and Single Sign-On (SIS)
 Mobile (MOB)
&lt;/pre&gt;&lt;/blockquote&gt;but only 7 of them are represented so far in &lt;a href="http://sessioncatalog.sapevents.com/go/ab.sessioncatalog/index.cfm?l=58" target="_blank"&gt;the Session Catalog&lt;/a&gt;...&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;SELECT Track, COUNT(*)
  FROM SessionDownload
 GROUP BY Track
 ORDER BY Track;

Track                                                 COUNT() 
------------------------------------------------- ----------- 
Custom Development                                         76 
Enterprise Analytics                                       70 
IT Management                                             116 
Process Orchestration, Integration, and Portal             62 
Real-Time Data Platform                                   240 
SAP Technology Innovation and Strategy                     52 
Security, Identity Management, and Single Sign-On          42 
&lt;/pre&gt;&lt;/blockquote&gt;so it's may be a bit early to look for the SQL Anywhere and MobiLink sessions but let's do that anyway...&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;SELECT Session_ID,
       Title 
  FROM SessionDownload
 WHERE Title       LIKE '%MobiLink%'
    OR Title       LIKE '%SQL Anywhere%'
    OR Description LIKE '%MobiLink%'
    OR Description LIKE '%SQL Anywhere%'
 ORDER BY Session_ID;

Session_ID Title                                                                                                
---------- ---------------------------------------------------------------------------- 
EA269      Everything You Need to Know to Use SAP Crystal Reports                                               
RDP109     Orbiting the Enterprise – SAP Sybase SQL Anywhere as a Satellite Server                              
RDP118     Introduction to SAP Sybase SQL Anywhere                                                              
RDP119     SAP Sybase SQL Anywhere Satellite Database Case Studies                                              
RDP121     Best Practices for Embedding Databases in Lines of Business Applications                             
RDP122     Enhancing Business Intelligence Deployments with SAP Real-Time Data Platform                         
RDP124      Getting Started with SAP Sybase SQL Anywhere, On-Demand Edition                                     
RDP141     Powerful Data Access at the Edge of the Enterprise                                                   
RDP220     Mobilizing Data-Driven Applications                                                                  
RDP222     OData Support in SAP Real-Time Data Platform                                                         
RDP278     Extending SAP HANA to SMEs Using SAP Sybase SQL Anywhere and MobiLink                                
TEC101     How to Best Embed SAP Technology                                                                     
&lt;/pre&gt;&lt;/blockquote&gt;and guess what? &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;No "Mobile (MOB)" Sessions! (yet)&lt;/h3&gt;&lt;br /&gt;
Patience, patience, the MOB will surely be here any minute :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/2013-06-19/" title="Dilbert.com 2013-06-19" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/100000/80000/8000/000/188056/188056.strip.gif" border="0" alt="Dilbert.com 2013-06-19" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/2pDYbY-jyI8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/2pDYbY-jyI8/teched-2013-session-catalog.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/teched-2013-session-catalog.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-1661045270809868931</guid><pubDate>Mon, 17 Jun 2013 07:01:00 +0000</pubDate><atom:updated>2013-06-17T03:01:01.126-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL code</category><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><title>Building a Link Checker Inside SQL Anywhere</title><description>This is the second article about the foundations for client-server communications inside SQL Anywhere, where the server is a website and the client is a stored procedure inside a SQL Anywhere database. &lt;blockquote&gt;&lt;hr&gt;Resources...&lt;blockquote&gt;- The &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-procedure-statement.html" target="_blank"&gt;web-style CREATE PROCEDURE statement&lt;/a&gt; as described in the SQL Anywhere 16 Help.&lt;br /&gt;
&lt;br /&gt;
- Descriptions of the various &lt;a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods" target="_blank"&gt;HTTP request methods&lt;/a&gt; like GET and HEAD, in Wikipedia.&lt;br /&gt;
&lt;br /&gt;
- Descriptions of the associated &lt;a href="http://en.wikipedia.org/wiki/List_of_HTTP_header_fields" target="_blank"&gt;HTTP headers&lt;/a&gt;, also in Wikipedia.&lt;br /&gt;
&lt;br /&gt;
- Kurt Lichtner's excellent &lt;a href="http://download.sybase.com/presentation/TW2005/SQL513.pdf" target="_blank"&gt;2005 Techwave presentation&lt;/a&gt; on the new HTTP client introduced in SQL Anywhere 9.0.2.&lt;blockquote&gt;... yes, this stuff's been around for a while.&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;hr&gt;&lt;/blockquote&gt;The previous article, &lt;a href="http://sqlanywhere.blogspot.com/2013/06/client-server-via-web-services-inside.html" target="_blank"&gt;Client-Server Via Web Services Inside SQL Anywhere&lt;/a&gt;, showed how to build a variety of web client and server functions and procedures, ending with a SQL Anywhere stored procedure that used an HTTP GET request to retrieve the HTML body of an Amazon product web page plus all the associated HTTP status and header fields.&lt;br /&gt;
&lt;br /&gt;
This article delves a bit lower, showing how to build a SQL Anywhere stored procedure that uses HTTP HEAD requests to check the validity of external URLs stored in a database. The database in question is the one used to construct the &lt;a href="http://sqlanywhere.blogspot.ca/2012/03/tales-from-doc-face.html" target="_blank"&gt;SQL Anywhere Technical Documents web page&lt;/a&gt;, and the motivation is &lt;a href="https://en.wikipedia.org/wiki/Link_rot" target="_blank"&gt;link rot&lt;/a&gt;: many of the 1,156 technical document links no longer work, and it's time to find out just how bad the situation is without checking ... each ... link ... by ... hand (hint: it's dire!)&lt;blockquote&gt;[&lt;a href="#new"&gt;click here to go straight to the code&lt;/a&gt;]&lt;/blockquote&gt;&lt;h3&gt;Why not just run a link checker on the web page? Why DIY?&lt;/h3&gt;The obvious answer is, that's &lt;a href="http://sqlanywhere.blogspot.com/2009/01/everything-looks-like-database.html" target="_blank"&gt;what this blog is all about&lt;/a&gt;! (doing stuff with SQL Anywhere databases)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/1996-02-27/" title="Dilbert.com 1996-02-27" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/10000/8000/200/18211/18211.strip.gif" border="0" alt="Dilbert.com 1996-02-27" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
But... it's one thing to Do It Yourself, it's quite another to DIY without ever seeing an example of the "It" you're trying to "Do".&lt;br /&gt;
&lt;br /&gt;
I can't remember ever having run a "link checker" program, so here goes...&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Step 1, google it: &lt;a href="http://www.google.com/webhp?hl=en&amp;tab=nw#hl=en&amp;output=search&amp;sclient=psy-ab&amp;q=how+do+I+check+links+on+a+website+page" target="_blank"&gt;how do I check links on a website page&lt;/a&gt; &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;First hit: &lt;a href="http://validator.w3.org/checklink" target="_blank"&gt;Link Checker - The W3C Markup Validation Service&lt;/a&gt; &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Go there, feed it this URL: http://sqlanywhere.blogspot.ca/2012/03/tales-from-doc-face.html&lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="figure1"&gt;&lt;/a&gt;&lt;b&gt;Figure 1:&lt;/b&gt; Home page for the W3C Link Checker&lt;br clear="all"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-T7c1-q0MplA/UbM5U2v_pwI/AAAAAAAACOc/dviaAYNnggY/s1600/image+3+W3C+Link+Checker+Enter+the+address.jpg" width="400" height="359" title="W3C Link Checker Enter the address"&gt; &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Wait ... for ... a ... long ... time ... Done. Document processed in 651.56 seconds&lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="figure2"&gt;&lt;/a&gt;&lt;b&gt;Figure 2:&lt;/b&gt; Processing report displayed by the W3C Link Checker for the Technical Documents page&lt;br clear="all"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-xxCJMz2rHRQ/UbM3C2mDKaI/AAAAAAAACOE/kcjdzjT4bV4/s1600/image+1+Status+done.+Document+processed+in+651.56+seconds.jpg" width="600" height="256" title="Status done. Document processed in 651.56 seconds"&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;h3&gt;The situation is dire!&lt;/h3&gt;Figure 3 shows that the W3C Link Checker reports 345 "server side problem" links... yup, it's a problem.&lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="figure3"&gt;&lt;/a&gt;&lt;b&gt;Figure 3:&lt;/b&gt; Summary of results displayed by the W3C Link Checker for the Technical Documents page&lt;br clear="all"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-NE5PvKxyotU/UbM3U9kVhyI/AAAAAAAACOM/tzaojk0maVg/s1600/image+2+Results+List+of+broken+links+and+other+issues.jpg" width="600" height="276" title="Results List of broken links and other issues"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Isn't that all you need to know? Why DIY?&lt;/h3&gt;There's no question that the W3C Link Checker does a good job of parsing and checking a web page, and then telling you about all the problems.&lt;br /&gt;
&lt;br /&gt;
What it doesn't do, is this:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The W3C Link Checker doesn't limit itself to the important content, in this case the Technical Documents links. That's understandable, it's parsing a web page, it doesn't know what's important and what isn't. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;The W3C Link Checker doesn't report the total number of links on the page, or how many were "good" links. You can determine the total by counting the number of "Checking link ..." messages in the output (1,298), then do some arithmetic to calculate the number of "good" links, but that's a pain in the patootie. &lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;Checking link http://iablog.sybase.com/efarrar/2011/10/is-fuji-really-a-cloud/
HEAD http://iablog.sybase.com/efarrar/2011/10/is-fuji-really-a-cloud/  fetched in 1.20 seconds

Checking link http://www.sybase.com/detail?id=47925
HEAD http://www.sybase.com/detail?id=47925  fetched in 1.30 seconds

... and so on, 1,296 more times
&lt;/pre&gt;&lt;/blockquote&gt;&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;The W3C Link Checker doesn't provide any mechanism for adhoc reporting. Sure, you could scan the output, muck around with regular expressions... but I won't :)&lt;br /&gt;
&lt;br clear="all"&gt;&lt;a href="http://xkcd.com/1171" target="_blank"&gt;&lt;img src="http://imgs.xkcd.com/comics/perl_problems.png" title="xkcd.com/1171"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;The W3C Link Checker doesn't let you customize the process to, say, automate problem investigation. Yes, yes, it's open source... &lt;a href="http://xkcd.com/1171" target="_blank"&gt;see cartoon above&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Note:&lt;/b&gt; One of the "Settings used" in &lt;a href="#figure2"&gt;Figure 2&lt;/a&gt; is "Sleeping 1 second between requests to each server" which seems to indicate that it's not a good idea for a robot (like a link checker) to pound other people's servers. Being flagged as an Evil Doer is something no self-respecting client IP address wants...&lt;br clear="all"&gt;&lt;a href="http://teaser-trailer.com/despicable-me-2-when-the-world-needed-a-hero-they-called-a-villain/" target="_blank"&gt;&lt;img src="http://2.bp.blogspot.com/-rJqk58Im_WU/UZYhiIgwPtI/AAAAAAAAADE/qPXQBBu6xpU/s320/despicable-me-two-new-poster+(1).jpg"&gt;&lt;/a&gt;&lt;br clear="all"&gt;...so, this DIY project will make use of the SQL Anywhere WAITFOR statement.&lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="new"&gt;&lt;/a&gt;&lt;h3&gt;SQL Anywhere Link Checker: The Code&lt;/h3&gt;Here's the basic building block for the SQL Anywhere Link Checker:&lt;br /&gt;
&lt;!-- ++++++++++++++++++++++++++++++ --&gt;&lt;b&gt;&lt;/b&gt;&lt;pre class="brush: text"&gt;CREATE PROCEDURE http_head_attributes (
   IN url     LONG VARCHAR )
RESULT (
   attribute  LONG VARCHAR,
   value      LONG VARCHAR )
URL '!url' 
TYPE 'HTTP:HEAD';
&lt;/pre&gt;&lt;br /&gt;
When a single URL is passed to this &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-procedure-statement.html" target="_blank"&gt;web-style procedure&lt;/a&gt;, SQL Anywhere tries to send an &lt;a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods" target="_blank"&gt;HTTP HEAD request&lt;/a&gt; to the web server, and if that request is successful it gets back a variable number of &lt;a href="http://en.wikipedia.org/wiki/List_of_HTTP_header_fields" target="_blank"&gt;HTTP headers&lt;/a&gt;. If the attempt is unsuccessful (and '404 Not Found' counts as unsuccessful) SQL Anywhere will raise an exception which can be handled in BEGIN CATCH block. &lt;br /&gt;
&lt;br /&gt;
A successful call to http_head_attributes will return a two-column attribute and value result set containing the header names and values.&lt;br /&gt;
&lt;br /&gt;
Here are examples of successful and unsuccessful calls:&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;SELECT * FROM http_head_attributes ( 'http://www.google.com' );

attribute         value
Status            HTTP/1.0 200 OK
Body              
Expires           -1
Server            gws
X-XSS-Protection  1; mode=block
Content-Type      text/html; charset=ISO-8859-1
P3P               CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&amp;answer=151657 for more info."
Cache-Control     private, max-age=0
X-Frame-Options   SAMEORIGIN
Date              Tue, 11 Jun 2013 23:06:04 GMT
Set-Cookie        NID=67=Dg4bUl ... etcetera ...UKCUD; expires=Wed, 11-Dec-2013 23:06:04 GMT; path=/; domain=.google.com; HttpOnly

SELECT * FROM http_head_attributes ( 'http://www.google.com/unknown' );

HTTP request failed. Status code '404 Not Found'
SQLCODE=-983, ODBC 3 State="HY000"
&lt;/pre&gt;&lt;/blockquote&gt;&lt;b&gt;Tip:&lt;/b&gt; The "Body" value is empty, and it should be, but that is not always the case! For example, SELECT * FROM http_head_attributes ( 'http://www.sap.com' ) returns the full Body value, all 28,672 bytes of it. That behavior is rare (other pages on sap.com don't do it) but it's something to keep in mind when issuing an HTTP HEAD request.&lt;br /&gt;
&lt;br /&gt;
Figure 4 shows where the URLs to be checked come from. One row exists in the article table for each entry displayed on the &lt;a href="http://sqlanywhere.blogspot.ca/2012/03/tales-from-doc-face.html" target="_blank"&gt;Technical Documents web page&lt;/a&gt;, one row is inserted in the link_check table each time an article is checked by the SQL Anywhere Link Checker, and one row is inserted in the http_header table for each row returned by a call to web_client_procedure:&lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="figure4"&gt;&lt;/a&gt;&lt;b&gt;Figure 4:&lt;/b&gt; ER Diagram for the Technical Documents database&lt;br clear="all"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-MD2EF29tiRA/UbdLou_67EI/AAAAAAAACOs/8l2AD98qxYo/s1600/image+4+SQL+Anywhere+Link+Checker+ER+Diagram.jpg" width="600" height="173" title="SQL Anywhere Link Checker ER Diagram"&gt;&lt;br /&gt;
&lt;br /&gt;
Here's the code for the main link checker procedure:&lt;br /&gt;
&lt;!-- ++++++++++++++++++++++++++++++ --&gt;&lt;b&gt;&lt;/b&gt;&lt;pre class="brush: text"&gt;CREATE PROCEDURE catalog_link_checker()
BEGIN

DECLARE @url_count         INTEGER;
DECLARE @url_counter       INTEGER;
DECLARE @link_checked_at   TIMESTAMP;
DECLARE @status            LONG VARCHAR;

SELECT COUNT(*)
  INTO @url_count
  FROM article
 WHERE url LIKE 'http%';

SET @url_counter = 0;

TRUNCATE TABLE http_header;
TRUNCATE TABLE link_check;

FOR f_fetch AS c_fetch INSENSITIVE CURSOR FOR
SELECT artificial_id AS @artificial_id,
       url           AS @url
  FROM article
 WHERE url LIKE 'http%'
 ORDER BY order_by_date DESC,
       title DESC
FOR READ ONLY
DO

   WAITFOR DELAY '00:00:01';

   SET @url_counter     = @url_counter + 1;
   SET @link_checked_at = CURRENT TIMESTAMP;

   INSERT link_check VALUES ( @artificial_id, @link_checked_at );

   MESSAGE STRING ( 'URL ', @url_counter, ' of ', @url_count, ': ', @url ) TO CONSOLE;

   BEGIN TRY

      INSERT http_header
      SELECT @artificial_id,
             @link_checked_at,
             attribute,
             value
        FROM http_head_attributes ( @url );

      SET @status = '(unknown)';

      SELECT value
        INTO @status
        FROM http_header
       WHERE artificial_id   = @artificial_id
         AND link_checked_at = @link_checked_at
         AND attribute       = 'Status';

      MESSAGE STRING ( 'Status: ', @status ) TO CONSOLE;

   END TRY
   BEGIN CATCH
      MESSAGE STRING ( 'ERROR_MESSAGE() = ',  ERROR_MESSAGE() )  TO CONSOLE;
      MESSAGE STRING ( 'ERROR_SQLCODE() = ',  ERROR_SQLCODE() )  TO CONSOLE;
      MESSAGE STRING ( 'ERROR_SQLSTATE() = ', ERROR_SQLSTATE() ) TO CONSOLE;
      INSERT http_header VALUES ( @artificial_id, @link_checked_at, 'ERROR_MESSAGE()',  ERROR_MESSAGE() );
      INSERT http_header VALUES ( @artificial_id, @link_checked_at, 'ERROR_SQLCODE()',  ERROR_SQLCODE() );
      INSERT http_header VALUES ( @artificial_id, @link_checked_at, 'ERROR_SQLSTATE()', ERROR_SQLSTATE() );
   END CATCH;

   COMMIT;

END FOR;

END;
&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;The FOR loop starting on line 19 steps through each row of the article table in the same order the entries are displayed on the web page, and selects just the primary key and URL values. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;The WAITFOR DELAY statement on line 29 is a crude implementation of the "Sleeping 1 second between requests to each server" suggestion taken from &lt;a href="#figure2"&gt;Figure 2&lt;/a&gt;. It's crude because this code sleeps between all requests, not just requests to the same server, and that means this code will take a bit longer to run than the W3C Link Checker. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;The INSERT on line 34 records the fact that this URL was checked on such-and-such a date and time. This level of record-keeping isn't important right now (hence the TRUNCATE TABLE statements on lines 16 and 17) but it might be in the future if someone wanted to know when a particular document was available and when it wasn't, similar to the "Retrieved" dates that Wikipedia shows in the References sections. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;The INSERT on lines 40 to 45 copies all the headers from the call to http_head_attributes into the http_header table. If the call fails, control passes to the BEGIN CATCH block on line 59, and three surrogate rows are inserted for the three basic SQL Anywhere exception diagnostic values: ERROR_MESSAGE(), ERROR_SQLCODE() and ERROR_SQLSTATE().&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Figure 5 shows that the Link Checker takes 2,084 seconds to run; 1,156 of those seconds are spent in the WAITFOR DELAY statements, the rest waiting for web servers to respond.&lt;br /&gt;
&lt;br /&gt;
Figure 6 shows a few snippets from the dbsrv16 -o filespec.txt diagnostic log containing some URLs that worked (Status: 200 OK) and some that didn't (SQLCODE -981).&lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="figure5"&gt;&lt;/a&gt;&lt;b&gt;Figure 5:&lt;/b&gt; Running the Link Checker in ISQL&lt;br clear="all"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-cw4yo-MVhFo/UbriOmhZKlI/AAAAAAAACO8/8UDJBfAYCfU/s1600/image+5+Interactive+SQL+CALL+catalog_link_checker().jpg" width="400" height="264" title="Interactive SQL CALL catalog_link_checker()"&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="figure6"&gt;&lt;/a&gt;&lt;b&gt;Figure 6:&lt;/b&gt; Link Checker MESSAGE TO CONSOLE Output&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;I. 06/14 04:39:15. URL 1 of 1156: http://download.sybase.com/ianywhere/documents/UsingCrystalWithSQLAnywhere_FINAL.pdf
I. 06/14 04:39:15. Status: HTTP/1.1 200 OK
I. 06/14 04:39:16. URL 2 of 1156: http://sqlanywhere.blogspot.ca/2012/10/example-recursive-union-inverted-order.html
I. 06/14 04:39:16. Status: HTTP/1.0 200 OK
I. 06/14 04:39:17. URL 3 of 1156: http://sqlanywhere.blogspot.ca/2012/10/example-recursive-union-tree-traversal.html
I. 06/14 04:39:17. Status: HTTP/1.0 200 OK
...
I. 06/14 04:40:10. URL 38 of 1156: http://iablog.sybase.com/paulley/2012/03/limitations-of-proxy-tables/
I. 06/14 04:40:11. ERROR_MESSAGE() = Unable to connect to the remote host specified by 
                      'http://iablog.sybase.com/paulley/2012/03/limitations-of-proxy-tables/'
I. 06/14 04:40:11. ERROR_SQLCODE() = -981
I. 06/14 04:40:11. ERROR_SQLSTATE() = WW050
I. 06/14 04:40:12. URL 39 of 1156: http://iablog.sybase.com/paulley/2012/03/nhibernate-3-3-0cr1-released/
I. 06/14 04:40:13. ERROR_MESSAGE() = Unable to connect to the remote host specified by 
                      'http://iablog.sybase.com/paulley/2012/03/nhibernate-3-3-0cr1-released/'
I. 06/14 04:40:13. ERROR_SQLCODE() = -981
I. 06/14 04:40:13. ERROR_SQLSTATE() = WW050
...
I. 06/14 05:13:53. URL 1154 of 1156: http://www.sybase.com/detail?id=47851
I. 06/14 05:13:55. Status: HTTP/1.1 200 OK
I. 06/14 05:13:56. URL 1155 of 1156: http://www.sybase.com/detail?id=20313
I. 06/14 05:13:56. Status: HTTP/1.1 200 OK
I. 06/14 05:13:57. URL 1156 of 1156: http://www.sybase.com/detail?id=10915
I. 06/14 05:13:57. Status: HTTP/1.1 200 OK
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
Here's an adhoc query that summarizes the "dire situation" by classifying all the articles by the status of their URLs:&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;SELECT '1. Articles With Good Links:' AS title, 
       COUNT(*)                       AS count
  FROM article
       INNER JOIN link_check
          ON link_check.artificial_id = article.artificial_id
       INNER JOIN ( SELECT *
                      FROM http_header
                     WHERE TRIM ( attribute ) = 'Status' 
                       AND TRIM ( value ) LIKE 'HTTP/% 200 OK'
                  ) AS http_header
          ON http_header.artificial_id   = link_check.artificial_id
         AND http_header.link_checked_at = link_check.link_checked_at

UNION ALL
SELECT '2. Articles Without Links:', 
       COUNT(*)
  FROM article
 WHERE url NOT LIKE 'http%'

UNION ALL
SELECT '3. Rotted iAnywhere Blog Links:',
       COUNT(*)
  FROM article
       INNER JOIN link_check
          ON link_check.artificial_id = article.artificial_id
       INNER JOIN ( SELECT *
                      FROM http_header
                     WHERE TRIM ( attribute ) = 'ERROR_MESSAGE()' 
                       AND TRIM ( value ) LIKE 'Unable to connect to the remote host specified by ''http://iablog.sybase.com%'
                  ) AS http_header
          ON http_header.artificial_id   = link_check.artificial_id
         AND http_header.link_checked_at = link_check.link_checked_at

UNION ALL
SELECT '4. Invalid Response Links:',
       COUNT(*)
  FROM article
       INNER JOIN link_check
          ON link_check.artificial_id = article.artificial_id
       INNER JOIN ( SELECT *
                      FROM http_header
                     WHERE TRIM ( attribute ) = 'ERROR_MESSAGE()' 
                       AND TRIM ( value )     = 'Invalid response from the HTTP server'
                  ) AS http_header
          ON http_header.artificial_id   = link_check.artificial_id
         AND http_header.link_checked_at = link_check.link_checked_at

UNION ALL
SELECT '5. Other:',
       COUNT(*)
  FROM article
       INNER JOIN link_check
          ON link_check.artificial_id = article.artificial_id
 WHERE NOT EXISTS ( 
   SELECT *
     FROM http_header
    WHERE http_header.artificial_id = article.artificial_id
      AND (    (     TRIM ( attribute ) = 'Status' 
                 AND TRIM ( value )     LIKE 'HTTP/% 200 OK' )
            OR (     TRIM ( attribute ) = 'ERROR_MESSAGE()' 
                 AND TRIM ( value )     LIKE 'Unable to connect%http://iablog.sybase.com%' )
            OR (     TRIM ( attribute ) = 'ERROR_MESSAGE()' 
                 AND TRIM ( value )     = 'Invalid response from the HTTP server' ) ) ) 

UNION ALL
SELECT '6. Total Articles:',
       COUNT(*)
  FROM article
ORDER BY 1;

title                                 count 
------------------------------- ----------- 
1. Articles With Good Links:            791 
2. Articles Without Links:               18 
3. Rotted iAnywhere Blog Links:         345 
4. Invalid Response Links:               18 
5. Other:                                 2 
6. Total Articles:                     1174 

Execution time: 0.095 seconds
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;h3&gt;What's Going To Happen To The Technical Documents Page?&lt;/h3&gt;As the summary shows, only (!) 29% of the links have rotted away (the iAnywhere blog posts on sybase.com). Some of them have been moved to sap.com but it's not clear how many, nor is it clear how to map the old-to-new-URLs... it's probably a long ... slow ... manual ... process to make the repairs, which is why it hasn't been started yet.&lt;br /&gt;
&lt;br /&gt;
And it won't be, at least not until the fate of the remaining documents on sybase.com is determined. There are literally hundreds of whitepapers, Techwave presentations, Insider magazine articles and so on. Chances are, a few will move, many will be abandoned, and all links to sybase.com will rot away.&lt;br /&gt;
&lt;br /&gt;
As the rot rate rises, enthusiasm sinks, and at at some point (40 percent? 50? 60?), &lt;a href="http://sqlanywhere.blogspot.ca/2012/03/tales-from-doc-face.html" target="_blank"&gt;the link to the Technical Documents page itself&lt;/a&gt; will rot away.&lt;br /&gt;
&lt;br /&gt;
Like I said, the situation is dire, but only for those who care :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/1998-04-11/" title="Dilbert.com 1998-04-11" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/10000/2000/700/12722/12722.strip.gif" border="0" alt="Dilbert.com 1998-04-11" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/ihI2-c8cbKA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/ihI2-c8cbKA/building-link-checker-inside-sql.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-T7c1-q0MplA/UbM5U2v_pwI/AAAAAAAACOc/dviaAYNnggY/s72-c/image+3+W3C+Link+Checker+Enter+the+address.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/building-link-checker-inside-sql.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-1378035023450548115</guid><pubDate>Fri, 14 Jun 2013 07:01:00 +0000</pubDate><atom:updated>2013-06-14T03:01:01.154-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL code</category><title>Characteristic Errors, Revision 3</title><description>&lt;p&gt;It's only been a few days since &lt;a href="http://sqlanywhere.blogspot.com/2013/05/characteristic-errors-revision-2.html" target="_blank"&gt;this list had 27 entries&lt;/a&gt; and now it has 35...&lt;blockquote&gt;[&lt;a href="#new"&gt;click here to see the new entries&lt;/a&gt;]&lt;/blockquote&gt;&lt;hr&gt;A &lt;b&gt;characteristic error&lt;/b&gt; is an error that is so easy to make that it appears you are being actively encouraged to make it by the very nature of the computer program you are using.&lt;br /&gt;
&lt;br /&gt;
For example, sending an email without the attachment is a characteristic error of all email programs.&lt;blockquote&gt;&lt;i&gt;...except Gmail. Gmail warns you about missing attachments... Gmail is magic!&lt;/i&gt;&lt;/blockquote&gt;Here are some errors that are characteristic of SQL in general, SQL Anywhere in particular, and some companion programs.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;SQL: Seeing too little data, or no data at all, because a predicate in the WHERE clause effectively turned your OUTER JOIN into an INNER JOIN.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Seeing too much data because a missing predicate effectively turned your INNER JOIN into a CROSS JOIN.&lt;p style="clear: both;"&gt;&lt;/li&gt;&lt;li&gt;SQL: Getting the wrong COUNT() or SUM() because you forgot to code WHERE ... IS NOT NULL, or you *did* code it when you shouldn't have.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Getting the wrong answer because you forgot that, in general, NULL values [cough] suck.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Not seeing MESSAGE output because you forgot to run SET TEMPORARY OPTION DEBUG_MESSAGES = 'ON';&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Not seeing any data because you forgot ON COMMIT PRESERVE ROWS or NOT TRANSACTIONAL.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Coding ENDIF where END IF was required, or vice versa (before Version 11).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Connecting to the wrong server because you forgot DOBROAD=NONE (before Version 12).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Forgetting the asterisk in SELECT TOP 10 FROM ...&lt;p style="clear: both;"&gt;&lt;/li&gt;&lt;li&gt;SQL Anywhere: Coding IF NOT VAREXISTS ( 'x' ) THEN ... instead of IF VAREXISTS ( 'x' ) = 0 THEN ...&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Coding the wrong magic numbers 1, 2, 3, ... in the get_value() and set_value() calls in an EXTERNAL C DLL function.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting proxy table ODBC errors because the engine's running as a service and you've set up a User DSN instead of System DSN.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting file-related errors because the file specifications are relative to the server rather than the client.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting file-related errors because the engine's running as a service without the necessary permissions.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Coding CREATE TRIGGER IF NOT EXISTS instead of CREATE OR REPLACE TRIGGER, or vice versa for CREATE TABLE (in 11.0.1 or later).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting integer arithmetic when you wanted fractional parts because you forgot to CAST.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Stored procedure debugger: Setting it to watch a specific user id other than the one you're using to test your code.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Sybase Central: Setting it to display objects for owner names other than the one you're interested in.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Copy and paste: Forgetting to edit after pasting; e.g., Copy and paste SET @continue = 'Y' into the body of a WHILE loop and then forgetting to change it to 'N'.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Forgetting to call ml_add_column for any of the columns you're trying to synchronize, thus guaranteeing yourself a "Sassen Frassen Fricken Fracken!" moment when you run the first test.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Forgetting to call ml_add_[various] with the NULL parameter to delete old ml_[whatever] rows, thus ending up with thousands of orphan system table rows in the consolidated database.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;OLAP Windowing: Coding the wrong combination of ASC and DESC in an inner OVER ORDER BY clause and the outer SELECT ORDER BY: different when they should be the same, the same when they should be different, or some other variation of "wrong combination"...&lt;br /&gt;
&lt;!-- ++++++++++++++++++++++++++++++ --&gt;&lt;b&gt;&lt;/b&gt;&lt;pre class="brush: text"&gt;            SELECT older_sample_set.sample_set_number
              INTO @20_older_sample_set_number
              FROM ( SELECT TOP 20
                            ROW_NUMBER() OVER ( ORDER BY rroad_sample_set.sample_set_number ASC ) AS scrolling_row_number,
                            rroad_sample_set.sample_set_number                                    AS sample_set_number
                       FROM rroad_sample_set
                      WHERE rroad_sample_set.sampling_id       = @sampling_id
                        AND rroad_sample_set.sample_set_number &lt; @sample_set_number
                      ORDER BY rroad_sample_set.sample_set_number DESC ) AS older_sample_set
             WHERE older_sample_set.scrolling_row_number = 20;&lt;/pre&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Forgetting to call ml_add_column() when trying to use named parameters instead of "?" in versions 10 and 11 MobiLink scripts, resulting in a "What the ... ? Sassen Frassen Fricken Fracken!" moment during the first test (thank you, Jeff Albion).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Omitting a PRIMARY KEY column from the WHERE clause, thus turning a singleton SELECT (or DELETE!) into something rather more enthusiastic than expected (thank you, Ron Hiner). &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;HTTP web services: Leaving an &amp; in the code when a ? is required, and vice versa, when editing service URLs; e.g., 'HTTP://localhost:12345/web_service&amp;service_parm2=!parm2' &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Forgetting that not all functions look like functions: SELECT CAST ( CURRENT TIMESTAMP, VARCHAR ) &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Batch file: Trailing spaces on SET commands; e.g., SELECT CAST ( xp_getenv ( 'DEBUG_MESSAGES' ) AS VARCHAR ) returns 'OFF ' instead of 'OFF' after SET DEBUG_MESSAGES=OFF   &lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;a NAME="new"&gt;&lt;/a&gt;&lt;b&gt;New entries...&lt;/b&gt;&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Forum: Clicking Reply on the main Question or Answer entry instead of the comment you wanted.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Forgetting to run dblog to tell the database file where the log is now, after moving the database and log files to a different folder (thank you, Justin Willey).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Having to look up WAIT in the Help ... every ... single ... time, to be reminded that's it's WAITFOR, not WAIT.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Forgetting to check the SELECT against the GROUP BY, resulting in "Function or column reference to ... must also appear in a GROUP BY" (thank you, Glenn Paulley).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Coding too much in the GROUP BY (like, say, the primary key) so every group contains but a single row (thank you, Glenn Paulley). &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Design: Forgetting to accomodate or prevent loops in a tree structure, resulting in a tree traversal process that pegs the CPU at 100%... forever (thank you, Ove B).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Unwittingly using a variety of user ids when running sync*.sql, updating MobiLink scripts and running the MobiLink server, resulting in inexplicable inconsistencies.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Accidentally creating multiple script versions and then getting them crossed up when updating MobiLink scripts and running the MobiLink client.  &lt;br /&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;p&gt;&lt;hr&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/4hBJ5bqojqs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/4hBJ5bqojqs/characteristic-errors-revision-3.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/characteristic-errors-revision-3.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-1324940492319836556</guid><pubDate>Wed, 12 Jun 2013 07:01:00 +0000</pubDate><atom:updated>2013-06-12T03:01:00.069-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>SAP TechEd 2013 - Las Vegas, October 21–25</title><description>&lt;p&gt;For our friends in other parts of the world, the SAP TechEd schedules for Amsterdam and Bangalore may be &lt;a href="http://www.sapteched.com/" target="_blank"&gt;reached via the TechEd home page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For those of you within range of Vegas, now is the time to do two (2) things: &lt;br /&gt;
&lt;br /&gt;
Mark your calendar...&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.sapteched.com/2013/usa/home.htm" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-xFteEETCTSo/Ua9Y0kjRsAI/AAAAAAAACNs/Aq9KcR1aOO4/s1600/image+1+Plan+to+attend.jpg" width="400" height="357" title="Mark your calendar"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
and &lt;a href="http://www.sapteched.com/Join/home.htm" target="_blank"&gt;join the mailing list&lt;/a&gt;...&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.sapteched.com/Join/home.htm" target="_blank"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-AtZsQl7IRG8/Ua9ZEEytvrI/AAAAAAAACN0/kg0LyFOCXXc/s1600/image+2+Join+Our+Mailing+List.jpg" width="600" height="302" title="join the mailing list"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;That's it for now!&lt;/h3&gt;&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/fpjJTQGRlrU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/fpjJTQGRlrU/sap-teched-2013-las-vegas-october-2125.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-xFteEETCTSo/Ua9Y0kjRsAI/AAAAAAAACNs/Aq9KcR1aOO4/s72-c/image+1+Plan+to+attend.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/sap-teched-2013-las-vegas-october-2125.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-6188030894796147979</guid><pubDate>Mon, 10 Jun 2013 07:01:00 +0000</pubDate><atom:updated>2013-06-10T03:01:01.238-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>PSA: Use Different Passwords On Different Websites</title><description>&lt;p&gt;Let's say you use &lt;a href="http://en.wikipedia.org/wiki/Drupal" target="_blank"&gt;Drupal&lt;/a&gt; software (or some other product, it doesn't really matter, but let's say it's Drupal), &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;and you have an account at &lt;a href="https://drupal.org/" target="_blank"&gt;drupal.org&lt;/a&gt;, &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and the password you use on Drupal is the same password you use other places, like your email service (but not your bank, you're not stupid),  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and you have also given that email address to other websites (say, for example, your bank... it's OK to give your email address to your bank).&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Now, let's say Drupal is hacked (which it has been, see below), &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;and let's say the hacker got your email address (which they did), &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and they got your Drupal password in clear text (which Drupal says didn't happen, but let's say they're lying),  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and the hacker signs in to your email service with your email address and your email-same-as-Drupal password&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and then he... it's politically correct to call evil-doers "he", isn't it? ...he changes your email password on your email service&lt;br clear="all"&gt;&lt;br /&gt;
&lt;a href="http://asymptotia.com/wp-images/2010/04/chloe_obrian_24.jpg" imageanchor="1" &gt;&lt;img border="0" src="http://asymptotia.com/wp-images/2010/04/chloe_obrian_24.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;so now he can read your email but you can't&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and then the hacker takes a guess at which bank you use (and gets it right... there are only so many banks out there)&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and he clicks on "Lost password?" on your bank website&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and he gives them your email address &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;which the bank recognizes as a real customer email address (you) &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;so the bank sends out a "Password Reset" email to your email address&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;except it's the hacker that gets the email, not you, &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and now the hacker signs in to your bank account and changes your bank password and, well, does other stuff.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Like clean out your account, apply for a line of credit, clean that out too, you know...&lt;br /&gt;
&lt;br /&gt;
...banking stuff. &lt;br /&gt;
&lt;br /&gt;
Maybe some identity theft stuff, too.&lt;br /&gt;
&lt;br /&gt;
You thought you were safe, didn't you? You used a different password for your bank because your bank is "important" but all that other stuff (Drupal, email, etc), that's just "stuff", it's OK to use the same password for them, isn't it?&lt;br /&gt;
&lt;br /&gt;
And you always use GOOD passwords, all go0fY-upPer-and-lowercase-and-d1g1ts stuff... what could possibly go wrong?&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The solution: Don't use the same password on more than one website&lt;/h3&gt;&lt;br /&gt;
BTW, PSA means "Public Service Announcement", which is what this has been.&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;from:  Holly Ross-Drupal Association &lt;holly@association.drupal.org&gt;&lt;br /&gt;
reply-to:  password@association.drupal.org&lt;br /&gt;
to:  drupal-notify@drupal.org&lt;br /&gt;
date:  Wed, May 29, 2013 at 4:01 PM&lt;br /&gt;
subject:  Important Security Update: Reset your Drupal.org Password&lt;br /&gt;
&lt;br /&gt;
Dear community member,&lt;br /&gt;
&lt;br /&gt;
We respect the privacy of your information, which is why, as a precautionary measure, we are writing to let you know about an incident that involves your personal information. The Drupal.org Security and Infrastructure Teams have discovered unauthorized access to account information on Drupal.org and groups.drupal.org. Information exposed includes usernames, email addresses, and country information, as well as hashed passwords. However, we are still investigating the incident and may learn about other types of information compromised, in which case we will notify you accordingly.&lt;br /&gt;
&lt;br /&gt;
This unauthorized access was made via third-party software installed on the Drupal.org server infrastructure, and was not the result of a vulnerability within the Drupal software itself. This notice applies specifically to user account data stored on Drupal.org and groups.drupal.org, and not to sites running Drupal generally.&lt;br /&gt;
&lt;br /&gt;
We have implemented additional security measures designed to prevent the recurrence of such an attack, and to protect the privacy of our community members.&lt;br /&gt;
&lt;br /&gt;
The next time you attempt to log into your account, you will be required to create a new password.&lt;br /&gt;
&lt;br /&gt;
Below are steps you can take to further protect your personal information online. We encourage you to take preventative measures now to help prevent and detect the misuse of your information.&lt;br /&gt;
&lt;br /&gt;
First, we recommend as a precaution that you change or reset passwords on other sites where you may use similar passwords, even though all passwords on Drupal.org are stored salted and hashed. All Drupal.org passwords are both hashed and salted, although some older passwords on groups.drupal.org were not salted. To make your password stronger:&lt;br /&gt;
&lt;br /&gt;
* Do not use passwords that are simple words or phrases&lt;br /&gt;
* Never use the same password on multiple sites or services&lt;br /&gt;
* Use different types of characters in your password (uppercase letters, lowercase letters, numbers, and symbols).&lt;br /&gt;
&lt;br /&gt;
Second, be cautious if you receive emails asking for your personal information and be on the lookout for unwanted spam. It is not our practice to request personal information by email. Also, beware of emails that threaten to close your account if you do not take the "immediate action" of providing personal information.&lt;br /&gt;
&lt;br /&gt;
For more information, please review the security announcement and FAQ at https://drupal.org/news/130529SecurityUpdate. If you find any reason to believe that your information has been accessed by someone other than yourself, please contact the Drupal Association immediately, by sending an email to password@association.drupal.org.&lt;br /&gt;
&lt;br /&gt;
We regret that this incident has occurred and want to assure you we are working hard to improve security.&lt;br /&gt;
&lt;br /&gt;
Thank you,&lt;br /&gt;
Holly Ross&lt;br /&gt;
Drupal Association Executive Director&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/vFcN5o5t1Ug" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/vFcN5o5t1Ug/psa-use-different-passwords-on.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>2</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/psa-use-different-passwords-on.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-8762233090892704928</guid><pubDate>Fri, 07 Jun 2013 07:01:00 +0000</pubDate><atom:updated>2013-06-07T03:01:00.235-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">The fRiDaY File</category><title>The fRiDaY File - How do you say that in XML?</title><description>&lt;p&gt;Have you ever heard of &lt;a href="http://en.wikipedia.org/wiki/Parkinson's_law" target="_blank"&gt;Parkinson's Law&lt;/a&gt;?&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;Work expands so as to fill the time available for its completion.&lt;hr&gt;&lt;/blockquote&gt;Sure you have. Now how about this version?&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;Requirements expand to fill the computing power available.&lt;hr&gt;&lt;/blockquote&gt;If you've been in this business (computer system development) for more than a year or so, you know the absolute truth of Parkinson's Law.&lt;br /&gt;
&lt;br /&gt;
However, if you need further proof (say, for management) here it is; Rand Paul's comedy routine on C-Span (yes, that's right, "Rand Paul", "comedy" and "C-Span" all in one sentence):&lt;br /&gt;
&lt;br /&gt;
&lt;object id='cspan-video-player' classid='clsid:d27cdb6eae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' align='middle' height='500' width='410'&gt;&lt;param name='allowScriptAccess' value='true'/&gt;&lt;param name='movie' value='http://www.c-spanvideo.org/videoLibrary/assets/swf/CSPANPlayer.swf?clipid=4453678'/&gt;&lt;param name='quality' value='high'/&gt;&lt;param name='bgcolor' value='#ffffff'/&gt;&lt;param name='allowFullScreen' value='true'/&gt;&lt;param name='flashvars' value='system=http://www.c-spanvideo.org/common/services/flashXml.php?clipid=4453678&amp;style=full'/&gt;&lt;embed name='cspan-video-player' src='http://www.c-spanvideo.org/videoLibrary/assets/swf/CSPANPlayer.swf?clipid=4453678' allowScriptAccess='always' bgcolor='#ffffff' quality='high' allowFullScreen='true' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' flashvars='system=http://www.c-spanvideo.org/common/services/flashXml.php?clipid=4453678&amp;style=full' align='middle' height='500' width='410'&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;br clear="all"&gt;
&lt;p&gt;Burning water skis? 
&lt;p&gt;Yup, it's a code, V90.27 to be exact, or more specifically, "Drowning (accidental) - due to - accident (to) - watercraft - burning - unpowered - water skis V90.27".
&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/-CiAPAhU7_NY/UaZOGa5cujI/AAAAAAAACNE/7nQizf54XDg/s1600/Drowning+(accidental)+-+due+to+-+accident+(to)+-+watercraft+-+burning+-+unpowered+-+water+skis+V90.27.jpg" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-CiAPAhU7_NY/UaZOGa5cujI/AAAAAAAACNE/7nQizf54XDg/s320/Drowning+(accidental)+-+due+to+-+accident+(to)+-+watercraft+-+burning+-+unpowered+-+water+skis+V90.27.jpg" /&gt;&lt;/a&gt;
&lt;br clear="all"&gt;
&lt;p&gt;When making outlandish claims, it's always important to check your sources:
&lt;ul&gt;&lt;li&gt;Go to the &lt;a href="http://cms.hhs.gov/Medicare/Coding/ICD10/2013-ICD-10-CM-and-GEMs.html" target="_blank"&gt;2013 ICD-10-CM and GEMs&lt;/a&gt; page on the HHS website &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;to get this: &lt;a href="http://cms.hhs.gov/Medicare/Coding/ICD10/Downloads/2013-Code-Tables-and-Index.zip" target="_blank"&gt;2013 Code Tables and Index [ZIP, 17MB]&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;then unzip that to get this: ICD10CMIndex_ExternalCause.zip &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;and then unzip that to get this: E-Index.pdf&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;then scroll down to page 71.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;To the burning water skis.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/uP_QZ56U_D8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/uP_QZ56U_D8/the-friday-file-how-do-you-say-that-in.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-CiAPAhU7_NY/UaZOGa5cujI/AAAAAAAACNE/7nQizf54XDg/s72-c/Drowning+(accidental)+-+due+to+-+accident+(to)+-+watercraft+-+burning+-+unpowered+-+water+skis+V90.27.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/the-friday-file-how-do-you-say-that-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-6347324922684546812</guid><pubDate>Wed, 05 Jun 2013 07:01:00 +0000</pubDate><atom:updated>2013-06-10T17:27:50.438-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL code</category><title>Client-Server Via Web Services Inside SQL Anywhere</title><description>&lt;p&gt;Have you ever found yourself copying code from brief Help topics, terse tutorials and concise examples without really understanding how that code works or even what it's doing?&lt;br /&gt;
&lt;br /&gt;
Then, when it doesn't work, you hack around and Google for fixes and finally it seems to be doing what you want, so you ship it and try forget it?&lt;br /&gt;
&lt;br /&gt;
And you feel a bit guilty for having done that?&lt;br /&gt;
&lt;br /&gt;
If you're an Alpha or Beta, the answer is "Of course not! I created the technology, and those tutorials aren't terse, they're incredibly verbose!"&lt;br /&gt;
&lt;br clear="all"&gt;&lt;a href="http://dilbert.com/strips/comic/1998-07-15/" title="Dilbert.com 1998-07-15" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/10000/2000/800/12817/12817.strip.gif" border="0" alt="Dilbert.com 1998-07-15" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If you're a Tech Charlatan, the answer is "Of course not! I understand every new technology the moment it's announced! Look, I watch TED, I made puns out of SOAP and DISH before you were born!"&lt;br /&gt;
&lt;br clear="all"&gt;&lt;a href="http://dilbert.com/strips/comic/1995-11-09/" title="Dilbert.com 1995-11-09" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/20000/1000/100/21159/21159.strip.gif" border="0" alt="Dilbert.com 1995-11-09" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;If you're one of those, this article is NOT for you&lt;/h3&gt;&lt;br /&gt;
&lt;b&gt;Disclaimer:&lt;/b&gt; This is not a tutorial on web services inside SQL Anywhere, it doesn't rise to that level.&lt;br /&gt;
&lt;br /&gt;
It isn't even a "Getting Started" article, it's not up to that high standard either. And it certainly isn't a Help topic.&lt;br /&gt;
&lt;br /&gt;
No, this article comes from the sub-basement level, below the the parking garage, in the University Of SQL Anywhere annex on the other side of town.&lt;br /&gt;
&lt;br /&gt;
This article is for all the folks who took stuff apart when they were kids, to see "how it worked", and couldn't get it back together... except this time, your parents aren't going to yell at you. And it's for the folks who didn't have the courage to take stuff apart, but still wanted to see...&lt;br /&gt;
&lt;br /&gt;
...because this time, you're can read this article by yourself and nobody will know. It won't make you an Alpha or a Beta, but it won't make you a Tech Charlatan either.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;OK, my expectations have been lowered, what IS this article?&lt;/h3&gt;This article is about the foundations (footings, actually) for client-server communications inside SQL Anywhere, where the server is a website (or web service) and the client is a stored procedure or function, some or all of which reside inside SQL Anywhere databases. It's about passing data across the internet back and/or forth between blocks of SQL code running inside SQL Anywhere, with no application servers involved, no C# or Java or Python or VB or .NET and certainly no ORMs.&lt;br /&gt;
&lt;br /&gt;
( cue muttered curses, sounds of room emptying... is anyone left? OK, fine, I'll talk to the hotel staff... :)&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Step Zero: Create a couple of SQL Anywhere databases&lt;/h3&gt;Here's the Windows commands for that, or you can use Sybase Central if you want...&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;"%SQLANY16%\bin64\dbinit.exe" ddd16A.db

"%SQLANY16%\bin64\dbinit.exe" ddd16B.db
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;h3&gt;Step 1: Write a web server procedure that returns an HTML web page in a string&lt;/h3&gt;First, you have to start one of the databases (call it "Server A") and ISQL too...&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;"%SQLANY16%\bin64\dbspawn.exe"^
  -f "%SQLANY16%\bin64\dbsrv16.exe"^
  ddd16A.db

"%SQLANY16%\bin64\dbisql.com"^
  -c "ENG=ddd16A;DBN=ddd16A;UID=dba;PWD=sql;CON=ddd16A"
&lt;/pre&gt;&lt;/blockquote&gt;Here's the code, plus a test SELECT...&lt;br /&gt;
&lt;!-- ++++++++++++++++++++++++++++++ --&gt;&lt;b&gt;&lt;/b&gt;&lt;pre class="brush: text"&gt;CREATE PROCEDURE web_server_procedure (
   IN @service_parm1   LONG VARCHAR,
   IN @service_parm2   LONG VARCHAR )
RESULT ( html_string LONG VARCHAR )
BEGIN

CALL dbo.sa_set_http_header( 'Content-Type', 'text/html' );

SELECT STRING ( 
  '&amp;lt;HTML&gt; 
   &amp;lt;BODY BGCOLOR=#FFFFFF&gt;
   &amp;lt;TABLE&gt;
      &amp;lt;TR&gt;
         &amp;lt;TD STYLE="padding: 20"&gt;', @service_parm1, '&amp;lt;/TD&gt;
         &amp;lt;TD STYLE="padding: 20"&gt;', @service_parm2, '&amp;lt;/TD&gt;
      &amp;lt;/TR&gt;
   &amp;lt;/TABLE&gt;
   &amp;lt;/BODY&gt;
   &amp;lt;/HTML&gt;' );

END;

SELECT * FROM web_server_procedure ( 'Hello', 'World' );

html_string
-------------------------------------------
&amp;lt;HTML&gt; 
   &amp;lt;BODY BGCOLOR=#FFFFFF&gt;
   &amp;lt;TABLE&gt;
      &amp;lt;TR&gt;
         &amp;lt;TD STYLE="padding: 20"&gt;Hello&amp;lt;/TD&gt;
         &amp;lt;TD STYLE="padding: 20"&gt;World&amp;lt;/TD&gt;
      &amp;lt;/TR&gt;
   &amp;lt;/TABLE&gt;
   &amp;lt;/BODY&gt;
   &amp;lt;/HTML&gt;            
(1 rows)
Execution time: 0.024 seconds
&lt;/pre&gt;At this point there's nothing "web" about this "web server procedure" except for the fact it returns HTML... and other than looking like HTML, it's just ordinary text. In particular, the &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbadmin/da-dbserver.html*d5e11607" target="_blank"&gt;dbsrv16.exe command&lt;/a&gt; does not specify the -xs option, so the built-in SQL Anywhere HTTP server is not running.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-procedure-user-defined-statement.html*d5e44788" target="_blank"&gt;ordinary CREATE PROCEDURE statement&lt;/a&gt; starting on line 1 receives two string parameters and returns a single-row, single-column result set. That's what a SQL Anywhere "HTML web procedure" looks like: zero or more parameters that come from the URL, and a big fat HTML string as the result set.&lt;br /&gt;
&lt;br /&gt;
The CALL to &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/sa-set-http-header-system-procedure.html*d5e83491" target="_blank"&gt;sa_set_http_header()&lt;/a&gt; on line 7 is required for web procedures that return HTML pages to the browser. Other kinds of web procedures might return images, for example, so 'text/html' will have to be changed to something else.&lt;br /&gt;
&lt;br /&gt;
The SELECT starting on line 9 calls &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/string-function.html*d5e27291" target="_blank"&gt;STRING()&lt;/a&gt; to build up an HTML string. Remember, at this point it's just text that happens to contain HTML thingies.&lt;br /&gt;
&lt;br /&gt;
The SELECT * on line 23 is a unit test; it shows what web_server_procedure returns.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Step 2: Write a web service that returns an HTML web page to the browser&lt;/h3&gt;Web services require the builtin HTTP server to be running, so at this point you have to shut down Server A and start it again like this:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;"%SQLANY16%\bin64\dbspawn.exe"^
  -f "%SQLANY16%\bin64\dbsrv16.exe"^
  -xs http(port=12345)^
  ddd16A.db

"%SQLANY16%\bin64\dbisql.com"^
  -c "ENG=ddd16A;DBN=ddd16A;UID=dba;PWD=sql;CON=ddd16A"
&lt;/pre&gt;&lt;/blockquote&gt;The &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbadmin/xs-database-dbengine.html*d5e18253" target="_blank"&gt;-xs option&lt;/a&gt; tells SQL Anywhere to start the builtin HTTP server, and the port=12345 is only necessary if you've already got a local web server running (say, Foxhound) on port 80.&lt;br /&gt;
&lt;br /&gt;
Here's the code for the web service; the &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-service-statement.html*d5e46095" target="_blank"&gt;CREATE SERVICE statement&lt;/a&gt; is really just a wrapper around the CALL to web_server_procedure.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tip:&lt;/b&gt; Don't confuse CREATE SERVICE with remote servers (CREATE SERVER) or Linux/Windows services (dbsvc), they're not related.&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;CREATE SERVICE web_service 
   TYPE 'RAW'
   AUTHORIZATION OFF
   USER DBA
   AS CALL web_server_procedure ( 
      :service_parm1,  
      :service_parm2 );
&lt;/pre&gt;&lt;/blockquote&gt;The names "service_parm1" and "service_parm2" correspond to parameter names that will be coded in the URL in the browser, and the funky ":" syntax is something the SQL Anywhere parser needs.&lt;br /&gt;
&lt;br /&gt;
And here it is, the URL to code in the browser...&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;http://localhost:12345/web_service?service_parm1=Hello&amp;service_parm2=World
&lt;/pre&gt;&lt;/blockquote&gt;&lt;b&gt;Tip:&lt;/b&gt; The ? comes in front of the first parameter, &amp; in front of the others... getting that wrong is one of THE most common mistakes ever made :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-v6VqeSYw_-w/Uaj4RjR5RqI/AAAAAAAACNU/s2kdq0DQTh8/s1600/image+1+localhost+12345+web_service+displays+Hello+World.jpg" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-v6VqeSYw_-w/Uaj4RjR5RqI/AAAAAAAACNU/s2kdq0DQTh8/s320/image+1+localhost+12345+web_service+displays+Hello+World.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Step 3: Write a web client function that can call the web service&lt;/h3&gt;So, you can call the web server procedure directly, that was shown in Step 1. But what if you wanted to call that procedure from somewhere else, like a different SQL Anywhere database?&lt;br /&gt;
&lt;br /&gt;
And what if you didn't want to go through some kind of &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbusage/rpc-omni-using.html*d5e41414" target="_blank"&gt;"remote procedure call" mechanism&lt;/a&gt;, but wanted to call the web service instead? There's no CALL statement for web services.&lt;br /&gt;
&lt;br /&gt;
And there's no web browser inside a SQL Anywhere database, so you can't code the URL like in Step 2.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Or can you?&lt;/h3&gt;At this point, Server A is still running, still processing HTTP requests. A second server (call it Server B) is also required, but it doesn't need HTTP:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;"%SQLANY16%\bin64\dbspawn.exe"^
  -f "%SQLANY16%\bin64\dbsrv16.exe"^
  ddd16B.db

"%SQLANY16%\bin64\dbisql.com"^
  -c "ENG=ddd16B;DBN=ddd16B;UID=dba;PWD=sql;CON=ddd16B"
&lt;/pre&gt;&lt;/blockquote&gt;Here's the code for a &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-function-statement.html" target="_blank"&gt;SQL Anywhere web client function&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;CREATE FUNCTION web_client_function (
   IN parm1   LONG VARCHAR,
   IN parm2   LONG VARCHAR )
RETURNS LONG VARCHAR
URL 'HTTP://localhost:12345/web_service?service_parm1=!parm1&amp;service_parm2=!parm2';
&lt;/pre&gt;&lt;/blockquote&gt;The parameter names parm1 and parm2 are chosen by you, just for this web-style CREATE FUNCTION statement; they don't have scope outside it.&lt;br /&gt;
&lt;br /&gt;
The IN parm1 line defines the parameter name, and !parm1 refers to the parameter value at runtime; same thing for IN parm2 and !parm2.&lt;br /&gt;
&lt;br /&gt;
Here's a demo:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;A function call inside a SELECT on Server B &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;uses the URL to go out across the (local) internet,  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;fires up the web service inside Server A,  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;feeds it 'xxx' and 'yyy' &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;and gets back the web page as a single string...&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;pre&gt;SELECT web_client_function ( 'xxx', 'yyy' );

web_client_function('xxx','yyy')
-----------------------------------------
&amp;lt;HTML&gt; 
   &amp;lt;BODY BGCOLOR=#FFFFFF&gt;
   &amp;lt;TABLE&gt;
      &amp;lt;TR&gt;
         &amp;lt;TD STYLE="padding: 20"&gt;xxx&amp;lt;/TD&gt;
         &amp;lt;TD STYLE="padding: 20"&gt;yyy&amp;lt;/TD&gt;
      &amp;lt;/TR&gt;
   &amp;lt;/TABLE&gt;
   &amp;lt;/BODY&gt;
   &amp;lt;/HTML&gt;                
(1 rows)
Execution time: 0.044 seconds
&lt;/pre&gt;&lt;/blockquote&gt;Now you can honestly say you have "consumed a web service"... so much more sophisticated than "I called a function", doncha think? &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tip:&lt;/b&gt; Use simple parameter names like "parm1". Don't use "@service_parm1" or "service_parm1" or even "@parm1", they might compile but they will not work.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Step 4: Write a web client function that calls an external web service&lt;/h3&gt;Yes, you can go get stuff off real websites; here's how:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;CREATE FUNCTION web_client_function()
RETURNS LONG VARCHAR
URL 'http://www.amazon.com/' 
TYPE 'HTTP:GET';

SELECT web_client_function();

web_client_function()
--------------------------------------------------------------
&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd"&gt;
&amp;lt;html&gt;
&amp;lt;head&gt;
&amp;lt;script type="text/javascript"&gt;var ue_t0=ue_t0||+new Date();&amp;lt;/script&gt;
&amp;lt;script&gt;var BtechCF = {a:1,cf:function(){if(--BtechCF.a == 0){ uet('cf');}},inc:function(){BtechCF.a++;}};&amp;lt;/script&gt;
&amp;lt;!--btech-iplc--&gt;
  &amp;lt;script type="text/javascript"&gt;
  var btiplv;
     new Image().src = "http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V397411194_.png";
  &amp;lt;/script&gt;

... etcetera ...

&amp;lt;/body&gt;
&amp;lt;/html&gt;
&amp;lt;!-- MEOW --&gt;
&lt;/pre&gt;&lt;/blockquote&gt;Yeah, seriously, I know; &amp;lt;!-- MEOW --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tip:&lt;/b&gt; If you get '405 Method Not Allowed' or '503 Service Temporarily Unavailable', it might mean TYPE 'HTTP:GET' is missing from the &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-function-statement.html" target="_blank"&gt;web-style CREATE FUNCTION statement&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a NAME="step5"&gt;&lt;/a&gt;&lt;h3&gt;Step 5: Write a web client procedure that can call an external web service&lt;/h3&gt;Here's an example that's looks like Step 4 except&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;it's coded as a &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-procedure-statement.html" target="_blank"&gt;web-style CREATE PROCEDURE&lt;/a&gt; instead of a function, &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;it uses a parameter called ASIN (&lt;a href="http://en.wikipedia.org/wiki/Amazon_Standard_Identification_Number" target="_blank"&gt;Amazon Standard Identification Number&lt;/a&gt;) that is referenced as !ASIN to customize the URL when the procedure is called, and &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;it returns a two-column multi-row result set instead of a single string.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;pre&gt;CREATE PROCEDURE web_client_procedure (
   IN ASIN    LONG VARCHAR )
RESULT (
   attribute  LONG VARCHAR,
   value      LONG VARCHAR )
URL 'http://www.amazon.com/dp/!ASIN' 
TYPE 'HTTP:GET';

SELECT * FROM web_client_procedure ( '0345529057' );
&lt;/pre&gt;&lt;/blockquote&gt;&lt;b&gt;Tip:&lt;/b&gt; If you don't get any rows back, it might mean TYPE 'HTTP:GET' is missing from the &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbreference/create-procedure-statement.html" target="_blank"&gt;web-style CREATE PROCEDURE statement&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here's a SELECT that trims down the output a bit:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;SELECT CAST ( attribute AS VARCHAR ( 20 ) ) AS attribute,
       CAST (
          STRING ( 
             LEFT ( TRIM ( value ), 60 ),
             IF LENGTH ( TRIM ( value ) ) &gt; 60
                THEN '...'
                ELSE ''
             ENDIF )  
          AS VARCHAR ( 63 ) ) AS value 
  FROM web_client_procedure ( '0345529057' );

attribute            value                                                           
-------------------- --------------------------------------------------------------- 
Status               HTTP/1.1 200 OK                                                 
Body                 &amp;lt;html&gt;
                     &amp;lt;head&gt;
                     &amp;lt;script type="text/javascript"&gt;var ue_t0=ue_t... 
cache-control        no-cache                                                        
x-sap-pg             book_display_on_website                                         
Content-Type         text/html; charset=ISO-8859-1                                   
x-amz-id-2           hTtuCROD6gAIAKBqbfCpSpzjfvatUHoZf+7Chh/eKOrsHb/Fxeq7yhcpokR4... 
x-amz-id-1           0QJ30295GDTVSSP47EDW                                            
pragma               no-cache                                                        
Vary                 Accept-Encoding,User-Agent                                      
x-frame-options      SAMEORIGIN                                                      
Set-cookie           session-id=186-7664488-2512739; path=/; domain=.amazon.com; ... 
expires              -1                                                              
Connection           close                                                           
p3p                  policyref="http://www.amazon.com/w3c/p3p.xml",CP="CAO DSP LA... 
Server               Server                                                          
Date                 Fri, 31 May 2013 17:44:15 GMT                                   
(16 rows)
Execution time: 2.445 seconds
&lt;/pre&gt;&lt;/blockquote&gt;The "Body" value is all that the web client function in Step 4 returned; here, you get all sorts HTTP stuff, even the cookie.&lt;br /&gt;
&lt;br /&gt;
You can use Interactive SQL to feed the Body string back into a browser to see what you got; here's how:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Run a SELECT like this in Interactive SQL: &lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;SELECT TRIM ( value ) AS Body
  FROM web_client_procedure ( '0345529057' )
 WHERE attribute = 'Body';
&lt;/pre&gt;&lt;/blockquote&gt;&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;On the Results pane, doubleclick on the '&amp;lt;html&gt; &amp;lt;head&gt; ...' value. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;The "Value of column 'Body'" dialog box will open. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Select the HTML Preview tab, which will appear empty.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Then click on the Open in Browser button to see the Body string opened as local temporary "file:///" in the browser.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-cunT-9BJ1Uk/Uaj4bqQILyI/AAAAAAAACNc/_IKqZlw6CYs/s1600/image+2+Interactive+SQL+Value+of+Column+'Body'+Open+in+Browser.jpg" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-cunT-9BJ1Uk/Uaj4bqQILyI/AAAAAAAACNc/_IKqZlw6CYs/s320/image+2+Interactive+SQL+Value+of+Column+'Body'+Open+in+Browser.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;What's missing?&lt;/h3&gt;Two big things are missing from this article: First, gathering raw HTML ain't the most effective way to get data from other people's web services.&lt;br /&gt;
&lt;br /&gt;
Second, some details have been left out, like&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Where does HTTP fit into all of this?&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;What the heck is TYPE 'HTTP:GET' anyway?&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;What's the story on all those attributes like Content-Type and pragma and p3p?&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;This, however, is the academic sub-basement. More effective ways to get data won't be found here, you have to go at least one level up.&lt;br /&gt;
&lt;br /&gt;
And guess what? There's a level below sub-basement, that's where HTTP lives, maybe lower.&lt;br /&gt;
&lt;br /&gt;
In other words, out of scope, sorry :)&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/leRzaiEwrRY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/leRzaiEwrRY/client-server-via-web-services-inside.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-cunT-9BJ1Uk/Uaj4bqQILyI/AAAAAAAACNc/_IKqZlw6CYs/s72-c/image+2+Interactive+SQL+Value+of+Column+'Body'+Open+in+Browser.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/client-server-via-web-services-inside.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-6383361961109466739</guid><pubDate>Mon, 03 Jun 2013 07:01:00 +0000</pubDate><atom:updated>2013-06-03T03:01:00.924-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">latest EBFs</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>Latest SQL Anywhere Updates: 16.0.0.1535 LinWin, 12.0.1.3895 Windows</title><description>&lt;TABLE STYLE="margin: 0; padding: 0; border-collapse: collapse; " WIDTH="100%"&gt;&lt;TR&gt;&lt;TD STYLE="padding-right: 1em;" VALIGN="TOP"&gt;&lt;h3&gt;Current builds for the active platforms...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt;HP-UX     &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16889" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
 Itanium  &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16693" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

IBM AIX   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16887" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16692" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Linux     &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16989" target="_blank"&gt;16.0.0.1535 Update&lt;/a&gt;             *** 30 May 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16690" target="_blank"&gt;12.0.1.3873 Update&lt;/a&gt;                 05 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16718" target="_blank"&gt;12.0.1 Chinese,&lt;/a&gt;                    16 Apr 2013
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16717" target="_blank"&gt;Japanese Docs (Eclipse)&lt;/a&gt;     16 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16694" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Mac OS    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16946" target="_blank"&gt;12.0.1.3901 Update&lt;/a&gt;                 23 May 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=13869" target="_blank"&gt;11.0.1.2449 Update&lt;/a&gt;                 29 Jun 2010

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16888" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
 SPARC    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16695" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16886" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
 x64      &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16696" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Windows   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16987" target="_blank"&gt;16.0.0.1535 Update&lt;/a&gt;             *** 30 May 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16983" target="_blank"&gt;12.0.1.3895 Update&lt;/a&gt;             *** 28 May 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16111" target="_blank"&gt;12.0.1 French,&lt;/a&gt;                     25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16110" target="_blank"&gt;English,&lt;/a&gt;                    25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16112" target="_blank"&gt;German,&lt;/a&gt;                     25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16658" target="_blank"&gt;Chinese,&lt;/a&gt;                    28 Mar 2013
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16657" target="_blank"&gt;Japanese Docs (HTML/PDF)&lt;/a&gt;    28 Mar 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16716" target="_blank"&gt;11.0.1.2960 Update&lt;/a&gt;                 16 Apr 2013
&lt;/pre&gt;&lt;/TD&gt;&lt;TD STYLE="border-left: 1px solid black;" VALIGN="TOP"&gt; &lt;h3 STYLE="padding-left: 0.3em;"&gt;Other Stuff...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt; &lt;a href="http://downloads.sybase.com/swd/base.do?client=support" target="_blank"&gt;Older Updates&lt;/a&gt;

 Free support! &lt;a href="http://sqlanywhere-forum.sybase.com/" target="_blank"&gt;Q&amp;A forum&lt;/a&gt;
   ...or, &lt;a href="http://www.sybase.com/contactus/support/" target="_blank"&gt;call Tech Support&lt;/a&gt;

 SQL Anywhere...
   ...&lt;a href="http://www.sybase.com/products/databasemanagement/sqlanywhere" target="_blank"&gt;Sybase home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/community/sybase-sql-anywhere" target="_blank"&gt;SAP home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/docs/DOC-31795" target="_blank"&gt;SAP Developer Center&lt;/a&gt; 

 &lt;a href="http://eshop.sybase.com/eshop/buy?id=19160" target="_blank"&gt;Buy SQL Anywhere&lt;/a&gt; 

 Developer Edition... 
   [&lt;a href="http://www.sap.com/campaign/na/usa/CRM-XU13-CST-SQLDEVEDM/index.html" target="_blank"&gt;16.0&lt;/a&gt;] [&lt;a href="http://www.sybase.com/detail?id=1016644" target="_blank"&gt;12.0.1&lt;/a&gt;] [&lt;a href="http://response.sybase.com/forms/SQLAnywhere1101DeveloperEditionDownloadsybase" target="_blank"&gt;11.0.1&lt;/a&gt;]

 Download the...
   &lt;a href="http://response.sybase.com/forms/SQLAnywhere12EducationalEditionDownload" target="_blank"&gt;Educational Edition&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1057272" target="_blank"&gt;Web Edition&lt;/a&gt; 

 Supported Platforms...
   &lt;a href="http://scn.sap.com/docs/DOC-35654" target="_blank"&gt;SQL Anywhere&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1035824" target="_blank"&gt;Linux&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1097287" target="_blank"&gt;OnDemand&lt;/a&gt;

 &lt;a href="http://m.sybase.com/detail?id=1011880" target="_blank"&gt;ODBC Drivers for MobiLink&lt;/a&gt;
&lt;/pre&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;
The asterisks "***" show which items have appeared on the &lt;b&gt;Sybase&lt;/b&gt; website since the &lt;a href="http://sqlanywhere.blogspot.ca/2013/05/latest-sql-anywhere-update-12013901-for.html" target="_blank"&gt;previous version&lt;/a&gt; of &lt;b&gt;this&lt;/b&gt; page. &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Only the latest fully-supported versions of SQL Anywhere (11.0.1, 12.0.1 and 16.0) are shown here.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Just because an older version or different platform isn't "fully supported" any more doesn't mean you can't download files (or ask questions, or get help), it just means there won't be any more new Updates released.&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/glAi-f-NlTI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/glAi-f-NlTI/latest-sql-anywhere-updates-16001535.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/06/latest-sql-anywhere-updates-16001535.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-3867904115367963544</guid><pubDate>Fri, 31 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-31T03:01:01.110-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL code</category><title>Characteristic Errors, Revision 2</title><description>&lt;p&gt;Back on &lt;a href="http://sqlanywhere.blogspot.ca/2011/08/characteristic-errors-revisited.html" target="_blank"&gt;August 5, 2011&lt;/a&gt; this list had 22 items, now it has 27...&lt;br /&gt;
&lt;hr&gt;A &lt;b&gt;characteristic error&lt;/b&gt; is an error that is so easy to make that it appears you are being actively encouraged to make it by the very nature of the computer program you are using.&lt;br /&gt;
&lt;br /&gt;
For example, sending an email without the attachment is a characteristic error of all email programs.&lt;blockquote&gt;&lt;i&gt;...except Gmail. Gmail warns you about missing attachments... Gmail is magic!&lt;/i&gt;&lt;/blockquote&gt;Here are some errors that are characteristic of SQL in general, SQL Anywhere in particular, and some companion programs.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;SQL: Seeing too little data, or no data at all, because a predicate in the WHERE clause effectively turned your OUTER JOIN into an INNER JOIN.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Seeing too much data because a missing predicate effectively turned your INNER JOIN into a CROSS JOIN.&lt;p style="clear: both;"&gt;&lt;/li&gt;&lt;li&gt;SQL: Getting the wrong COUNT() or SUM() because you forgot to code WHERE ... IS NOT NULL, or you *did* code it when you shouldn't have.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Getting the wrong answer because you forgot that, in general, NULL values [cough] suck.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Not seeing MESSAGE output because you forgot to run SET TEMPORARY OPTION DEBUG_MESSAGES = 'ON';&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Not seeing any data because you forgot ON COMMIT PRESERVE ROWS or NOT TRANSACTIONAL.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Coding ENDIF where END IF was required, or vice versa (before Version 11).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Connecting to the wrong server because you forgot DOBROAD=NONE (before Version 12).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Forgetting the asterisk in SELECT TOP 10 FROM ...&lt;p style="clear: both;"&gt;&lt;/li&gt;&lt;li&gt;SQL Anywhere: Coding IF NOT VAREXISTS ( 'x' ) THEN ... instead of IF VAREXISTS ( 'x' ) = 0 THEN ...&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Coding the wrong magic numbers 1, 2, 3, ... in the get_value() and set_value() calls in an EXTERNAL C DLL function.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting proxy table ODBC errors because the engine's running as a service and you've set up a User DSN instead of System DSN.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting file-related errors because the file specifications are relative to the server rather than the client.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting file-related errors because the engine's running as a service without the necessary permissions.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Coding CREATE TRIGGER IF NOT EXISTS instead of CREATE OR REPLACE TRIGGER, or vice versa for CREATE TABLE (in 11.0.1 or later).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Getting integer arithmetic when you wanted fractional parts because you forgot to CAST.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Stored procedure debugger: Setting it to watch a specific user id other than the one you're using to test your code.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Sybase Central: Setting it to display objects for owner names other than the one you're interested in.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Copy and paste: Forgetting to edit after pasting; e.g., Copy and paste SET @continue = 'Y' into the body of a WHILE loop and then forgetting to change it to 'N'.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Forgetting to call ml_add_column for any of the columns you're trying to synchronize, thus guaranteeing yourself a "Sassen Frassen Fricken Fracken!" moment when you run the first test.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Forgetting to call ml_add_[various] with the NULL parameter to delete old ml_[whatever] rows, thus ending up with thousands of orphan system table rows in the consolidated database.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;OLAP Windowing: Coding the wrong combination of ASC and DESC in an inner OVER ORDER BY clause and the outer SELECT ORDER BY: different when they should be the same, the same when they should be different, or some other variation of "wrong combination"...&lt;br /&gt;
&lt;!-- ++++++++++++++++++++++++++++++ --&gt;&lt;b&gt;&lt;/b&gt;&lt;pre class="brush: text"&gt;            SELECT older_sample_set.sample_set_number
              INTO @20_older_sample_set_number
              FROM ( SELECT TOP 20
                            ROW_NUMBER() OVER ( ORDER BY rroad_sample_set.sample_set_number ASC ) AS scrolling_row_number,
                            rroad_sample_set.sample_set_number                                    AS sample_set_number
                       FROM rroad_sample_set
                      WHERE rroad_sample_set.sampling_id       = @sampling_id
                        AND rroad_sample_set.sample_set_number &lt; @sample_set_number
                      ORDER BY rroad_sample_set.sample_set_number DESC ) AS older_sample_set
             WHERE older_sample_set.scrolling_row_number = 20;&lt;/pre&gt;

&lt;hr&gt;&lt;b&gt;New entries...&lt;/b&gt;&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;MobiLink: Forgetting to call ml_add_column() when trying to use named parameters instead of "?" in versions 10 and 11 MobiLink scripts, resulting in a "What the ... ? Sassen Frassen Fricken Fracken!" moment during the first test (thank you, Jeff Albion).&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL: Omitting a PRIMARY KEY column from the WHERE clause, thus turning a singleton SELECT (or DELETE!) into something rather more enthusiastic than expected (thank you, Ron Hiner). &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;HTTP web services: Leaving an &amp; in the code when a ? is required, and vice versa, when editing service URLs; e.g., 'HTTP://localhost:12345/web_service&amp;service_parm2=!parm2' &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;SQL Anywhere: Forgetting that not all functions look like functions: SELECT CAST ( CURRENT TIMESTAMP, VARCHAR ) &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Batch file: Trailing spaces on SET commands; e.g., SELECT CAST ( xp_getenv ( 'DEBUG_MESSAGES' ) AS VARCHAR ) returns 'OFF ' instead of 'OFF' after SET DEBUG_MESSAGES=OFF   &lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;hr&gt;&lt;p&gt;Memo to Ove B: Please explain &lt;a href="http://sqlanywhere.blogspot.ca/2010/12/how-many-times-have-you-done-this.html?showComment=1291710806678#c3825780936499740205" target="_blank"&gt;your suggested addition&lt;/a&gt; "Forget to failsafe a parent-child traversal. It will eventually take down your server... at random times:-("
&lt;p&gt;Thanks!
&lt;p&gt;Breck
&lt;p&gt;&lt;hr&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/_WwXDPHArmQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/_WwXDPHArmQ/characteristic-errors-revision-2.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>4</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/characteristic-errors-revision-2.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-7651319133717041473</guid><pubDate>Wed, 29 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-29T03:01:00.228-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">latest EBFs</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>Latest SQL Anywhere Update: 12.0.1.3901 for Mac OS</title><description>&lt;table STYLE="margin: 0; padding: 0; border-collapse: collapse; " WIDTH="100%"&gt;&lt;tr&gt;&lt;td STYLE="padding-right: 1em;" VALIGN="TOP"&gt;&lt;h3&gt;Current builds for the active platforms...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt;HP-UX     &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16889" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
 Itanium  &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16693" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

IBM AIX   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16887" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16692" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Linux     &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16890" target="_blank"&gt;16.0.0.1512 Update&lt;/a&gt;                 16 May 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16690" target="_blank"&gt;12.0.1.3873 Update&lt;/a&gt;                 05 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16718" target="_blank"&gt;12.0.1 Chinese,&lt;/a&gt;                    16 Apr 2013
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16717" target="_blank"&gt;Japanese Docs (Eclipse)&lt;/a&gt;     16 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16694" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Mac OS    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16946" target="_blank"&gt;12.0.1.3901 Update&lt;/a&gt;             *** 23 May 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=13869" target="_blank"&gt;11.0.1.2449 Update&lt;/a&gt;                 29 Jun 2010

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16888" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
 SPARC    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16695" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16886" target="_blank"&gt;12.0.1.3894 Update&lt;/a&gt;                 16 May 2013
 x64      &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16696" target="_blank"&gt;11.0.1.2958 Update&lt;/a&gt;                 08 Apr 2013

Windows   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16891" target="_blank"&gt;16.0.0.1512 Update&lt;/a&gt;                 16 May 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16702" target="_blank"&gt;12.0.1.3873 Update&lt;/a&gt;                 08 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16111" target="_blank"&gt;12.0.1 French,&lt;/a&gt;                     25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16110" target="_blank"&gt;English,&lt;/a&gt;                    25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16112" target="_blank"&gt;German,&lt;/a&gt;                     25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16658" target="_blank"&gt;Chinese,&lt;/a&gt;                    28 Mar 2013
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16657" target="_blank"&gt;Japanese Docs (HTML/PDF)&lt;/a&gt;    28 Mar 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16716" target="_blank"&gt;11.0.1.2960 Update&lt;/a&gt;                 16 Apr 2013
&lt;/pre&gt;&lt;/TD&gt;&lt;td STYLE="border-left: 1px solid black;" VALIGN="TOP"&gt; &lt;h3 STYLE="padding-left: 0.3em;"&gt;Other Stuff...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://downloads.sybase.com/swd/base.do?client=support" target="_blank"&gt;Older Updates&lt;/a&gt;

 Free support! &lt;a href="http://sqlanywhere-forum.sybase.com/" target="_blank"&gt;Q&amp;A forum&lt;/a&gt;
   ...or, &lt;a href="http://www.sybase.com/contactus/support/" target="_blank"&gt;call Tech Support&lt;/a&gt;

 SQL Anywhere...
   ...&lt;a href="http://www.sybase.com/products/databasemanagement/sqlanywhere" target="_blank"&gt;Sybase home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/community/sybase-sql-anywhere" target="_blank"&gt;SAP home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/docs/DOC-31795" target="_blank"&gt;SAP Developer Center&lt;/a&gt; 

 &lt;a href="http://eshop.sybase.com/eshop/buy?id=19160" target="_blank"&gt;Buy SQL Anywhere&lt;/a&gt; 

 Developer Edition... 
   [&lt;a href="http://www.sap.com/campaign/na/usa/CRM-XU13-CST-SQLDEVEDM/index.html" target="_blank"&gt;16.0&lt;/a&gt;] [&lt;a href="http://www.sybase.com/detail?id=1016644" target="_blank"&gt;12.0.1&lt;/a&gt;] [&lt;a href="http://response.sybase.com/forms/SQLAnywhere1101DeveloperEditionDownloadsybase" target="_blank"&gt;11.0.1&lt;/a&gt;]

 Download the...
   &lt;a href="http://response.sybase.com/forms/SQLAnywhere12EducationalEditionDownload" target="_blank"&gt;Educational Edition&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1057272" target="_blank"&gt;Web Edition&lt;/a&gt; 

 Supported Platforms...
   &lt;a href="http://scn.sap.com/docs/DOC-35654" target="_blank"&gt;SQL Anywhere&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1035824" target="_blank"&gt;Linux&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1097287" target="_blank"&gt;OnDemand&lt;/a&gt;

 &lt;a href="http://m.sybase.com/detail?id=1011880" target="_blank"&gt;ODBC Drivers for MobiLink&lt;/a&gt;
&lt;/pre&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;/TABLE&gt;The asterisks "***" show which items have appeared on the &lt;b&gt;Sybase&lt;/b&gt; website since the &lt;a href="http://sqlanywhere.blogspot.ca/2013/05/latest-sql-anywhere-updates-first-for.html" target="_blank"&gt;previous version&lt;/a&gt; of &lt;b&gt;this&lt;/b&gt; page. &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Only the latest fully-supported versions of SQL Anywhere (11.0.1, 12.0.1 and 16.0) are shown here.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;Just because an older version or different platform isn't "fully supported" any more doesn't mean you can't download files (or ask questions, or get help), it just means there won't be any more new Updates released.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/xB7xg1vvc8k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/xB7xg1vvc8k/latest-sql-anywhere-update-12013901-for.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/latest-sql-anywhere-update-12013901-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-2351803464957882338</guid><pubDate>Sun, 26 May 2013 18:55:00 +0000</pubDate><atom:updated>2013-05-26T14:55:40.916-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HANA</category><category domain="http://www.blogger.com/atom/ns#">SQL code</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>Cost-free, ERP-free Online HANA Course (UPDATE)</title><description>&lt;p&gt;&lt;hr&gt;UPDATE: SAP has changed the start date from Sunday to Monday...&lt;br /&gt;
&lt;hr&gt;&lt;p&gt;If you're interested in HANA The Relational Database Management System (and maybe you should be), there's a free online course starting on &lt;strike&gt;May 26, 2013 (that's four days from now):&lt;/strike&gt; Monday, May 27, 2013:&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;&lt;a href="https://open.sap.com/course/hana1" target="_blank"&gt;Introduction to Software Development on SAP HANA&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Thomas Jung&lt;br /&gt;
&lt;br /&gt;
SAP HANA is an in-memory data platform that is deployable as an appliance or in the cloud. At its core, it is an innovative in-memory relational database management system that makes full sense of the capabilities of current hardware to increase application performance, to reduce cost of ownership, and to enable new scenarios and applications that were not possible before. &lt;br /&gt;
&lt;br /&gt;
With SAP HANA, you have the opportunity to build applications that integrate the business logic, control logic, and the database layer with unprecedented performance. As a developer, one of the key questions is how you can minimize data movements. The more you can do directly on the data in memory next to the CPUs, the better the application will perform. &lt;br /&gt;
&lt;br /&gt;
This course will introduce you to native software development on SAP HANA. Registration, learning content, and the final exam are free of charge. However, to fully benefit from the course, you can access a fee-based system environment to develop your own code. SAP works with several cloud providers to give you a choice of infrastructure platforms and attractive pricing models to enable system access at a very low cost.&lt;br /&gt;
&lt;br /&gt;
Start: &lt;strike&gt;May 26, 2013&lt;/strike&gt; no, it's not starting on Sunday, in spite of what the SAP website said, it's starting on Monday, May 27, 2013... at least, that's what the website says now :)&lt;br /&gt;
&lt;br /&gt;
Course language: English&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://open.sap.com/course/hana1" target="_blank"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-0gNex-4l9HA/UZvbdugypSI/AAAAAAAACMk/zBkX3EqeCyI/s1600/Introduction+to+Software+Development+on+SAP+HANA+935+611.jpg" width="700" height="457" title="Introduction to Software Development on SAP HANA"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;h3&gt;If you think you might be interested...&lt;/h3&gt;. . . as a developer interested in new technologies, it might help to &lt;a href="http://sqlanywhere.blogspot.ca/2013/05/hana-enterprise-cloud.html" target="_blank"&gt;watch the inventor (and others) talk about it&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;&lt;a href="http://sqlanywhere.blogspot.ca/2013/05/hana-enterprise-cloud.html" target="_blank"&gt;&lt;img src="http://3.bp.blogspot.com/-iQUVkzqChFw/UYvD3hXO65I/AAAAAAAACL0/-F7tl2jjIx4/s1600/SAP+HANA+Enterprise+Cloud+Press+Event.jpg" width="320" height="184" title="SAP HANA Enterprise Cloud Press Event"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;h3&gt;If you want to get ready...&lt;/h3&gt;. . . and take a "warm-up to the introduction" that's available, for free, &lt;b&gt;right now&lt;/b&gt;, try this:&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;&lt;a href="https://open.sap.com/course/hana-warmup" target="_blank"&gt;Warm-Up: In-Memory Data Management&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Dr.-Ing. Jürgen Müller&lt;br /&gt;
&lt;br /&gt;
While the first openSAP course, Introduction to Software Development on SAP HANA, is intended as an introductory class for software developers who are new to SAP HANA, it makes sense for course participants to obtain an understanding of the fundamental concepts of in-memory data management before the course starts. &lt;br /&gt;
&lt;br /&gt;
If you have taken the openHPI course on the topic that was delivered by Prof. Hasso Plattner in 2012, you will be good to go. If you have not attended this course or similar training programs on in-memory data management, we recommend that you use this summary of Prof. Plattner’s lectures as a warm-up exercise. The summary was prepared by Dr.-Ing. Jürgen Müller (HPI) and is exclusively available on openSAP.&lt;br /&gt;
&lt;br /&gt;
Start: Apr 28, 2013&lt;br /&gt;
&lt;br /&gt;
Course language: English&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://open.sap.com/course/hana-warmup" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-viGQ75HmYNM/UZvgjl-l6fI/AAAAAAAACM0/Yapv_cYrWtM/s1600/Warm-Up+In-Memory+Data+Management+867+544.jpg" width="700" height="439" title="Warm-Up In-Memory Data Management"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;h3&gt;...and the best part?&lt;/h3&gt;It's guaranteed to be ERP-free! For developers only!&lt;br /&gt;
&lt;br /&gt;
No salesperson will call!&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/v9FyuzDCKBU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/v9FyuzDCKBU/cost-free-erp-free-online-hana-course_26.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-0gNex-4l9HA/UZvbdugypSI/AAAAAAAACMk/zBkX3EqeCyI/s72-c/Introduction+to+Software+Development+on+SAP+HANA+935+611.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/cost-free-erp-free-online-hana-course_26.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-284661502397541641</guid><pubDate>Fri, 24 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-24T03:01:01.031-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">The fRiDaY File</category><category domain="http://www.blogger.com/atom/ns#">HANA</category><title>The fRiDaY File - Screech!</title><description>&lt;p&gt;&lt;b&gt;Screech!&lt;/b&gt; That's the sound of me hitting &lt;b&gt;this&lt;/b&gt; sentence in the middle of an otherwise excellent &lt;a href="http://www.zdnet.com/the-real-sap-sapphire-story-7000015772/" target="_blank"&gt;article about SAP's recent Sapphire conference&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;"The transport mechanism for this is a HANA cloud platform that allows the software’s data calls to go through HANA instead of a relational data base."&lt;hr&gt;&lt;/blockquote&gt; &lt;h3&gt;Whoa, hold on there sonny!&lt;/h3&gt;HANA &lt;b&gt;&lt;u&gt;is&lt;/u&gt;&lt;/b&gt; a relational database system. It has other stuff too (a graph engine and a text engine) but the big deal is its &lt;a href="http://en.wikipedia.org/wiki/SAP_HANA#Column_and_row_store" target="_blank"&gt;super-fast in-memory row- and column-oriented relational engine&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Maybe the author should have said "instead of a traditional relational data base" or a "disk-oriented relational data base" or a "legacy DBMS", something like that.&lt;br /&gt;
&lt;br /&gt;
But no, I think the author really does think &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;that HANA is different from relational, &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;that relational implies row-oriented,&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;that column-oriented does not qualify as relational, and&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;that in-memory is somehow not relational. &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;If he doesn't think that, certainly lots of other people do.&lt;br /&gt;
&lt;h3&gt;Not true!&lt;/h3&gt;One of &lt;a href="http://en.wikipedia.org/wiki/Codd's_12_rules" target="_blank"&gt;Codd's 12 rules for relational database management systems&lt;/a&gt; is this: &lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;&lt;b&gt;Rule 8: Physical data independence:&lt;/b&gt; Changes to the physical level (how the data is stored, whether in arrays or linked lists etc.) must not require a change to an application based on the structure.&lt;hr&gt;&lt;/blockquote&gt;That means it's perfectly OK, even encouraged, to have a variety of different physical architectures just as long as those architectures and the differences between them don't affect application code.&lt;br /&gt;
&lt;br /&gt;
And THAT means HANA can be called a relational database even when it uses a column-oriented store, as long as Rule 8 and the others hold.&lt;br /&gt;
&lt;br /&gt;
Another thing: HANA has BOTH row- and column-oriented tables. In fact, if you code &lt;a href="http://help.sap.com/hana/html/sql_create_table.html" target="_blank"&gt;CREATE TABLE in HANA&lt;/a&gt; you get row-based storage; to get column-based you have to ask for it by coding CREATE COLUMN TABLE.&lt;br /&gt;
&lt;br /&gt;
Pedants might say having to code CREATE COLUMN TABLE violates Rule 8 because it requires a change to application code. Pedants might also say that not one single commercial product qualifies as "relational" because there are many ways physical characteristics bubble up into the code; think query hints.&lt;br /&gt;
&lt;br /&gt;
In the real world pedants live at home in their parents' basement and have no effect on the fact SQL Anywhere, SQL Server etcetera are all recognized as relational...&lt;br /&gt;
&lt;h3&gt;...and HANA as well.&lt;/h3&gt;&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/HZP3yyAT2z4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/HZP3yyAT2z4/the-friday-file-screech.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/the-friday-file-screech.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-2772721912192988924</guid><pubDate>Wed, 22 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-23T12:05:01.366-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HANA</category><category domain="http://www.blogger.com/atom/ns#">SQL code</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>Cost-free, ERP-free Online HANA Course</title><description>&lt;p&gt;If you're interested in HANA The Relational Database Management System (and maybe you should be), there's a free online course starting on May 26, 2013 (that's four days from now):&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;&lt;a href="https://open.sap.com/course/hana1" target="_blank"&gt;Introduction to Software Development on SAP HANA&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Thomas Jung&lt;br /&gt;
&lt;br /&gt;
SAP HANA is an in-memory data platform that is deployable as an appliance or in the cloud. At its core, it is an innovative in-memory relational database management system that makes full sense of the capabilities of current hardware to increase application performance, to reduce cost of ownership, and to enable new scenarios and applications that were not possible before. &lt;br /&gt;
&lt;br /&gt;
With SAP HANA, you have the opportunity to build applications that integrate the business logic, control logic, and the database layer with unprecedented performance. As a developer, one of the key questions is how you can minimize data movements. The more you can do directly on the data in memory next to the CPUs, the better the application will perform. &lt;br /&gt;
&lt;br /&gt;
This course will introduce you to native software development on SAP HANA. Registration, learning content, and the final exam are free of charge. However, to fully benefit from the course, you can access a fee-based system environment to develop your own code. SAP works with several cloud providers to give you a choice of infrastructure platforms and attractive pricing models to enable system access at a very low cost.&lt;br /&gt;
&lt;br /&gt;
Start: May 26, 2013&lt;br /&gt;
&lt;br /&gt;
Course language: English&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://open.sap.com/course/hana1" target="_blank"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-0gNex-4l9HA/UZvbdugypSI/AAAAAAAACMk/zBkX3EqeCyI/s1600/Introduction+to+Software+Development+on+SAP+HANA+935+611.jpg" width="700" height="457" title="Introduction to Software Development on SAP HANA"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;h3&gt;If you think you might be interested...&lt;/h3&gt;. . . as a developer interested in new technologies, it might help to &lt;a href="http://sqlanywhere.blogspot.ca/2013/05/hana-enterprise-cloud.html" target="_blank"&gt;watch the inventor (and others) talk about it&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;&lt;a href="http://sqlanywhere.blogspot.ca/2013/05/hana-enterprise-cloud.html" target="_blank"&gt;&lt;img src="http://3.bp.blogspot.com/-iQUVkzqChFw/UYvD3hXO65I/AAAAAAAACL0/-F7tl2jjIx4/s1600/SAP+HANA+Enterprise+Cloud+Press+Event.jpg" width="320" height="184" title="SAP HANA Enterprise Cloud Press Event"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;h3&gt;If you want to get ready...&lt;/h3&gt;. . . and take a "warm-up to the introduction" that's available, for free, &lt;b&gt;right now&lt;/b&gt;, try this:&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;&lt;a href="https://open.sap.com/course/hana-warmup" target="_blank"&gt;Warm-Up: In-Memory Data Management&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Dr.-Ing. Jürgen Müller&lt;br /&gt;
&lt;br /&gt;
While the first openSAP course, Introduction to Software Development on SAP HANA, is intended as an introductory class for software developers who are new to SAP HANA, it makes sense for course participants to obtain an understanding of the fundamental concepts of in-memory data management before the course starts. &lt;br /&gt;
&lt;br /&gt;
If you have taken the openHPI course on the topic that was delivered by Prof. Hasso Plattner in 2012, you will be good to go. If you have not attended this course or similar training programs on in-memory data management, we recommend that you use this summary of Prof. Plattner’s lectures as a warm-up exercise. The summary was prepared by Dr.-Ing. Jürgen Müller (HPI) and is exclusively available on openSAP.&lt;br /&gt;
&lt;br /&gt;
Start: Apr 28, 2013&lt;br /&gt;
&lt;br /&gt;
Course language: English&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://open.sap.com/course/hana-warmup" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-viGQ75HmYNM/UZvgjl-l6fI/AAAAAAAACM0/Yapv_cYrWtM/s1600/Warm-Up+In-Memory+Data+Management+867+544.jpg" width="700" height="439" title="Warm-Up In-Memory Data Management"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;h3&gt;...and the best part?&lt;/h3&gt;It's guaranteed to be ERP-free! For developers only!&lt;br /&gt;
&lt;br /&gt;
No salesperson will call!&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/qwvZ4xwD68Y" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/qwvZ4xwD68Y/cost-free-erp-free-online-hana-course.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-0gNex-4l9HA/UZvbdugypSI/AAAAAAAACMk/zBkX3EqeCyI/s72-c/Introduction+to+Software+Development+on+SAP+HANA+935+611.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/cost-free-erp-free-online-hana-course.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-2637364696076290596</guid><pubDate>Mon, 20 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-20T03:01:00.971-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">latest EBFs</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>Latest SQL Anywhere Updates: First for V16! plus 12.0.1.3894 for others</title><description>&lt;TABLE STYLE="margin: 0; padding: 0; border-collapse: collapse; " WIDTH="100%"&gt;&lt;TR&gt;&lt;TD STYLE="padding-right: 1em;" VALIGN="TOP"&gt;&lt;h3&gt;Current builds for the active platforms...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt;HP-UX     &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16889" target="_blank"&gt;12.0.1.3894 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;         *** 16 May 2013 ***
 Itanium  &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16693" target="_blank"&gt;11.0.1.2958 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             08 Apr 2013

IBM AIX   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16887" target="_blank"&gt;12.0.1.3894 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;         *** 16 May 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16692" target="_blank"&gt;11.0.1.2958 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             08 Apr 2013

Linux     &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16890" target="_blank"&gt;16.0.0.1512 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;         *** 16 May 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16690" target="_blank"&gt;12.0.1.3873 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             05 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16718" target="_blank"&gt;12.0.1 Chinese Docs (Eclipse),&lt;/a&gt;     16 Apr 2013
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16717" target="_blank"&gt;Japanese Docs&lt;/a&gt;               16 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16694" target="_blank"&gt;11.0.1.2958 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             08 Apr 2013

Mac OS    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16689" target="_blank"&gt;12.0.1.3871 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             05 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=13869" target="_blank"&gt;11.0.1.2449 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             29 Jun 2010

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16888" target="_blank"&gt;12.0.1.3894 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;         *** 16 May 2013 ***
 SPARC    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16695" target="_blank"&gt;11.0.1.2958 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             08 Apr 2013

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16886" target="_blank"&gt;12.0.1.3894 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;         *** 16 May 2013 ***
 x64      &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16696" target="_blank"&gt;11.0.1.2958 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             08 Apr 2013

Windows   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16891" target="_blank"&gt;16.0.0.1512 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;         *** 16 May 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16702" target="_blank"&gt;12.0.1.3873 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             08 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16111" target="_blank"&gt;12.0.1 French Docs (HTML/PDF),&lt;/a&gt;     25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16110" target="_blank"&gt;English Docs,&lt;/a&gt;               25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16112" target="_blank"&gt;German Docs,&lt;/a&gt;                25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16658" target="_blank"&gt;Chinese Docs,&lt;/a&gt;               28 Mar 2013
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16657" target="_blank"&gt;Japanese Docs&lt;/a&gt;               28 Mar 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16716" target="_blank"&gt;11.0.1.2960 &lt;strike&gt;EBF&lt;/strike&gt; Update&lt;/a&gt;             16 Apr 2013
&lt;/pre&gt;&lt;/TD&gt;&lt;TD STYLE="border-left: 1px solid black;" VALIGN="TOP"&gt; &lt;h3 STYLE="padding-left: 0.3em;"&gt;Other Stuff...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt; &lt;a href="http://downloads.sybase.com/swd/base.do?client=support" target="_blank"&gt;Older &lt;strike&gt;EBFs&lt;/strike&gt; Updates&lt;/a&gt;

 Free support! &lt;a href="http://sqlanywhere-forum.sybase.com/" target="_blank"&gt;Q&amp;A forum&lt;/a&gt;
   ...or, &lt;a href="http://www.sybase.com/contactus/support/" target="_blank"&gt;call Tech Support&lt;/a&gt;

 SQL Anywhere...
   ...&lt;a href="http://www.sybase.com/products/databasemanagement/sqlanywhere" target="_blank"&gt;Sybase home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/community/sybase-sql-anywhere" target="_blank"&gt;SAP home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/docs/DOC-31795" target="_blank"&gt;SAP Developer Center&lt;/a&gt; 

 &lt;a href="http://eshop.sybase.com/eshop/buy?id=19160" target="_blank"&gt;Buy SQL Anywhere&lt;/a&gt; 

 Developer Edition... 
   [&lt;a href="http://www.sap.com/campaign/na/usa/CRM-XU13-CST-SQLDEVEDM/index.html" target="_blank"&gt;16.0&lt;/a&gt;] [&lt;a href="http://www.sybase.com/detail?id=1016644" target="_blank"&gt;12.0.1&lt;/a&gt;] [&lt;a href="http://response.sybase.com/forms/SQLAnywhere1101DeveloperEditionDownloadsybase" target="_blank"&gt;11.0.1&lt;/a&gt;]

 Download the...
   &lt;a href="http://response.sybase.com/forms/SQLAnywhere12EducationalEditionDownload" target="_blank"&gt;Educational Edition&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1057272" target="_blank"&gt;Web Edition&lt;/a&gt; 

 Supported Platforms...
   &lt;a href="http://scn.sap.com/docs/DOC-35654" target="_blank"&gt;SQL Anywhere&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1035824" target="_blank"&gt;Linux&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1097287" target="_blank"&gt;OnDemand&lt;/a&gt;

 &lt;a href="http://m.sybase.com/detail?id=1011880" target="_blank"&gt;ODBC Drivers for MobiLink&lt;/a&gt;
&lt;/pre&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;
The asterisks "***" show which items have appeared on the &lt;b&gt;Sybase&lt;/b&gt; website since the &lt;a href="http://sqlanywhere.blogspot.ca/2013/04/latest-sql-anywhere-ebfs-1201-linux.html" target="_blank"&gt;previous version&lt;/a&gt; of &lt;b&gt;this&lt;/b&gt; page. &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Only the latest fully-supported versions of SQL Anywhere (11.0.1, 12.0.1 and &lt;strike&gt;16.0.0&lt;/strike&gt; 16.0) are shown here.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Just because an older version or different platform isn't "fully supported" any more doesn't mean you can't download files (or ask questions, or get help), it just means there won't be any more new &lt;strike&gt;EBFs&lt;/strike&gt; Updates released.&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/6SSChLxKYko" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/6SSChLxKYko/latest-sql-anywhere-updates-first-for.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/latest-sql-anywhere-updates-first-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-5995113481363511808</guid><pubDate>Fri, 17 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-23T12:06:17.850-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">The fRiDaY File</category><category domain="http://www.blogger.com/atom/ns#">HANA</category><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><title>The fRiDaY File - Is it sap or is it ess-a-pee?</title><description>&lt;p&gt;&lt;b&gt;Question:&lt;/b&gt; How do I pronounce "&lt;a href="http://www.sap.com/index.epx" target="_blank"&gt;SAP&lt;/a&gt;"? Is it sap or ess-a-pee?&lt;br /&gt;
&lt;br /&gt;
Before you say "that's a pointless question!" consider &lt;a href="http://scn.sap.com/thread/816649" target="_blank"&gt;this endless thread&lt;/a&gt; on the subject.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;OK, it's still a pointless question&lt;/h3&gt;&lt;br /&gt;
. . . but I'm asking it anyway.&lt;br /&gt;
&lt;br /&gt;
Back on &lt;a href="http://sqlanywhere.blogspot.ca/2013/05/hana-enterprise-cloud.html" target="_blank"&gt;May 10&lt;/a&gt; I thought it was important to say "ess-a-pee" but now I'm not so sure.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Why not?&lt;/h3&gt;&lt;br /&gt;
Because even though the phrase "an SAP" appears 420 times in the 391-page &lt;a href="http://help.sap.com/hana/hana_dev_en.pdf" target="_blank"&gt;SAP HANA Developer Guide&lt;/a&gt;, most (391) of those references appear in the boilerplate phrase "...an SAP affiliate company. All rights reserved...".&lt;br /&gt;
&lt;br /&gt;
In the same document the phrase "a SAP" appears 25 times, as in "a SAP HANA system" and "adding a SAP Variables clause in your select statement".&lt;br /&gt;
&lt;br /&gt;
That's a score of 25 for sap, versus 30 for ess-a-pee if we count the boilerplate as only one occurrence.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Pretty much a tie, doncha think?&lt;/h3&gt;&lt;br /&gt;
So I'm going with this:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Answer:&lt;/b&gt; You pick the pronunciation that sounds right to you, given the context: sometimes sap, sometimes ess-a-pee... or you can use one or the other all the time, your choice.&lt;br /&gt;
&lt;br /&gt;
It's called "English", which in German means "Anarchy".&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/1995-10-11/" title="Dilbert.com 1995-10-11" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/20000/1000/100/21130/21130.strip.gif" border="0" alt="Dilbert.com 1995-10-11" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/t009jArWxuo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/t009jArWxuo/the-friday-file-is-it-sap-or-is-it-ess_17.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/the-friday-file-is-it-sap-or-is-it-ess_17.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-6364686123485139983</guid><pubDate>Wed, 15 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-15T03:01:00.411-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">performance and tuning</category><category domain="http://www.blogger.com/atom/ns#">SQL code</category><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><category domain="http://www.blogger.com/atom/ns#">Foxhound</category><title>D. I. Y. is more F. U. N.</title><description>&lt;p&gt;&lt;b&gt;Question:&lt;/b&gt; How do I list the active sessions and the elapsed times they are running?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Answer:&lt;/b&gt; The &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbreference/connection-property-function.html" target="_blank"&gt;CONNECTION_PROPERTY() function&lt;/a&gt; returns a great deal of information about each connection (session). The LoginTime property can be used to calculate the elapsed time; here's the value for the current connection:&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;SELECT CONNECTION_PROPERTY ( 'LoginTime' );

'2013-05-11 04:49:12.499'
&lt;/pre&gt;&lt;/blockquote&gt;There are &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbadmin/connection-properties.html*d5e41489" target="_blank"&gt;many connection properties&lt;/a&gt;, and there can be many connections, resulting in hundreds, maybe thousands of values. &lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbreference/sa-conn-properties-system-procedure.html*d5e70432" target="_blank"&gt;sa_conn_properties() procedure&lt;/a&gt; makes it easier to process that "great deal of information":&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;SELECT Number                                    AS connection_number,
       CONNECTION_PROPERTY ( 'Name',   Number )  AS connection_name,
       CONNECTION_PROPERTY ( 'UserID', Number )  AS user_name,
       Value                                     AS login_time 
  FROM sa_conn_properties() 
 WHERE PropName = 'LoginTime'
 ORDER BY Number;

connection_number,connection_name,user_name,login_time
14,'adhoc-queries','k.delacruz',2013-05-11 04:49:12.499
15,'RRLoadTest','DBA',2013-05-11 04:54:24.016
16,'app','h.barbosa',2013-05-11 04:54:24.232
17,'app','g.mikhailov',2013-05-11 04:54:24.334
18,'app','u.wouters',2013-05-11 04:54:24.448
19,'app','e.reid',2013-05-11 04:54:24.554
20,'app','y.gustavsson',2013-05-11 04:54:24.663
21,'app','n.simpson',2013-05-11 04:54:24.776
22,'app','f.thomson',2013-05-11 04:54:24.890
23,'app','x.wang',2013-05-11 04:54:25.100
24,'app','i.miller',2013-05-11 04:54:25.218
25,'app','c.ryan',2013-05-11 04:54:25.325
&lt;/pre&gt;&lt;/blockquote&gt;You can continue to Do-It-Yourself in ISQL...&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;call&lt;/b&gt; &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbreference/datediff-function.html" target="_blank"&gt;DATEDIFF()&lt;/a&gt; to turn LoginTime to an elapsed time (milliseconds?) value, &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;study up&lt;/b&gt; on &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbadmin/connection-properties.html*d5e41489" target="_blank"&gt;other CONNECTION_PROPERTY() values&lt;/a&gt;, what they mean, which ones are useful (maybe more useful than LoginTime) and which ones don't work at all, and maybe&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;look at&lt;/b&gt; the &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbreference/db-property-function.html" target="_blank"&gt;DB_PROPERTY()&lt;/a&gt; and server-level &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbreference/property-function.html" target="_blank"&gt;PROPERTY()&lt;/a&gt; functions as well, then &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;figure out&lt;/b&gt; how to gather the values and save them and summarize them and calculate rates and changes and rankings, and finally &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;build up&lt;/b&gt; your query(ies) until you get the information you want.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;In other words, you can build your own database performance monitor.&lt;br /&gt;
&lt;br /&gt;
Or you can just use &lt;a href="http://www.risingroad.com/foxhound/index.html" target="_blank"&gt;Foxhound&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
In Foxhound &lt;a href="http://www.risingroad.com/foxhound-2-0/foxhound2_help/foxhound_history.html#connections" target="_blank"&gt;the "Time Connected" colum&lt;/a&gt; is based on the LoginTime property, and you can click on the column title to sort the long-lasting connections to the top.&lt;br /&gt;
&lt;br /&gt;
In THIS particular screenshot, however, the list of connections has been sorted on "CPU %" to sort the most active sessions to the top:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-TkAXYtNa7Q8/UY4ssB1rGhI/AAAAAAAACMI/rBf1wrwmnho/s1600/Foxhound+can+show+active+sessions+and+elapsed+times.jpg" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-TkAXYtNa7Q8/UY4ssB1rGhI/AAAAAAAACMI/rBf1wrwmnho/s1600/Foxhound+can+show+active+sessions+and+elapsed+times.jpg" width="800" height="319" title="Foxhound can show active sessions and elapsed times"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;DIY "Internal Use Software" is more fun, of course . . .&lt;/h3&gt;... just &lt;a href="http://www.fasab.gov/pdffiles/handbook_sffas_10.pdf" target="_blank"&gt;&lt;b&gt;don't tell Accounting about it&lt;/b&gt;&lt;/a&gt; unless you count your own time as "free" :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/2002-09-27/" title="Dilbert.com 2002-09-27" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/2000/600/2655/2655.strip.gif" border="0" alt="Dilbert.com 2002-09-27" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/-UuaaIG9KI4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/-UuaaIG9KI4/d-i-y-is-more-f-u-n.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-TkAXYtNa7Q8/UY4ssB1rGhI/AAAAAAAACMI/rBf1wrwmnho/s72-c/Foxhound+can+show+active+sessions+and+elapsed+times.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/d-i-y-is-more-f-u-n.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-3556753771502102826</guid><pubDate>Mon, 13 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-13T03:01:00.892-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">xkcd</category><category domain="http://www.blogger.com/atom/ns#">SQL code</category><category domain="http://www.blogger.com/atom/ns#">server setup and admin</category><title>SQL Anywhere Dead Chickens </title><description>&lt;p&gt;In the spirt of the &lt;a href="http://sqlanywhere.blogspot.ca/2011/08/characteristic-errors-revisited.html" target="_blank"&gt;"characteristic errors" listicle&lt;/a&gt; here is a list of "dead chickens" associated with SQL Anywhere.&lt;br /&gt;
&lt;br /&gt;
If you have ANY examples of your own, PLEASE post a comment here or SEND me an email: breck dot carter at gmail dot com&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;To &lt;b&gt;wave a dead chicken&lt;/b&gt; is to "perform a ritual in the direction of crashed software or hardware that one believes to be futile but is nevertheless necessary so that others are satisfied that an appropriate degree of effort has been expended. 'I'll wave a dead chicken over the source code, but I really think we've run into an OS bug.'" - &lt;a href="http://catb.org/jargon/html/W/wave-a-dead-chicken.html" target="_blank"&gt;The Jargon File&lt;/a&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;ol&gt;&lt;li&gt;If your remote data access doesn't work, try fiddling with the declared data types; e.g., from char to varchar, or vice versa.&lt;br /&gt;
&lt;p&gt;Example: &lt;a href="http://sqlanywhere-forum.sybase.com/questions/16584/error-returning-bigint-from-remote-server/16679" target="_blank"&gt;Error returning bigint from remote server&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;If your remote data access with Excel doesn't work, try periods, try the magic dollar sign, try NVARCHAR, try Google!&lt;br /&gt;
&lt;p&gt;Example: &lt;a href="http://sqlanywhere.blogspot.ca/2008/12/select-from-excel-spreadsheets.html" target="_blank"&gt;SELECT FROM Excel Spreadsheets&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;If your query takes too long, try turning off intra-query parallelism: SET TEMPORARY OPTION MAX_QUERY_TASKS = '1';&lt;br /&gt;
&lt;p&gt;Example: &lt;a href="http://sqlanywhere.blogspot.ca/2011/08/new-maxbps768-set-maxquerytasks-1.html" target="_blank"&gt;The New MaxBPs=768: Set MAX_QUERY_TASKS = '1'&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;If your WINDOW query doesn't work try adding RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.&lt;br /&gt;
&lt;p&gt;Example: &lt;a href="http://sqlanywhere.blogspot.ca/2013/03/reporting-and-audit-trail.html" target="_blank"&gt;Reporting and the Audit Trail&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;If something goes wrong after installing, try rebooting.&lt;br /&gt;
&lt;p&gt;Example: &lt;a href="http://sqlanywhere.blogspot.ca/2010/02/try-rebooting.html" target="_blank"&gt;Try rebooting&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;If ISQL READ doesn't work, try specifying the code page: READ ENCODING Cp1252 "C:\data\filename.sql";&lt;br /&gt;
&lt;p&gt;Example: &lt;a href="http://sqlanywhere.blogspot.ca/2012/06/example-output-to-from-vb-part-2.html" target="_blank"&gt;Example: OUTPUT TO From VB, Part 2&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;If you can't connect over TCP/IP, try adding DOBROADCAST=NONE.&lt;br /&gt;
&lt;p&gt;Example: &lt;a href="http://sqlanywhere.blogspot.ca/2009/04/demonstrating-high-availability.html" target="_blank"&gt;Demonstrating High Availability&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;hr&gt;If something is wrong on the internet, fix it!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://xkcd.com/386/" title="xkcd.com 386" target="_blank"&gt;&lt;img src="http://imgs.xkcd.com/comics/duty_calls.png" border="0" alt="xkcd.com 386" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/yYOZ02rjUF4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/yYOZ02rjUF4/sql-anywhere-dead-chickens.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/sql-anywhere-dead-chickens.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-7719374001849498183</guid><pubDate>Fri, 10 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-23T12:07:34.835-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">performance and tuning</category><category domain="http://www.blogger.com/atom/ns#">HANA</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><category domain="http://www.blogger.com/atom/ns#">server setup and admin</category><title>HANA Enterprise Cloud</title><description>&lt;p&gt;Did you know that SAP has &lt;b&gt;another&lt;/b&gt; database product, besides &lt;a href="http://en.wikipedia.org/wiki/SQL_Anywhere" target="_blank"&gt;SQL Anywhere&lt;/a&gt;?&lt;br /&gt;
&lt;br /&gt;
Yeah, you're right,&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;there's &lt;a href="http://en.wikipedia.org/wiki/Sybase_ASE" target="_blank"&gt;ASE&lt;/a&gt;  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and &lt;a href="http://en.wikipedia.org/wiki/Advantage_Database_Server" target="_blank"&gt;Advantage&lt;/a&gt;  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;and something called MyCrap, er &lt;a href="http://en.wikipedia.org/wiki/MaxDB" target="_blank"&gt;MaxDB&lt;/a&gt;, &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;but they don't count because they don't have much of a future.&lt;br /&gt;
&lt;br /&gt;
There's also &lt;a href="http://en.wikipedia.org/wiki/Sybase_IQ" target="_blank"&gt;Sybase IQ&lt;/a&gt; and that &lt;b&gt;does&lt;/b&gt; have a future, but it's not the one I'm thinking of either.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;No, the other SAP database with a future is . . .&lt;/h3&gt;&lt;br /&gt;
... called &lt;a href="http://en.wikipedia.org/wiki/SAP_HANA" target="_blank"&gt;HANA&lt;/a&gt;, brand new, just out.&lt;br /&gt;
&lt;br /&gt;
And &lt;a href="http://scn.sap.com/docs/DOC-31722" target="_blank"&gt;it's available for free, for testing, in the cloud&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;HANA in the Cloud&lt;/h3&gt;&lt;br /&gt;
Back on May 7 SAP held a "press event" in Palo Alto to introduce something called the "SAP HANA® Enterprise Cloud"; you can &lt;a href="http://events.sap.com/sap-hana-global-press-event/en/session/4902" target="_blank"&gt;watch the whole thing here&lt;/a&gt;, all 82 minutes of it:&lt;br /&gt;
&lt;a href="http://events.sap.com/sap-hana-global-press-event/en/session/4902" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://3.bp.blogspot.com/-iQUVkzqChFw/UYvD3hXO65I/AAAAAAAACL0/-F7tl2jjIx4/s1600/SAP+HANA+Enterprise+Cloud+Press+Event.jpg" width="320" height="184" title="SAP HANA Enterprise Cloud Press Event"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Caution:&lt;/b&gt; This video works in IE 10 but apparently not in Chrome 26. There's another browser I used to use, Fire-something-or-other, I forget, dunno if that works.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;But if you'd rather READ than WATCH . . .&lt;/h3&gt;&lt;br /&gt;
... here are my rough notes, with a few comments added:&lt;br /&gt;
&lt;pre&gt;=====
Jonathan Becher
Chief Marketing Officer

10,000 viewers for the initial presentation

HANA is not limited to SAP applications

pronounced "haw-na"
&lt;/pre&gt;&lt;blockquote&gt;...not &lt;i&gt;"hanna"&lt;/i&gt;. HANA is a name, but not a girl's name; HANA doesn't stand for anything. In particular, it does not stand for &lt;i&gt;High Performance ANalytic Appliance&lt;/i&gt;, and it most &lt;b&gt;definitely&lt;/b&gt; does not stand for &lt;i&gt;HAsso's New Architecture&lt;/i&gt;. While we're at it, SAP is pronounced &lt;i&gt;ess-a-pee&lt;/i&gt;, not &lt;i&gt;sap&lt;/i&gt;, and junior SAP employees are &lt;b&gt;not&lt;/b&gt; called &lt;i&gt;saplings&lt;/i&gt;.&lt;br /&gt;
&lt;/blockquote&gt;&lt;pre&gt;=====
Hasso Plattner
SAP Founder and Chairman of the SAP Supervisory Board

old-school paper notes

HANA is the redefinition of enterprise software

will lower TCO dramatically

advantages of cloud

1. elasticity

2. innovation - SAP has renovated, recreated

HANA system has a much smaller data footprint - needs on one fifth of the storage capacity 
through compression

response time goals: 8 seconds, 3 seconds, 1 second

3. people - much less DBA work - no indexes, no materialized aggregates - dynamic aggregation

4. harmonization of hardware and system software - 100% standard hardware

should keep 100% of hot data in memory so performance can be calculated

cold data can certainly be kept on disk

faster releases - utilities run 20 times faster

what can we do with a "HANA-based system in the cloud"

1. regain innovation

better performance leads to innovation

120 msec for worldwide data round-trip - communication

no more "programmer test data" - can use copy of production

standard application interfaces are available for HANA

can make SMP use of a 200 core computer

after 41 years of SAP software, this is the way it should have been

=====
Vishal Sikka 
Member of the Executive Board of SAP AG, Technology &amp; Innovation

we call it the "HANA Enterprise Cloud"

using current generation Intel processors 

300 billion scans per second

without virtualization

=====
Wesley Mukai
Vice President of HANA Cloud Computing

data centers are complicated

SAP Cloud Frame Technology

SAP Cloud Frame Monitor - Management Home - Create New HANA Instance

100s of terabytes on in-memory computing

each frame contains physical servers - no virtualization

servers from multiple vendors

=====
Vishal Sikka 

create a 5 terabyte system in minutes

we have been working on this for quite some time

60 customers, some already live

=====
Don Whittington
Florida Crystals Vice President and CIO

What if SAP ran as fast as Excel?

=====
Vishal Sikka 

multiple hardware platforms

Hasso has always been a champion of speed and performance

=====
Andy Bechtolsheim
Founder and Chairman, Arista Networks

The future of networking...

Accepted wisdom was that enterprise systems will be the last thing that moves to the cloud

low latency and high bandwidth is key for the communication network within a cluster

system management has been integrated into the switch

the cloud needs near-zero-time network configuration, not weeks like in the old days

100 Gbit networking will eventually be available.

=====
Vishal Sikka 

The HANA Enterprise Cloud is here.

There are 50,000 enterprise networks out there.

=====
Jonathan Becher 

Peaked at #3 on twitter.

Questions for Hasso and Vishal...

=====
Hasso Plattner

We must educate people in what parallelism means.

HANA can use massive parallelism for a single query.

The more complex the query the more parallelism can be used.

The larger the data volume the more we can split it up and run it in parallel.

We get the parallelism effect automatically through HANA.

Myth: "If everything runs so fast we don't have to write good SQL any more."

It is just the opposite - we have to think more about good algorithms.

There can be a factor of 10,000 between the performance of good and lousy algorithms.

HANA automatically gives a factor of 2 to three improvement over current databases - to get 
real improvements you have to exploit parallelism.

We have to teach people how to write good SQL and not just simple SQL that works.

While people are doing this, they learn more and more about how things can be done differently.

After 40 years of fighting batch, there is no batch any more.

We wanted to kill batch 40 years ago, and it came back and came back.

Now everything will be transactional.

Everything will be on a human time frame even if it involves billions of records.

What is our biggest innovation in SAP?

We now have the capacity to redo the user interface.

We used to build UIs to cover the functionality and to perform well enough - we were always 
watching performance, most of the programming we did was to achieve performance.'

Now we get great performance, the programs are much smaller - we have more time to concentrate 
on the UI.

=====
Vishal Sikka 

HANA has native integration services.

Pricing: You bring your own HANA license and pay for the cloud services separately
&lt;/pre&gt;&lt;blockquote&gt;It was around this point when the penny finally dropped: they're not just talking about HANA-the-database-product, they're talking about an existing implementation of HANA and all the requisite bits, on existing public cloud services like Amazon, that you can just &lt;b&gt;use&lt;/b&gt;... yeah, I'm kinda slow.&lt;br /&gt;
&lt;/blockquote&gt;&lt;pre&gt;HANA One has been running in the cloud for about 7 months.

Even though HANA makes it possible to eliminate current batch processing, you will always have larger amounts of data coming that require batch processing.

=====
Hasso Plattner

Collaboration between Hadoop and HANA is possible.

=====
Vishal Sikka 

What about private clouds?

First of all - the HANA Enterprise Cloud is for HANA only, other relational database products 
are not welcome.

Having said that - it doesn't matter where the pieces run, and the landscape can be heterogeneous.

HANA cloud frames can, and have been, run on private clouds in customer datacenters - but it's 
not part of today's announcement.

Several dozen big customers will move to the HANA cloud this year.

Early customer feedback has been positive.

=====
Hasso Plattner

This is the next hockey stick.
&lt;/pre&gt;&lt;blockquote&gt;I'm guessing he's talking about the "hockey stick curve"; see point 3 in "&lt;a href="http://www.jleung.com/main/blog-entry/2007/06/04/what-is-a-hockey-stick-curve" target="_blank"&gt;What is a Hockey Stick Curve?&lt;/a&gt;"&lt;br /&gt;
&lt;/blockquote&gt;&lt;pre&gt;Mobile response time must be 3 seconds or faster, and we can do this now.

There are no hassles when growing or shrinking the system, and it will be so much faster.

Hardware provisioning is done already, by SAP.

What is the bottleneck? We honestly don't know.

The private private clouds will come - the ones on client premises.

The elasticity and security problems have been solved.

=====
Vishal Sikka 

We are looking at redesigning the server platform.

=====
Hasso Plattner

The data has to be in memory, that is a prerequisite.

=====
Vishal Sikka 

The underlying infractructure for all SAP applications is moving to the HANA Enterprise Cloud.

=====
Hasso Plattner

Enterprise, mid-size, small companies... it doesn't matter. We allocate a whole client to one 
machine, or half a machine, or a quarter machine.

We don't share anything in data storage between customers.

=====
Vishal Sikka 

If a third-party SAP vendor wanted to use the HANA infracture, would we let them do that? 
Yes, we would absolutely love it. If they compete with us we would love it even more.

We currently have more than 400 startup companies running on HANA. Many of them compete 
with parts of the SAP portfolio.

Companies like salesforce.com would definitely benefit from running on the HANA infrastructure.

Our own CRM system has been running since the middle of March, extraordinarily well. 

We have it running on a 6 terabyte monster system from IBM - we are only using 1.25 terabytes - 

=====
Hasso Plattner

The usage of the system went significantly up - the users are doing more with the system - that 
is a positive sign.

=====
Vishal Sikka 

We have run 100 million SQL queries per hour on our own system.

The communication round-trip between Palo Alto and Beijing or between Palo Alto and Amsterdam 
is around 120 milliseconds today.

That means you still have 880 milliseconds still available to you, for 1 second response time.

=====
Hasso Plattner

With traditional on-premise provisioning, just the hardware acquisition delays every single 
project by eight weeks.

Now we can provision a system within one hour... that's a hockey stick.

=====
Jonathan Becher, Chief Marketing Officer

Today we launched HANA Enterprise Cloud which combines real-time in-memory with the cloud.

No more batch.

[end]
&lt;/pre&gt;&lt;br /&gt;
For the official story see the &lt;a href="http://www.sap.com/campaigns/2013_Hana_Enterprise_Cloud/index.epx" target="_blank"&gt;SAP HANA Enterprise Cloud page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/FmUPECfkKCo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/FmUPECfkKCo/hana-enterprise-cloud.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-iQUVkzqChFw/UYvD3hXO65I/AAAAAAAACL0/-F7tl2jjIx4/s72-c/SAP+HANA+Enterprise+Cloud+Press+Event.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/hana-enterprise-cloud.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-2854502485416496623</guid><pubDate>Wed, 08 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-08T03:01:00.196-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">testimonial</category><title>Save IvanAnywhere!</title><description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/IvanAnywhere" target="_blank"&gt;IvanAnywhere&lt;/a&gt; is in danger of being "challenged and removed" or possibly "merged, redirected or deleted"!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-qvPz5vISVAw/UYjg4D0nySI/AAAAAAAACLg/iCP1TMd9EKM/s1600/Wikipedia+article+on+IvanAnywhere.jpg" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-qvPz5vISVAw/UYjg4D0nySI/AAAAAAAACLg/iCP1TMd9EKM/s320/Wikipedia+article+on+IvanAnywhere.jpg" title="Wikipedia article on IvanAnywhere" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Please, someone with Wikipedia creds, &lt;a href="http://en.wikipedia.org/w/index.php?title=IvanAnywhere&amp;action=edit" target="_blank"&gt;save IvanAnywhere&lt;/a&gt; before it's too late!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/2009-02-22/" title="Dilbert.com 2009-02-22" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/40000/2000/000/42032/42032.strip.sunday.gif" border="0" alt="Dilbert.com 2009-02-22" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/aZBdah-4Le4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/aZBdah-4Le4/save-ivananywhere.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-qvPz5vISVAw/UYjg4D0nySI/AAAAAAAACLg/iCP1TMd9EKM/s72-c/Wikipedia+article+on+IvanAnywhere.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/save-ivananywhere.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-5271444900055093359</guid><pubDate>Mon, 06 May 2013 07:01:00 +0000</pubDate><atom:updated>2013-05-06T03:01:00.227-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><category domain="http://www.blogger.com/atom/ns#">server setup and admin</category><title>Backup is easy, recovery is hard...</title><description>&lt;p&gt;&lt;blockquote&gt;&lt;i&gt;"Backup is easy, recovery is hard... especially for someone who believes that backup is easy." - anon admin&lt;/i&gt;&lt;/blockquote&gt;Even if you recognize that backup is hard (e.g., you're not really doing backup unless you test recovery), recovery is still ... always ... harder ... than you expect.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/2000-08-15/" title="Dilbert.com 2000-08-15" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/6000/800/6844/6844.strip.gif" border="0" alt="Dilbert.com 2000-08-15" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Here's a case in point:&lt;blockquote&gt;&lt;hr&gt;&lt;a href="http://sqlanywhere-forum.sybase.com/questions/16616/failure-to-apply-transaction-log-can-i-force-apply-of-log" target="_blank"&gt;&lt;b&gt;Failure to apply transaction log - can I force apply of log?&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I have a database that had an assertion failed. When I get the last backup and try to apply the LOG file I get a validation error. Come to find out the indexes on 6 tables needed to be rebuilt. The catch 22 is when I fix the indexes and try to apply the LOG, i get the message that the DB is newer and cannot apply log. Is there any way to force apply the LOG?&lt;hr&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;a href="http://sqlanywhere-forum.sybase.com/questions/16616/failure-to-apply-transaction-log-can-i-force-apply-of-log" target="_blank"&gt;That question&lt;/a&gt; raises MORE questions, as &lt;a href="http://sqlanywhere-forum.sybase.com/questions/16616/failure-to-apply-transaction-log-can-i-force-apply-of-log?page=1#16617" target="_blank"&gt;John Smirnios recognizes in his reply&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;I don't think you would get a "validation error" (which I associate with running dbvalid) when applying a log. Exactly what error did you see?&lt;br /&gt;
&lt;br /&gt;
You could try going to an even older backup and applying all logs since that backup.&lt;br /&gt;
&lt;br /&gt;
Also, if you are content with the database with rebuilt indexes, you could translate the log (using dbtran) and apply the SQL against the database using dbisql.&lt;hr&gt;&lt;/blockquote&gt;&lt;br /&gt;
Sometimes, however, it helps to first answer the question that's actually being asked, the one that ends with a question mark: &lt;i&gt;"Is there any way to force apply the LOG?"&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Then, once the good or &lt;a href="http://sqlanywhere-forum.sybase.com/questions/16616/failure-to-apply-transaction-log-can-i-force-apply-of-log?page=1#16619" target="_blank"&gt;bad news has been delivered&lt;/a&gt;, the listener may be more receptive as the discussion wanders further afield:&lt;br /&gt;
&lt;blockquote&gt;&lt;hr&gt;In addition to what John said...&lt;br /&gt;
&lt;br /&gt;
As you know, or have discovered, you can't apply log files out of order in recovery mode, which is what happens when you start a backup database normally and run new transactions (e.g., reorganize indexes), and then try to apply an old log file in recovery mode that has older transactions.&lt;br /&gt;
&lt;br /&gt;
If possible, try starting over... and document EXACTLY what steps you take and EXACTLY what results and/or error messages you get so we can help.&lt;br /&gt;
&lt;br /&gt;
If there are any differences between what you did (or are doing) and the following steps, please describe those differences as well.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Get (copy) the backup xxx.db file and the associated backup xxx.log file. Make copies so you can go back and start over if necessary. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;Apply the copy of the backup xxx.log file in recovery mode to the copy of the backup xxx.db file via dbsrv12.exe xxx.db -a xxx.log&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;Get (copy) the recent xxx.log file that has the transactions up to when the assertion error. This assumes there are no OTHER log files between the one applied in step 2 and this one. &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;Apply the copy of the recent xxx.log file in recovery mode to the xxx.db file via dbsrv12.exe xxx.db -a xxx.log &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;Start the database normally (no -a xxx.log option). &lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;You may find some ideas in the following blog posts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;April 1, 2011 &lt;a href="http://sqlanywhere.blogspot.ca/2011/04/demonstrating-full-and-incremental.html" target="_blank"&gt;Demonstrating Full and Incremental Backups&lt;/a&gt; &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;April 6, 2011 &lt;a href="http://sqlanywhere.blogspot.ca/2011/04/quiz-which-log-backups-are-required-to.html" target="_blank"&gt;Quiz: Which log backups are required to restore a database?&lt;/a&gt; &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;April 8, 2011 &lt;a href="http://sqlanywhere.blogspot.ca/2011/04/recovering-across-multiple-backup.html" target="_blank"&gt;Recovering Across Multiple Backup Generations&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;April 18, 2011 &lt;a href="http://sqlanywhere.blogspot.ca/2011/04/answer-which-log-backups-are-required.html" target="_blank"&gt;Answer: Which log backups are required to restore a database?&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;April 22, 2011 &lt;a href="http://sqlanywhere.blogspot.ca/2011/04/validating-backups.html" target="_blank"&gt;Validating Backups&lt;/a&gt;&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;
&lt;li&gt;April 25, 2011 &lt;a href="http://sqlanywhere.blogspot.ca/2011/04/demonstrating-backup-validation-and.html" target="_blank"&gt;Demonstrating Backup, Validation and Restore&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;br /&gt;
Apparently April is "Backup And Recovery Month" in my world, at least it was back then :)&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/2l4VF2um9GY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/2l4VF2um9GY/backup-is-easy-recovery-is-hard.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/05/backup-is-easy-recovery-is-hard.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-5262534035025124804</guid><pubDate>Mon, 29 Apr 2013 07:01:00 +0000</pubDate><atom:updated>2013-04-29T03:01:02.098-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL code</category><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><category domain="http://www.blogger.com/atom/ns#">server setup and admin</category><title>Impersonation: Feature or Crime?</title><description>&lt;p&gt;SQL Anywhere contains a little-known feature called &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbreference/setuser-statement.html" target="_blank"&gt;SETUSER&lt;/a&gt; which "[a]llows a database administrator to assume the identity of another authorized user on the same connection".&lt;br /&gt;
&lt;br /&gt;
Here's an example... First, the DBA creates an important table containing an inserted_by column for audit trail purposes, plus two other user ids:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;"%SQLANY12%\bin32\dbisql.com"^
  -c "ENG=ddd12;DBN=ddd12;UID=dba;PWD=sql;CON=ddd12-DBA"

CREATE TABLE DBA.important ( 
   pkey         INTEGER          NOT NULL DEFAULT AUTOINCREMENT PRIMARY KEY,
   data         VARCHAR ( 30 )   NOT NULL,
   inserted_by  VARCHAR ( 128 )  NOT NULL DEFAULT CURRENT USER,
   inserted_at  TIMESTAMP        NOT NULL DEFAULT CURRENT TIMESTAMP );

GRANT CONNECT TO EvilDoer IDENTIFIED BY '6kfiwn3gk';
GRANT DBA TO EvilDoer;

GRANT CONNECT TO InnocentVictim IDENTIFIED BY 'nlr9bk6j';
GRANT DELETE, INSERT, SELECT, UPDATE ON DBA.important TO InnocentVictim;
&lt;/pre&gt;&lt;/blockquote&gt;Second, the EvilDoer administrator runs a SETUSER statement to masquerade as InnocentVictim, then inserts a row in the important table:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;"%SQLANY12%\bin32\dbisql.com"^
  -c "ENG=ddd12;DBN=ddd12;UID=EvilDoer;PWD=6kfiwn3gk;CON=ddd12-EvilDoer"

SELECT CURRENT USER AS "Before";

SETUSER InnocentVictim; -- start masquerading

SELECT CURRENT USER AS "During";
INSERT DBA.important ( data ) VALUES ( 'im in ur base killin ur d00dz' );
COMMIT;

SETUSER; -- remove mask

SELECT CURRENT USER AS "After";
SELECT * FROM DBA.important;
&lt;/pre&gt;&lt;/blockquote&gt;The four SELECT statements show how SETUSER changes the effective CURRENT USER value to and from 'InnocentVictim', and how the row in the important table looks like it was inserted by InnocentVictim:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;Before
-------------- 
EvilDoer

During
-------------- 
InnocentVictim

After
-------------- 
EvilDoer

pkey  data                            inserted_by     inserted_at
----  ------------------------------  --------------  -----------------------
1     im in ur base killin ur d00dz   InnocentVictim  2013-04-28 09:21:40.591
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;h3&gt;No bias here! &amp;lt;g&amp;gt;&lt;/h3&gt;The names "EvilDoer" and "InnocentVictim" were chosen to emphasize a security loophole created by SETUSER: the ability of one single user to impersonate another user without knowing that user's password, and without requiring the collusion of anyone else.&lt;br /&gt;
&lt;br /&gt;
Permissions aren't the issue here; both EvilDoer and InnocentVictim can INSERT anything they want in the important table.&lt;br /&gt;
&lt;br /&gt;
The problem is that EvilDoer can insert a row and pretend it was InnocentVictim that did it... the audit trail is now worthless because the CURRENT USER special value is no longer guaranteed to return the current user.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Why does SETUSER exist at all?&lt;/h3&gt;Historically speaking, the &lt;a href="http://dcx.sybase.com/index.html#1201/en/dbreference/setuser-statement.html" target="_blank"&gt;stated purposes for SETUSER&lt;/a&gt; include the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Creating objects&lt;/b&gt; You can use SETUSER to create a database object that is to be owned by another user.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Permissions checking&lt;/b&gt; By acting as another user, with their permissions and group memberships, a database administrator can test the permissions and name resolution of queries, procedures, views, and so on.  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Providing a safer environment for administrators&lt;/b&gt; The database administrator has permission to perform any action in the database. If you want to ensure that you do not accidentally perform an unintended action, you can use SETUSER to switch to a different user ID with fewer permissions.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Those are pretty feeble reasons:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;CREATE TABLE can specify the owner without having to use SETUSER,&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;one person can have multiple user ids with different privileges, without having to impersonate a different person, and &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;the CONNECT USING statement is almost as easy to use as SETUSER when switching to a different user id, and safer too because it requires a password.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;We report, you decide&lt;/h3&gt;In SQL Anywhere Version 12, the Help doesn't promote SETUSER other than providing the basic syntax topic, and it doesn't use the word "impersonation" at all, at least not in the context of SETUSER.&lt;br /&gt;
&lt;br /&gt;
All that has changed in Version 16; "&lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbadmin/rhi1330378611644.html" target="_blank"&gt;Impersonation&lt;/a&gt;" is now a huge topic, with a whole new reason for SETUSER to exist:&lt;blockquote&gt;&lt;i&gt;"Suppose a data entry clerk, JSmithClerk, is having difficulties performing an operation in the database. He is talking with PJonesIT in the IT department, and PJonesIT decides to impersonate JSmithClerk to observe and troubleshoot the problems that JSmithClerk is experiencing. In order for PJonesIT to impersonate JSmithClerk:"&lt;/i&gt; and so on ...&lt;/blockquote&gt;plus &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbadmin/impersonation-at-least-criteria.html" target="_blank"&gt;a whole new set of rules and regulations&lt;/a&gt; governing SETUSER.&lt;br /&gt;
&lt;br /&gt;
In other words, SETUSER has been released from its cage (documentation obscurity in Version 12 and earlier) and its days as a "little-known feature" may be numbered.&lt;br /&gt;
&lt;br /&gt;
One argument in favor of SETUSER goes like this: &lt;i&gt;"DBAs can do anything, even directly UPDATE the inserted_by column, so SETUSER is no big thing."&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
That's true in Version 12 and earlier, SETUSER can only be used by DBAs. In version 16, however, the new &lt;a href="http://dcx.sybase.com/index.html#sa160/en/dbadmin/da-roles-concept.html" target="_blank"&gt;role-based access control (RBAC) security model&lt;/a&gt; separates the SET USER privilege from other administrator privileges. By using the new GRANT SET USER statement, plus a view to limit direct access to the inserted_by column, the EvilDoer no longer has to be a DBA. The following example shows how EvilDoer can be set up as an ordinary user who can &lt;b&gt;still&lt;/b&gt; impersonate another user:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;CREATE VIEW DBA.Vimportant AS
SELECT pkey,
       data
  FROM DBA.important;
 
GRANT CONNECT TO EvilDoer IDENTIFIED BY '6kfiwn3gk';
GRANT SET USER TO EvilDoer;
GRANT DELETE, INSERT, UPDATE ON DBA.Vimportant TO EvilDoer;
GRANT SELECT                 ON DBA.important  TO EvilDoer;

GRANT CONNECT TO InnocentVictim IDENTIFIED BY 'nlr9bk6j';
GRANT DELETE, INSERT, UPDATE ON DBA.Vimportant TO InnocentVictim;
GRANT SELECT                 ON DBA.important  TO InnocentVictim;
&lt;/pre&gt;&lt;/blockquote&gt;Another argument in defence of SETUSER goes like this: &lt;i&gt;"The transaction log shows all the SETUSER statements so EvilDoer can't hide from the authorities."&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
That's true, but it raises the bar (or lowers the bar, if you prefer &lt;a href="http://en.wikipedia.org/wiki/Limbo_(dance)" target="_blank"&gt;limbo dancing&lt;/a&gt; to &lt;a href="http://en.wikipedia.org/wiki/Pole_vault" target="_blank"&gt;pole vaulting&lt;/a&gt;) on preserving evidence... first you have to save all the transaction log files, then you have to guarantee you're not missing any, and then you have to plow through them all. &lt;blockquote&gt;&lt;hr&gt;Here's a little story about searching transaction logs: In 2006 I was engaged as a "&lt;a href="http://www.floridabar.org/DIVCOM/JN/JNJournal01.nsf/8c9f13012b96736985256aa900624829/cfb2e31da09f76058525736300531290?OpenDocument" target="_blank"&gt;Special Master&lt;/a&gt;" by the Southern District Court of Florida, Miami Division, in the copyright infringement suit "&lt;a href="http://www.legalmetric.com/cases/copyright/flsd/flsd_206cv14189.html" target="_blank"&gt;Dunn and Dunn Data Systems v. EncomPos Software LLC&lt;/a&gt;". Part of my job was to answer the questions "what did they do and when did they do it", and that involved searching through endless backup copies of SQL Anywhere transaction logs from multiple databases... let's just say I had to repeatedly remind myself of the Consultant's Golden Rule: &lt;i&gt;If They Want To Pay Me THIS Much Money To Pick Cigarette Butts Out Of The Urinals, I'll Do It With A Smile&lt;/i&gt;. The point is, searching for evidence in transaction logs is a lot harder than querying a application-level audit trail.&lt;hr&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;h3&gt;"How do I get rid of SETUSER?"&lt;/h3&gt;You can't, not in SQL Anywhere Version 12 and earlier. Somebody has to be DBA, and that person can use SETUSER, so that person can impersonate anyone.&lt;br /&gt;
&lt;br /&gt;
In Version 16, however, there might be a way to create a database where even the administrators can't use SETUSER.&lt;br /&gt;
&lt;br /&gt;
Or maybe not... REVOKE SET USER doesn't seem to have any effect after GRANT DBA:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;GRANT CONNECT TO DBA2 IDENTIFIED BY 'h5lfhg86jd';
GRANT DBA TO DBA2;
REVOKE SET USER FROM DBA2;
&lt;/pre&gt;&lt;/blockquote&gt;In other words, DBA2 can still execute SETUSER... so much for brute force. &lt;br /&gt;
&lt;br /&gt;
Three possible explanations come to mind:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;I'm missing something, or&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;GRANT DBA is old-school, and there's something in the miles and miles of new rules and regulations explaining why REVOKE SET USER only works after you have &lt;strike&gt;drunk the Kool-Aid&lt;/strike&gt; fully committed to the new security model, or&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;it's a bug.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;a href="http://dilbert.com/strips/comic/2010-03-14/" title="Dilbert.com 2010-03-14" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/80000/4000/500/84511/84511.strip.sunday.gif" border="0" alt="Dilbert.com 2010-03-14" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/PruMvsVQaHE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/PruMvsVQaHE/impersonation-feature-or-crime.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/04/impersonation-feature-or-crime.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-1069288191995685362</guid><pubDate>Fri, 26 Apr 2013 09:50:00 +0000</pubDate><atom:updated>2013-04-26T05:50:34.074-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">testimonial</category><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><title>Yet Another (sigh) SQL Anywhere Q&amp;A Forum</title><description>&lt;p&gt;Did you know that for a brief period of time, there were not one, not two, but &lt;b&gt;three&lt;/b&gt; official question-and-answer forums devoted exclusively to SQL Anywhere?&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;the &lt;a href="http://sqlanywhere.blogspot.com/2013/04/the-newsgroups-are-gone.html" target="_blank"&gt;now-defunct NNTP newsgroups&lt;/a&gt;, &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;the excellent &lt;a href="http://sqlanywhere-forum.sybase.com/" target="_blank"&gt;SQLAnywhere-Forum.sybase.com&lt;/a&gt; website, and  &lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;the brand-new "&lt;a href="http://scn.sap.com/community/sybase-sql-anywhere/content?filterID=content~objecttype~objecttype[thread]" target="_blank"&gt;SAP Sybase SQL Anywhere Discussions (Forum)&lt;/a&gt;".&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;The good news is, the NNTP newsgroups are finally gone... after several years of inaction by Sybase it took a takeover by SAP to make it happen. &lt;br /&gt;
&lt;br /&gt;
The bad news is, once again there are two different forums to choose from when deciding where to ask a question about SQL Anywhere (2 and 3 above).&lt;br /&gt;
&lt;br /&gt;
The good news is, the new SAP forum appears to be indexed by Google (whew! &lt;a href="http://sqlanywhere.blogspot.com/2013/04/product-suggestion-google-searchable.html" target="_blank"&gt;it didn't have to be the case&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
The bad news is, the whole SAP Community Network website has an awkward, cluttered and confusing design... and in particular the SAP SQL Anywhere forum is clunky and hard to use when compared with SQLAnywhere-Forum.sybase.com.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Enough windmills!&lt;/h3&gt;&lt;br /&gt;
The SAP Community Network website can't help the way it is: it's a all-encompassing corporate creation with no place for best-of-breed solutions like the software running SQLAnywhere-Forum.sybase.com. Sybase almost created one of those (the &lt;a href="http://www.sybase.com/developer" target="_blank"&gt;Sybase Developer Network&lt;/a&gt;) but decided not to &lt;strike&gt;waste&lt;/strike&gt; spend the money.&lt;br /&gt;
&lt;br /&gt;
To put it another way, if SQLAnywhere-Forum.sybase.com is replaced by the SAP forum, it's not the end of the world... having one place to ask questions might be a good thing.&lt;br /&gt;
&lt;br /&gt;
On the other hand, if &lt;b&gt;SQL Anywhere&lt;/b&gt; is put through some kind of committee meat-grinder, &lt;b&gt;THAT'S&lt;/b&gt; the end of the world.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/2009-10-09/" title="Dilbert 2009-10-09" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/60000/9000/900/69995/69995.strip.gif" border="0" alt="Dilbert 2009-10-09" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/iddGjTPFGGI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/iddGjTPFGGI/yet-another-sigh-sql-anywhere-q-forum.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>1</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/04/yet-another-sigh-sql-anywhere-q-forum.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-1216604270018956897</guid><pubDate>Mon, 22 Apr 2013 07:01:00 +0000</pubDate><atom:updated>2013-04-22T03:01:01.679-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">latest EBFs</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>Latest SQL Anywhere EBFs: 12.0.1 Linux Docs, 11.0.1 Windows</title><description>&lt;TABLE STYLE="margin: 0; padding: 0; border-collapse: collapse; " WIDTH="100%"&gt;&lt;TR&gt;&lt;TD STYLE="padding-right: 1em;" VALIGN="TOP"&gt;&lt;h3&gt;Current builds for the active platforms...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt;HP-UX     &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16185" target="_blank"&gt;12.0.1.3798 EBF&lt;/a&gt;                    29 Oct 2012
 Itanium  &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16693" target="_blank"&gt;11.0.1.2958 EBF&lt;/a&gt;                    08 Apr 2013

IBM AIX   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16160" target="_blank"&gt;12.0.1.3798 EBF&lt;/a&gt;                    24 Oct 2012
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16692" target="_blank"&gt;11.0.1.2958 EBF&lt;/a&gt;                    08 Apr 2013

Linux     &lt;a href="http://www.sap.com/campaign/na/usa/CRM-XU13-CST-SQLDEVEDM/index.html" target="_blank"&gt;16.0.0.1324 GA&lt;/a&gt;                     05 Mar 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16690" target="_blank"&gt;12.0.1.3873 EBF&lt;/a&gt;                    05 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16718" target="_blank"&gt;12.0.1 Chinese Docs (Eclipse),&lt;/a&gt; *** 16 Apr 2013 ***
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16717" target="_blank"&gt;Japanese Docs&lt;/a&gt;           *** 16 Apr 2013 ***
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16694" target="_blank"&gt;11.0.1.2958 EBF&lt;/a&gt;                    08 Apr 2013

Mac OS    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16689" target="_blank"&gt;12.0.1.3871 EBF&lt;/a&gt;                    05 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=13869" target="_blank"&gt;11.0.1.2449 EBF&lt;/a&gt;                    29 Jun 2010

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16159" target="_blank"&gt;12.0.1.3798 EBF&lt;/a&gt;                    24 Oct 2012
 SPARC    &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16695" target="_blank"&gt;11.0.1.2958 EBF&lt;/a&gt;                    08 Apr 2013

Solaris   &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16186" target="_blank"&gt;12.0.1.3798 EBF&lt;/a&gt;                    29 Oct 2012
 x64      &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16696" target="_blank"&gt;11.0.1.2958 EBF&lt;/a&gt;                    08 Apr 2013

Windows   &lt;a href="http://www.sap.com/campaign/na/usa/CRM-XU13-CST-SQLDEVEDM/index.html" target="_blank"&gt;16.0.0.1324 GA&lt;/a&gt;                     05 Mar 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16702" target="_blank"&gt;12.0.1.3873 EBF&lt;/a&gt;                    08 Apr 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16111" target="_blank"&gt;12.0.1 French Docs (HTML/PDF),&lt;/a&gt;     25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16110" target="_blank"&gt;English Docs,&lt;/a&gt;               25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16112" target="_blank"&gt;German Docs,&lt;/a&gt;                25 Sep 2012
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16658" target="_blank"&gt;Chinese Docs,&lt;/a&gt;               28 Mar 2013
                 &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16657" target="_blank"&gt;Japanese Docs&lt;/a&gt;               28 Mar 2013
          &lt;a href="http://downloads.sybase.com/swd/detail.do?baseprod=144&amp;client=ianywhere&amp;relid=16716" target="_blank"&gt;11.0.1.2960 EBF&lt;/a&gt;                *** 16 Apr 2013 ***
&lt;/pre&gt;&lt;/TD&gt;&lt;TD STYLE="border-left: 1px solid black;" VALIGN="TOP"&gt; &lt;h3 STYLE="padding-left: 0.3em;"&gt;Other Stuff...&lt;/h3&gt;&lt;pre style="line-height:1.2em"&gt; &lt;a href="http://downloads.sybase.com/swd/base.do?client=support" target="_blank"&gt;Older EBFs&lt;/a&gt;

 Free support! &lt;a href="http://sqlanywhere-forum.sybase.com/" target="_blank"&gt;Q&amp;A forum&lt;/a&gt;
   ...or, &lt;a href="http://www.sybase.com/contactus/support/" target="_blank"&gt;call Tech Support&lt;/a&gt;

 SQL Anywhere...
   ...&lt;a href="http://www.sybase.com/products/databasemanagement/sqlanywhere" target="_blank"&gt;Sybase home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/community/sybase-sql-anywhere" target="_blank"&gt;SAP home page&lt;/a&gt; 
   ...&lt;a href="http://scn.sap.com/docs/DOC-31795" target="_blank"&gt;SAP Developer Center&lt;/a&gt; 

 &lt;a href="http://eshop.sybase.com/eshop/buy?id=19160" target="_blank"&gt;Buy SQL Anywhere&lt;/a&gt; 

 Developer Edition... 
   [&lt;a href="http://www.sap.com/campaign/na/usa/CRM-XU13-CST-SQLDEVEDM/index.html" target="_blank"&gt;16.0&lt;/a&gt;] [&lt;a href="http://www.sybase.com/detail?id=1016644" target="_blank"&gt;12.0.1&lt;/a&gt;] [&lt;a href="http://response.sybase.com/forms/SQLAnywhere1101DeveloperEditionDownloadsybase" target="_blank"&gt;11.0.1&lt;/a&gt;]

 Download the...
   &lt;a href="http://response.sybase.com/forms/SQLAnywhere12EducationalEditionDownload" target="_blank"&gt;Educational Edition&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1057272" target="_blank"&gt;Web Edition&lt;/a&gt; 

 Supported Platforms...
   &lt;a href="http://scn.sap.com/docs/DOC-35654" target="_blank"&gt;SQL Anywhere&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1035824" target="_blank"&gt;Linux&lt;/a&gt; 
   &lt;a href="http://www.sybase.com/detail?id=1097287" target="_blank"&gt;OnDemand&lt;/a&gt;

 &lt;a href="http://m.sybase.com/detail?id=1011880" target="_blank"&gt;ODBC Drivers for MobiLink&lt;/a&gt;
&lt;/pre&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;
The three asterisks "***" show which items have &lt;b&gt;appeared on the website&lt;/b&gt; since the &lt;a href="http://sqlanywhere.blogspot.ca/2013/04/latest-sql-anywhere-ebfs.html" target="_blank"&gt;previous version of &lt;b&gt;this&lt;/b&gt; page&lt;/a&gt;. &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Only the latest fully-supported versions of SQL Anywhere (11.0.1, 12.0.1 and 16.0) are shown here.&lt;br /&gt;
&lt;p style="clear: both;"&gt;&lt;/li&gt;

&lt;li&gt;Just because an older version or different platform isn't "fully supported" any more doesn't mean you can't download files (or ask questions, or get help), it just means there won't be any more new EBFs released.&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/hiP5t9Xs_k4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/hiP5t9Xs_k4/latest-sql-anywhere-ebfs-1201-linux.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>0</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/04/latest-sql-anywhere-ebfs-1201-linux.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-2684756081709888923</guid><pubDate>Fri, 19 Apr 2013 07:01:00 +0000</pubDate><atom:updated>2013-04-26T05:52:44.628-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Dilbert</category><category domain="http://www.blogger.com/atom/ns#">announcement</category><title>It's Official! 16 on 16</title><description>&lt;p&gt;All you folks already using SQL Anywhere 16, you can come out of hiding now: SAP made it &lt;a href="http://www.sap.com/news-reader/index.epx?articleID=20742" target="_blank"&gt;officially available&lt;/a&gt; on April 16.&lt;br /&gt;
&lt;br /&gt;
Here's the word from Walldorf...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;big&gt;&lt;a href="http://www.sap.com/news-reader/index.epx?articleID=20742" target="_blank"&gt;SAP Gives Customers Remote Access to Data-Driven Applications to Extend the Power of Real-Time Data&lt;/a&gt;&lt;/big&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
April 16, 2013 | SAP - Database Technology&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;New Capabilities in SAP® Sybase® SQL Anywhere® 16 Suite Extend SAP HANA® Platform Data to and from Satellite Server and Mobile Environments&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
WALLDORF, Germany - &lt;a href="http://sap.com/" target="_blank"&gt;SAP AG&lt;/a&gt; (NYSE: SAP) today announced the availability of the SAP® Sybase® SQL Anywhere® 16 suite, the latest release of data management and synchronization technology. As a key element of and satellite server within the SAP® Real-Time Data Platform, the suite helps extend business transactions to remote office locations. It enables the rapid development and deployment of database-powered applications in embedded, software-as-a-service (SaaS), remote and mobile environments. Powerful, autonomic data management and data synchronization with enterprise-wide applications allows data collection and aggregation from the "Internet of Things " into the SAP Real-Time Data Platform. &lt;br /&gt;
&lt;br /&gt;
"SAP continues to advance its real-time database capabilities by integrating key Sybase database technologies such as SAP Sybase SQL Anywhere into its comprehensive enterprise information platform," said Carl Olofson, research vice president for application development and deployment, IDC. "The new version of SAP Sybase SQL Anywhere includes key improvements such as expanded query optimization for faster response times, which makes access of enterprise data on a mobile platform more practical, and security enhancements for protection of critical business data, which helps put business managers at ease regarding the distribution of sensitive data to mobile devices. These technologies work in combination with solutions such as SAP HANA decreasing administrative complexity, allowing SAP to enable practical, easy to use enterprise data delivery to users anywhere, any time." &lt;br /&gt;
&lt;br /&gt;
The SAP Sybase SQL Anywhere suite and data management solutions from SAP are built to make server, desktop, embedded and mobile applications as reliable, secure and available as the applications that run the data centers of traditional enterprises. The suite provides organizations with easily available remote access to data-driven applications at the edge of the enterprise and the ability to synchronize changes and updates to maintain consistency with enterprise data. SAP Sybase SQL Anywhere is widely used by solution providers and enterprises as a low-administration, highly reliable embedded database of choice for solutions running in embedded, mobile and satellite environments. Paired with the SAP HANA® platform, SAP Sybase SQL Anywhere now offers application flexibility to the point of communication and richer customer interactions whenever and wherever they need to occur. &lt;br /&gt;
&lt;br /&gt;
CleanPoint has developed an elegant monitoring and control system that enables homeowners to manage their electricity and appliance usage in conjunction with new Smart grid systems. The CleanPoint solution is a user friendly application appliance powered by SQL Anywhere using data collected from the homeowner's own electricity usage. &lt;br /&gt;
&lt;br /&gt;
"In building our solution, CleanPoint realized that that a big data high velocity solution is the only way to analyze and process the staggering amounts of data that the Smart grid produces with speed, security and integrity," said Bruce Johansson, joint managing director, CleanPoint "Our extensive evaluation showed that SAP Sybase SQL Anywhere 16 has an unmatched ability to integrate with what we assessed is the leading "Big Data solution for utilities, SAP HANA to deliver the results our clients require to monitor and adjust their electricity usage in real-time. SAP Sybase SQL Anywhere 16 and SAP HANA handle inevitable network failures with ease. The SAP systems reconnect and synchronize seamlessly, there is no loss of data, integrity is maintained without compromise, improving the efficiency of the power grid - delivering consumers a big win by improving the value of their power bill." &lt;br /&gt;
&lt;br /&gt;
"SAP Sybase SQL Anywhere 16 provides the latest and very critical enterprise distributed database capabilities in delivering on our vision for a comprehensive real-time data platform," said Irfan Khan, chief technology officer and senior vice president, Database &amp; Technology, SAP AG. "Through integration with SAP HANA, SAP Sybase SQL Anywhere 16 allows users and applications in distributed environments to have real-time interactions with virtually any source, and then further explore and analyze that data through SAP HANA. As a result of joint innovation and expertise across our worldwide engineering team, SAP HANA and SAP Sybase SQL Anywhere offer rich applications and consumer interactions from the data center to mobile and satellite server locations." &lt;br /&gt;
&lt;br /&gt;
Innovations and enhancements in SAP Sybase SQL Anywhere 16 include:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;24x7 operations:&lt;/b&gt; Database mirroring robustness and elasticity improvements, on-the-fly server processor allocation and more non-blocking operations to improve concurrent application availability&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Security:&lt;/b&gt; A new role-based security model for enhanced control and granularity of privileged user operations, support for lightweight directory access protocol (LDAP) user authentication and additional features for password change control&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Performance:&lt;/b&gt; Expanded options for query optimization to better exploit multi-CPU servers and intra-query parallelism&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Developer productivity:&lt;/b&gt; Support for open data protocol (OData), enhanced event tracing for production system troubleshooting and expanded SQL language support including ROW and ARRAY data types&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data synchronization:&lt;/b&gt; Support for bi-directional sync of SAP HANA to thousands of mobile users, new synchronization testing tools and intuitive sync setup and deployment wizards&lt;br /&gt;
&lt;br /&gt;
The developer edition of SAP Sybase SQL Anywhere can be downloaded for evaluation &lt;a href="http://scn.sap.com/docs/DOC-31795" target="_blank"&gt;here&lt;/a&gt;. To learn more, visit the &lt;a href="http://scn.sap.com/community/developer-center" target="_blank"&gt;SAP Sybase SQL Anywhere Developer Center on SAP Community Network&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For more information, visit the &lt;a href="http://www.news-sap.com/" target="_blank"&gt;SAP Newsroom&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;About SAP&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As market leader in enterprise application software, SAP helps companies of all sizes and industries run better. From back office to boardroom, warehouse to storefront, desktop to mobile device – SAP empowers people and organizations to work together more efficiently and use business insight more effectively to stay ahead of the competition. SAP applications and services enable more than 197,000 customers (includes customers from the acquisition of SuccessFactors) to operate profitably, adapt continuously, and grow sustainably. For more information, visit www.sap.com. &lt;br /&gt;
&lt;br /&gt;
Any statements contained in this document that are not historical facts are forward-looking statements as defined in the U.S. Private Securities Litigation Reform Act of 1995. Words such as "anticipate," "believe," "estimate," "expect," "forecast," "intend," "may," "plan," "project," "predict," "should" and "will" and similar expressions as they relate to SAP are intended to identify such forward-looking statements. SAP undertakes no obligation to publicly update or revise any forward-looking statements. All forward-looking statements are subject to various risks and uncertainties that could cause actual results to differ materially from expectations. The factors that could affect SAP's future financial results are discussed more fully in SAP's filings with the U.S. Securities and Exchange Commission ("SEC"), including SAP's most recent Annual Report on Form 20-F filed with the SEC. Readers are cautioned not to place undue reliance on these forward-looking statements, which speak only as of their dates. &lt;br /&gt;
&lt;br /&gt;
©2013 SAP AG. All rights reserved.&lt;br /&gt;
SAP and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and other countries. Please see http://www.sap.com/corporate-en/legal/copyright/index.epx#trademark for additional trademark information and notices. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note to Editors:&lt;/b&gt;&lt;br /&gt;
To preview and download broadcast-standard stock footage and press photos digitally, please visit www.sap.com/photos. On this platform, you can find high resolution material for your media channels. To view video stories on diverse topics, visit www.sap-tv.com. From this site, you can embed videos into your own Web pages, share video via email links, and subscribe to RSS feeds from SAP TV. &lt;br /&gt;
&lt;br /&gt;
Follow SAP on Twitter at @sapnews and @sustainableSAP. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;For customers interested in learning more about SAP products:&lt;/b&gt;&lt;br /&gt;
Global Customer Center: +49 180 534-34-24&lt;br /&gt;
United States Only: 1 (800) 872-1SAP (1-800-872-1727) &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;For more information, press only:&lt;/b&gt;&lt;br /&gt;
Jeff Neal, +1 (925) 336-6203, jeff.neal@sap.com, PDT&lt;br /&gt;
SAP Press Office, +49 (6227) 7-46315, CET; +1 (610) 661-3200, EDT; press@sap.com&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dilbert.com/strips/comic/2007-02-22/" title="Dilbert.com" target="_blank"&gt;&lt;img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/1000/500/1514/1514.strip.gif" border="0" alt="Dilbert.com" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/fBiadrENUjo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/fBiadrENUjo/its-official-16-on-16.html</link><author>noreply@blogger.com (Breck Carter)</author><thr:total>1</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/04/its-official-16-on-16.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-497787815177352569.post-4710643822379512150</guid><pubDate>Wed, 17 Apr 2013 07:01:00 +0000</pubDate><atom:updated>2013-04-17T03:01:01.042-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">testimonial</category><title>Product Suggestion: Google-Searchable Docs</title><description>&lt;p&gt;Some SQL Anywhere technical documents posted on the sap.com website aren't showing up in Google searches, and they should.&lt;br /&gt;
&lt;br /&gt;
The likely reason is that these documents are located in separate PDF blobs deep down in sap.com documentation database, so deep the Google indexing process doesn't find them.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Example 1&lt;/h3&gt;&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/80c79a94-1b24-3010-f7a0-f299dc3b47e1?QuickLink=index&amp;overridelayout=true&amp;57844619551223" target="_blank"&gt;Mobilizing an Oracle 11g Database
http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/80c79a94-1b24-3010-f7a0-f299dc3b47e1?QuickLink=index&amp;overridelayout=true&amp;57844619551223&lt;/a&gt;
&lt;/pre&gt;&lt;/blockquote&gt;This document dates back to May 2011, and it originally appeared on sybase.com. When you do the following Google search&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://www.google.com/search?q=%22must have permission for the GV_$TRANSACTION%22" target="_blank"&gt;"must have permission for the GV_$TRANSACTION"&lt;/a&gt;
&lt;/pre&gt;&lt;/blockquote&gt;the original sybase.com copy shows up &lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://www.sybase.com/files/Technical_Documents/ias_wp_MobilizeOracle11g.pdf" target="_blank"&gt;Mobilizing an Oracle 11g Database
http://www.sybase.com/files/Technical_Documents/ias_wp_MobilizeOracle11g.pdf&lt;/a&gt;
&lt;/pre&gt;&lt;/blockquote&gt;but not the one on sap.com.&lt;br /&gt;
&lt;br /&gt;
As time goes on, it is very likely that all technical documentation on sybase.com will be copied to sap.com and deleted from sybase.com... but for now, Google can still find this one.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Example 2&lt;/h3&gt;&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/90b97407-9281-3010-92bf-edb97ae0bb72?QuickLink=index&amp;overridelayout=true&amp;58321360934470" target="_blank"&gt;Top 10 Cool New Features In SAP Sybase SQL Anywhere 16
http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/90b97407-9281-3010-92bf-edb97ae0bb72?QuickLink=index&amp;overridelayout=true&amp;58321360934470&lt;/a&gt;
&lt;/pre&gt;&lt;/blockquote&gt;This exists only on sap.com, and as such it is invisible to a Google search like this:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://www.google.com/search?q=%22skipping over one version number per year for three years%22" target="_blank"&gt;"skipping over one version number per year for three years"&lt;/a&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;h3&gt;Suggestion&lt;/h3&gt;Instead of burying these documents down inside a documentation database that is inaccessible to Google search, they should be stored in a location Google can find... either a simple web page, or a database that Google can index.&lt;br /&gt;
&lt;br /&gt;
For example, the following document is stored as an ordinary "DOC-xxxxx" web page that Google can find:&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://scn.sap.com/docs/DOC-35654" target="_blank"&gt;SAP Sybase SQL Anywhere Supported Platforms and Engineering Support Status
http://scn.sap.com/docs/DOC-35654&lt;/a&gt;
&lt;/pre&gt;&lt;/blockquote&gt;In this case, a Google search works just fine:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://www.google.com/search?q=%22The tables below summarize the platforms supported by SAP Sybase SQL Anywhere%22" target="_blank"&gt;"The tables below summarize the platforms supported by SAP Sybase SQL Anywhere"&lt;/a&gt;
&lt;/pre&gt;&lt;/blockquote&gt;In fact, the hidden documents ARE represented as simple "DOC-xxxxx" web pages but those pages are stubs; the actual content is buried one level further down (or eight levels further down if you count all the "/" slashes in the urls). &lt;br /&gt;
&lt;br /&gt;
For example, here's the DOC-xxxxx page for the Top 10 article:&lt;blockquote&gt;&lt;pre style="line-height:1.2em"&gt;&lt;a href="http://scn.sap.com/docs/DOC-40056" target="_blank"&gt;Top 10 Cool New Features in SAP Sybase SQL Anywhere 16
http://scn.sap.com/docs/DOC-40056&lt;/a&gt;
&lt;/pre&gt;&lt;a href="http://scn.sap.com/docs/DOC-40056" target="_blank"&gt;&lt;img src="http://2.bp.blogspot.com/-VwNtxb-jvQ0/UW1ii0BR24I/AAAAAAAACKM/pkbMuE4IEAQ/s1600/Top+10+DOC+page.jpg" width="500" height="204" title="Top 10 DOC page"&gt;&lt;/a&gt;&lt;/blockquote&gt;As you can see, the DOC-xxxxx page is just a stub, and the actual content is &lt;a href="http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/90b97407-9281-3010-92bf-edb97ae0bb72?QuickLink=index&amp;overridelayout=true&amp;58321360934470" target="_blank"&gt;down inside the hidden page&lt;/a&gt;:&lt;blockquote&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/90b97407-9281-3010-92bf-edb97ae0bb72?QuickLink=index&amp;overridelayout=true&amp;58321360934470" target="_blank"&gt;&lt;img src="http://1.bp.blogspot.com/-jw9pw-myFB0/UW1ivJS0PSI/AAAAAAAACKU/oRsKpbeATIU/s1600/Top+10+portal+page.jpg" width="400" height="425" title="Top 10 portal page"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;h3&gt;What's the point?&lt;/h3&gt;It may not be important to have this particular page searchable by Google, but that's not the point.&lt;br /&gt;
&lt;br /&gt;
The point is, it &lt;b&gt;IS&lt;/b&gt; important for &lt;b&gt;MOST&lt;/b&gt; SQL Anywhere technical documents to be Google-searchable, and the trend favoring stealth over visibility should be reversed.&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlAnywhere/~4/96bbzlcr4i8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/SqlAnywhere/~3/96bbzlcr4i8/product-suggestion-google-searchable.html</link><author>noreply@blogger.com (Breck Carter)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-VwNtxb-jvQ0/UW1ii0BR24I/AAAAAAAACKM/pkbMuE4IEAQ/s72-c/Top+10+DOC+page.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://sqlanywhere.blogspot.com/2013/04/product-suggestion-google-searchable.html</feedburner:origLink></item></channel></rss>
