Intro

Just a blog listing some weird issues and their solutions with regards to the Oracle Hyperion applications I manage.
Hopefully it will help someone else resolving these -often cryptic- incidents.

Applications involved are:

Hyperion Financial Planning
Hyperion Business Rules
Hyperion Calculation Manager
Hyperion Financial Management
Hyperion Analytic Services (Essbase)
Hyperion Reporting and Analysis
Hyperion Financial Data Quality Management (FDM)
Hyperion Workspace

All running version 11.1.2.1.0

Monday, November 18, 2013

Script to distribute files

EPM is often installed on several servers: web-, application- or database servers. and when a full DTAP cycle is used, the number of servers increases even more. To automate the distribution of files to multiple servers, I wrote the following script.

It has to run on the command line and will accept two parameters:

Path\Filename of file to copy
Path\Filename of file containing servernames to copy the file to


:: Name     : Distribute.cmd
:: Purpose  : Distributes files to other servers
:: Parameter: File to distribute
::              File with list of servernames to distribute to
:: Author   : P. da Graça
:: Remark   : Edited with Notepad++, layout maybe off in other editors
::              Run as (domain) user with sufficient access to the servers.
::
:: When            Who            What
:: 18-05-2011    PdaGraça    First Setup
:: 19-05-2011    PdaGraça    Skip copying to localhost
:: 23-05-2011    PdaGraça    If 'file to distribute' begins with @, the filenames in that file are copied
:: 24-05-2011    PdaGraça    If @distribute.txt is specified, all scriptfiles are copied to all servers
::

@Echo off

Setlocal

:: Set dynamic variables
For /f %%H in ('hostname') Do Set Hostname=%%H
For /f %%H in ('cd') Do Set ScrDir=%%H

:: Set general variables
Set Success=0
Set Error=0
Set ExitCode=0
Set Script=%~0
Set DistributionFile=Distribution.txt
Set AllServerFile=%ScrDir%\Servers-All.txt
Set ServerFile=%ScrDir%\Servers-DEV.txt

:: Main Routine
:: If no parameter specified, abort
If "%1" EQU "" Goto NoPar
:: If parameter starts with @, open the file and process its contents. Each line should list a filename to copy
:: Otherwise, copy the file itself. The ForPar variable is used to process the contents.
Set File=%1
If "%File:~0,1%" NEQ "@" Goto Verder
Set ForPar=/F
Set File=%File:~1,99%
:Verder
:: Check if file to copy exists
If Not Exist %File% Goto NoFile
:: Check if file with servernames has been specified, otherwise the default filename is used (see above).
If "%2" NEQ "" Set Serverfile=%~f2
:: If one specific @filename is given, use a specific corresponding file with the names of all servers as well. The @filename should
:: contain the names of this script and all supportfiles. This is used to distribute this tool across all servers.
If /I "%File%" EQU "%DistributionFile%" Set Serverfile=%AllServersFile%
:: Check if file with servernames exists
If Not Exist %ServerFile% Goto NoServerFile
:: Process the file itself, or the lines it contains.
For %ForPar% %%X In (%File%) Do Call :DoFile %%X

Set /A Total=%Success%+%Error%
Echo.
Echo Total filecopies    : %Total%
Echo Succeeded filecopies: %Success%
Echo Failed filecopies   : %Error%
:End
Goto :Eof
:: End of main routine

:DoFile
:: Add full drive and path to filename to copy
Set DoFile=%~f1
If Not Exist %DoFile% Goto NoFile
:: Process the file with servernames
For /f %%Y In (%ServerFile%) Do Call :CopyFile %%Y
Goto :Eof

:CopyFile
:: Check if the servername in the file is that of the current server. Skip the copy if it is.
for /f "tokens=1 delims=." %%I in ("%1") do Set ServerName=%%I
If "%ServerName%" EQU "%HostName%" Goto :Eof
:: The target filename is the source filename where Drive: is replaced by Drive$
Set ToFile=%DoFile::=$%
For /f %%I in ("%DoFile%") Do Set DoDir=%~dpI%
:: Check if target directory exists
For /f %%I in ("%ToFile%") Do Set ToDir=%~dpI%
:: Create target directory if it doesn't
If Not Exist %ToDir%\ Md %ToDir%
:: If target file exists, check if it's readonly
If Not Exist \\%1\\%ToFile% Goto Verder
Attrib \\%1\\%ToFile% | find " R " > Nul
If %Errorlevel% EQU 0 Set RO=ReadOnly
:Verder
:: Actual copying and errorhandling
If "%RO%" EQU "ReadOnly" Attrib -r \\%1\\%ToFile%
Copy %DoFile% \\%1\%ToFile% /V /Y >NUL 2>&1
Set El=%Errorlevel%
If %El% EQU 0 (Set ExitCode=0) & (Echo %DoFile% ^=^> \\%1\%ToFile% %RO%) & (Set /A Success=%Success%+1)
If %El% NEQ 0 (Set ExitCode=1) & (Echo %DoFile% ^!^> \\%1\%ToFile% %RO%) & (Set /A Error=%Error%+1)
If "%RO%" EQU "ReadOnly" Attrib +r \\%1\\%ToFile%
Set ReadOnly=
Goto :Eof

:NoPar
Echo.
Echo No file specified!
Call :Syntax
Set ExitCode=1
Goto End

:NoFile
Echo.
Echo File %File% does not exist!
Call :Syntax
Set ExitCode=1
Goto End

:NoDoFile
Echo.
Echo File %DoFile% does not exist!
Call :Syntax
Set ExitCode=1
Goto End

:NoServerFile
Echo.
Echo No serverfile specified!
Call :Syntax
Set ExitCode=1
Goto End

:Syntax
Echo.
Echo Syntax: %Script% filename(s) file_with_servernames
Echo or
Echo Syntax: %Script% @file_with_filenames file_with_servernames
Echo.
Echo Default file_with_servernames is %ServerFile%
Goto :Eof

Script to toggle read-only attribute

Over time, scripts, tools and other relevant files for application management accumulate on the servers. To prevent accidental removal of such files, I'd normally make these files read-only. Not foolproof ofcourse but enough to prevent most accidents.
To simplify editing scripts I've written a script that will toggle the read-only attribute of any file(s) that is/are dropped on it. The script is Windows only ofcourse.
:: Name : Switch_ReadOnly.cmd
:: Purpose: Switches readonly attibute on or off for file(s)
:: Author : P. da Graça
:: Usage : Drop file(s) on this script, it will switch the readonly
:: attribute. Run the script from the commandline to switch all files
:: in the current directory.
::
:: When Who What
:: 08-10-2013 PdaGraca First setup
::
@Echo off

Setlocal

Set File=%*
If Not Defined File Set File=*.*

For %%I IN (%File%) Do Call :ProcessFile %%I

:: Set script itself always to read-only, because you can't drop the script onto itself!
Attrib %0 | find " R " > Nul
If %Errorlevel% NEQ 0 Attrib +r %0
Goto :Eof

:ProcessFile
:: Skip directories
If exist %1\ Goto :Eof
:: Determine if file has readonly attribute
Attrib %1 | find " R " > Nul
Set El=%errorlevel%
If %El% EQU 0 Attrib -r %1
If %El% NEQ 0 Attrib +r %1
Goto :Eof

Thursday, November 14, 2013

Error(1051293)

Error(1051293)


Consultant reported an errormessage while accessing an Essbase database via Smartview: Error(1051293) Login fails due to invalid login credentials



His native user account was sufficiently provisioned for the Essbase application and its databases, but still got no access via Smartview.

The solution was to login to the Essbase admin console (EAS) and navigate to this particular database.



Set the user name and password to the native useraccount that was also used in the datasource of the Planning application:





Enter credentials, use Test to verify and Set to save this setting. I've done this for all databases of this application and everything was peachy again.



Workspace icons greyed out

End user reported greyed out icons in Calculation Manager, but only in one particular environment (development). Clearing the browser cached fixed the issue momentarily but after the next logon it re-appeared.
Also, different icons became greyed out when other applications were started, so it appeared to be Workspace related.





Searching the Oracle support site, I found document 1437036.1 and it appeared someone (probably the enduser himself) switched on Screen Reader support in the workspace settings:



Disabling this setting resolved the issue