You can use 'client->name as clientname' and .%Get("clientname") or use .%GetData(columnnumber)

Hi Larry,
Can yo start from the command prompt without emergency mode (ccontrol start trycache) ?
If yes, the help mentions that emergency mode is not using the control service, did your control service have specific rights ?

Btw, did you try the default password for SuperUser or Admin. (

ccontrol start <instance name> [<full path and file name of .cpf file>]

                        Starts Caché instance <instance name>, optionally using the specified .cpf file.

                        If a new .cpf file is specified, it becomes the default startup .cpf file.     


            Note:   An optional /EmergencyId=Username,Password can be used

                        to start Caché in emergency mode.  When the EmergencyUserId

argument is supplied, the system starts up in emergency mode in which

only the baseline databases are mounted and access to Caché is governed

by Caché login using that username and password.  Emergency mode is supplied

to give access in the event that privileged users are not available or their password

is forgotten.  Emergency startup is only available from an administrator account.

When Caché is started in emergency mode, the Caché control service is not used.  

This means that if you log out of Windows, all the Caché processes will immediately exit.

If on Windows :

Start Windows Powershell (Admin)

C:\ cd /intersystems\cache\bin (the directory where you installed caché)
C:\Intersystems\cache\bin> ./ccontrol all  (this should open a text file with the instances you have, note the name of your instance, it is 'cache' in my example)

    Instance          Version ID        Port   Directory
    -------------     ----------        ----   ---------                   
up  cache             2018.1.2.309.0    1972   c:\intersystems\cache

If Caché is not down :
C:\Intersystems\cache\bin> ./ccontrol stop cache

To start Caché in emergency mode :
C:\Intersystems\cache\bin> ./ccontrol start cache /EmergencyId=tempuser,temppw (in my case, i got Win Defender warnings, accepted access)

Verify Caché is running :
C:\Intersystems\cache\bin> ./ccontrol all

Launch Caché management portal, login with tempuser and temppw, go to System Admin -> Users (might have to login again with temp credentials)
Change pw for your user(s).

Restart Caché

To check if a database is corrupt : Do ^INTEGRIT

To repair a database : Do ^REPAIR (But if you don't know this utility or the internals of database blocks and pointers : don't use it !!!)

Hi Michel,
Good subject, i like to question the things we are used to, but look strange to the outside world.
I would welcome the possibility to change the precedence to something more 'standard'. When i taught Object Script courses, the left-to-right precedence was always the first thing i mentioned, and it always blew the heads of my students.
Unfortunately, the option is not present, and even if there could be ways to implement such an option by InterSystems (e.g. as a method keyword to alter the precedence), the general behaviour will have to default to the current precedence to not break existing code.
Maybe editors like vs-code can issue warnings when operators are used without brackets in Object Script.

Hi Tiago,

There is always a risk of getting errors after an upgrade, depending how your application uses Caché.
For example : your application could use custom data/code that is stored in the manager's database, and that database will be overwritten in the upgrade, so you will risk loosing data/code. (It is bad practice to store info there, but it is possible) 

Best is to contact the vendor/developers, and test the upgrade by copying the server to a test server and do the upgrade there.

I added the way to find out which global name is used in my first reply  : try

write ##class(%Dictionary.CompiledStorage).%OpenId("MyPackage.MyClass||Default").DataLocation

When doing a create table, it is indeed a hashed global name, but when defining a new class in Studio, it is still clasname_"D" (unless the global name becomes too long).

The parameter USEEXTENTSET=1 will alter this behaviour (in class definition or CREATE table statement) :
Global Naming Strategy: you can use the USEEXTENTSET parameter to specify shorter and more efficient hashed global names for data and index lookup operations.

You can use %Library.CompiledStorage to find out what the global name is for a class :

Hi Robert,
yes, i never use indirection unless it cannot be done in another way,

(or to show-off what cache object script can do)