You've left out some info (OS, OS version, firewalls, where you are running CTTerm, data path, etc) are some suggestions:

Does putting in wrong account/password yield same symptom?

1) If you are running CTTerm on the same box check to see if Cache Telnet server enabled, permissions good, local box firewall not interfering, Cache license appropriate/applied, etc.

2) If running CTTerm from network check above plus all applicable firewalls or network protections. Some networks may prevent old Telnet running across specific paths without opening up a hole.

3) If you are using terminal servers to old serial terminals or PCs check the terminal servers.

Tom Fitzgibbon | 3474648531 | gototomAtG...l

SMTP servers can have different requirements (port, SSL level, etc). You have read AOL SMTP requirements? Sometimes it requires some fiddling.

From Lifewire: Enter these SMTP settings to send outgoing email through to your AOL Mail account from any email program.

  • Incoming Mail Server:
  • SMTP Outgoing Server Address: Set the port to 587
  • SMTP Username: "" (or, or
  • SMTP password. The password you use to log in to AOL Mail

Some ISPs block port 25, see the SMTP server specs for other ports you can use (465, 587, etc).

Code below has worked for me in the past.

Tom Fitzgibbon |


SendMail(Message,SendTo,Subject) ;send mail

s s=##class(%Net.SMTP).%New()

s auth=##class(%Net.Authenticator).%New() ; use default auth

s auth.UserName=""

s auth.Password="xxxxxxxx"

s s.authenticator=auth

s s.smtpserver=""

s s.timezone="Local"

s s.port="80" ;for secureserver

s m=##class(%Net.MailMessage).%New()

s m.Charset="iso-8859-1"

s m.From=""

Send ;where to?

d m.To.Insert(SendTo)


s m.Subject = Subject

d m.TextData.Write(Message)

s status=s.Send(m)

d m.%Close()

d auth.%Close()

q status

If you've had any experience with packet monitors you probably should try Wireshark since it's the most widely used. Various plugins, addons are available. I've used to monitor CSP, SOAP, JSON, Ensemble and other transactional comm.

Fiddler is a bit more user friendly but once you're in the packet details you have to spend time deciphering no matter what monitor.

Tom Fitzgibbon | gototomATG...l | 3474648531

As Robert indicates Shadowing and Mirroring on the Cache level are the ways to go.

Shadowing creates a copy of the master via journal Sets, Kills and $Bit. It's slower to sync and, I think, more prone to desync issues.

Mirroring is fairly immediate sync, offers more flexibility and features, like automatic failover. It's pretty awesome.

Tom Fitzgibbon | gototomAtG...l | 3474648531

One thing to check is to make sure your users are not starting up multiple CSP sessions from the same or different browsers on the same device.

Some of our users learned that there was no limit, before we changed our software, to the number of simultaneous CSP application windows they could open.

Six months after we rolled out the application suddenly the entire user population started opening multiple windows and we ran out of license slots.

Bonne chance,

Tom Fitzgibbon | gototomAtG...l | 3474648531

I don't recall any default system recording of routine use, which means no audit of routine execution in previous years.

There is an audit of last routine save/compile in the ^ROUTINE(NameOfRoutine) global.

We manually added a routine use audit log through our user menu page. Obviously, this only captured usage from that point forward. You can also add a Cache Audit user event in your menu page to record info in the Cache Audit log.

I don't think there is a Cache Audit event for routine use logging but perhaps someone at InterSystems has added or has a workaround. See

Tom Fitzgibbon | gototomAtG...l | 9179331226 |

Evgeny -

Cache.dat file backup while Cache is down is fast and dependable for a 100MB DB. Or backup the entire AWS directory space if you have additional files (csp files, JS, etc.) and you can restore.

Cache backup is slower and only backs up Cache resources but has the great advantage of running while Cache is up.

Third party backup software can do a pretty good backup but it's still dirty and may have corruption.

An AWS snapshot should work, I've never tested extensively.

Tom Fitzgibbon | 917-933-1226 | gototomAtG...l

Where is the SQL residing and how do want to trigger it?

If it's sitting on a local Cache server you can start it any number of ways: web page, Cache routine menu, text/email a listener routine, hit a JSON service, "Alexa, start my SQL query", push a big red button, etc.

If on the cloud somewhere or on someone else's server behind a firewall you have to get past authentication/firewall to start the query.

- Tom Fitzgibbon | 9179331226 | gototomAtG...l

Need more information (with examples) on what you're trying to do.

If you're talking about:

1) a user login on Cache, you can start a routine/method on login for a terminal type service.

2) Cache startup and other events you can run routine/method.

3) many other variations

Tom Fitzgibbon | 9179331226 | gototomAtG...l

Without more info on writing/reading patterns the answer can't be knowable. For example, your application may have thousands of random write/reads looking for small amounts of vals OR fairly uniform write/reads looking for complete chunks of vals.

Best thing for you to do is to simulate your data usage on your target platform and do the timings yourself. Testing is fairly easy.

That being said the second method may be more efficient because you can write/read larger chunks of persistent data.

But it all comes down to your specific use case.

Tom Fitzgibbon | 9179331226 |

Windows Cache or Linux Cache Mirroring and Clustering are available for mission critical systems.  Cache is one of most stable DBs around without any extra steps but you probably want to go further for critical production servers.

I ran mirrored Windows servers without data loss. Fairly easy to set up and maintain. Clusters a bit more complicated but may fit with your production model.

See and

Tom Fitzgibbon | | 917-933-1226