Creating PDFs using Microsoft Word

August 13, 2017

Hi guys

Many great websites like “oracle base” let you copy the content from their site, so that you can make documents for offline references. Obviously, you need to copy, paste make sometimes format a bit here and there so that the document finally becomes worth keeping.

One of the major issues with most of the free PDF printers is the lack of ability to include the embedded urls. Once you find an interesting article and use a free PDF printer like “PDF Creator”, you will realize that whole the book marked urls are lost other than the links starting with http:// or www

With the recent versions of Microsoft Word software (Office 2010 & later) , Microsoft lets the users to save a word document as PDF, in addition to printing the documents as PDFs. So what are the main difference between printing and saving as a word document?

While printing, the engine discards all the embedded URLs and the end user gets a plain PDF file, and when saved as (From file Save as context) PDF, all underlying URLs are preserved as bookmarks and clickable links are created automatically.

Does it sounds interesting? Give it a try and let us know!




Oracle Backup to Google Drive?

June 6, 2017

Hi guys

This is a follow up post to my previous post about using a simple batch script for creating a dump export file on regular basis for Oracle database.

Backup. The most essential, however many times highly ignored element of the digital world even today as many small scale industries find the investments made to this particular mechanism hardly comes in effect, unless a disaster arises. My personal experiences with convincing the management to go for sophisticated backup solutions were always the toughest, until we had a HUGE disaster.

As a thumb rule, the first thing I always did for an Oracle database was to setup a dump export every night (if the database is truly small in size), after the normal working hours, in addition to RMAN backups. These export files are kept in a different partition & regularly monitored and purged by the beginning of a new month, keeping the last day backup for the previous month, which is deleted by the beginning of a new year.

Keeping the backup in the same hardware could prove fatal when the hardware fails, and almost all the servers are configured to use RAID, using different levels. In such scenarios even if the drives are intact, retrieving the data from raided volumes will be a professional job, costing investment and time.

For small databases, like the one I have mentioned with my previous post we can design multiple options like mapping a network folder & copying the files automatically once after a new dump file is created as the part of a backup script.

I have devised two methods for my party, and they were

  1. FTP the compressed latest dump file to another machine hosting FTP server
  2. Using google drive (Free 15GB), upload the latest compressed dump file

The first method was already explained here so I will go to 2nd method in which Google drive sync is used to insure that the party has a valid backup stored somewhere in the cloud

  • Database dump export size: 300MB approximately
  • Zipped dump file size: 50MB approximately

Install google drive on your Windows 2008 x, Windows 2012 server machine. You may need to install corresponding Visual C++ Redistributable packages in order to come across python related errors. Please read more here for solutions.

Once the google drive starts working fine, you can use the following script, which will create a dump file first, then create a zip file against the latest dump file created and then copy the zip file to google drive for cloud synching.

Please note, I have moved the google drive folder from the default location to somewhere else, like E:\Google_Drive to make sure that my batch file has shortest path entry for the copying. If you plan the same, you can change the default location for google drive by exiting the application first, then pointing google drive to your folder of choice when google drive complains about missing default location

Windows batch file for Creating, zipping & copying the files to Google Drive

@echo off
FOR /F "tokens=2-4 delims=/ " %%a IN ('date/t') DO exp system/password@connectionstring full = y file=d:\Orabackup\exp_%%b%%a%%c.dmp 

::Get the latest dump file name, generated using exp command
::Switch to the folder where the dump (.dmp) files are stored
CD D:\Orabackup\
:: D:\Orabackup is the folder where everyday dump files are stored.
for /f "tokens=*" %%a in ('dir *.dmp /o:-d /b') do set NEWEST=%%a&& goto :next
REM echo The most recently created file is %NEWEST%
FOR %%i IN ("%NEWEST%") DO (
REM ECHO filedrive=%%~di
REM ECHO filepath=%%~pi
REM ECHO fileextension=%%~xi

::You can use built-in zip or 7-Zip to create archives
::E:\Google_Drive is the folder used by the google drive in my setup
COPY %ZIPNAME% E:\Google_Drive



While this method looks pretty awesome for small size databases, please be noted that, may not be at all feasible for larger ones. I will OPT this method for a backup dump file that could be compressed to a size of 400-500MB maximum, including the possibilities of corrupt compressed files.

Whatever, as far the party has a reliable internet connection with decent bandwidth, based on the size of compressed file, will always have access to a recent backup dump file, stored free in the cloud!

Does it look decent? ;)

Tip: Running Google drive sync as Windows Service



Windows | ORA-12560: TNS:protocol adapter error

February 25, 2017

Hi guys

Not many DBAs prefer Windows for their Oracle databases. Linux is most preferred by most of them & most of the DBAs I know setup the bash profile under Oracle user to setup the environment during each logon to the server.

Our legacy business application database runs on Windows 2003 & trust me, we never had a single database crash (Other than the physical hardware failure that forced us to recover the database once). Depending upon how huge the database and application, the choices for hosting the Oracle database differ from one business to other.

We decided to upgrade our Oracle 10g 10.1.x.x 32Bit database to 11g R2 & as usual I have replicated the environment using my home semi-server class desktop, before the Production environment at work.

Installed 10g 32Bit, created the database using dump export file (The total size of the database is less than 7GB, hence I avoided the hectic RMAN backup and restore part)

  1. Configured RMAN against the new database & made full backup for archive logs and database.
  2. Installed 11g 64Bit database (Software Only installation)
  3. Created a new Windows Service using oradim
  4. Restored the database from RMAN backups & upgraded the database to 11g

So far so good. I had to restart the computer & after rechecking the database was up and running, tried to access the instance using sqlplus & was presented with

ORA-12560: TNS:protocol adapter error


I setup ORACLE_SID=SID at the CMD window & sqlplus was happy after that.

Usually, Windows doesn’t need environment variables set exclusively for the database as Windows registry takes care of it. This is very efficient when the box has only one database running. If you have more than one database or multiple Oracle homes, the scenario changes.

In addition to, Oracle always looks for the executable based on the PATH information it reads. For example my box has 10g,11g,12c database software installed without any databases created during the installation time.

Let us consider the scenario like I didn’t re-order the PATH entries after the latest installation of 12c & try to open SQL or RMAN. The call will find the executable from 12c path entry BIN as default, and a beginner could have enough confusions due to it.

In my case, I needed my 10g instance first, hence I moved the 10g folder as the 1st entry for Oracle products, and once I finished with 10g moved 11g home folder to the 1st position.


Anyway, after confirming the path settings, my immediate attention was towards registry, as Oracle services completely depend upon the registry values for each service registered.

To my utter surprise, found the 11g Service entry didn’t have ORACLE_SID string created during the instance creation using ORADIM.exe


Oracle 11g has a huge bug list and interim patches those should be applied before moving to Production instance. I really don’t know whether the missing ORACLE_SID string entry was due to one of such bugs.

So I stopped the Oracle service, added ORACLE_SID string entry with the value for my database


Restarted the service & sqlplus connected to the instance happily without setting up the environment variable like set ORACLE_SID=SIDNAME


While the easiest solution is to setup both ORACLE_HOME, ORACLE_SID when someone wants to use the sqlplus or RMAN exclusively as a part of the database access, the above method is a definite way to deal with “ORA-12560: TNS:protocol adapter error”



ORA-12546: TNS: permission denied

February 13, 2017

Update: 16th Feb 2017

Sorry folks, I’ve given upon & moved to patch upgrade that resolves the intermittent service startup issues of Oracle on Windows OS (Uncertified OS like Windows 10/2008R2)

I’m sure, if at all needed an upgrade, your DBA will choose a later version of Oracle database, when a client server architecture may not be flexible with Oracle 12c. Please make sure you try the upgrade using a virtual machine, spend some time analyzing logs and if you feel, it is worth taking a risk for the production, do the production patching using patch. You may have to drop and recreate the Enterprise Manager repository (if you are using it at all)

Update: 14th Feb 2017

A right day to present something that’s kinda disappointing? :P Well, Even though I managed to get stuffs running, after a reboot over night, realized that the “net start Oracle serviceName” in consequent attempts brings back the dreaded “ORA-12546: TNS: permission denied” error message logged in oradim.log



the only one logic I could reach to this intermittent issues with starting service is, read & execute permissions on Oracle executables are not being triggered always. Finish!

My further digging using “Dependency walker”  for both Oracle.exe & TNSLSNR.exe has exposed that both the executable were making reference to Microsoft APIs those are depreciated!


Finally: I’m doing a hack install of on Windows 10. Updating the instance using patch & expecting a smooth sail. I’m totally wrong, I can test it, hope it works (not always) & I shouldn’t ever attempt the same in a Production environment.

Positive thing: Once the bin folder has correct permissions & setting up the Oracle services to start automatically, the service starts without any issues and shuts down gracefully when Windows is shut down.


Hi guys

I’m in the midst of compiling a huge post about RMAN backup & restore for NOT DBAs & at the same time trying to fix “ORA-12546: TNS: permission denied” errors I was getting from my upgraded to (32Bit) on a Windows 10 virtual machine using Oracle VirtulBox (My RMAN backup was restored from Production to this upgraded instance)

My scenario:

Windows Service for Oracle Service is set as manual. After a reboot, I try to start the service manually. Sometimes it starts, some other time I have start/stop/start/stop a number of times until the database gets started. I asked google to give me tip & found a post answered by Tom (AskTom) bombarded with questions about “ORA-12546: TNS: permission denied” after machine restarts & there were no real solutions. Few of them even claimed that they managed to start the Oracle service by turning off the firewall(?)

Then I asked google another question “fix ORA-12546: TNS: permission denied” & landed on & from that page to

Basically the 2nd page is purely for Linux, and if you are familiar with file permissions, easy to translate for Windows

I browsed the bin folder & realized that, even though the SERVER\Administrator account has full access to the oracle.exe executable, somehow my user “rajesh” who is the default administrator was not inheriting the execute right on the same.


I gave myself full rights on the executable and tried to restart the service & without making any complaints the Oracle database Service started and the database was opened. I was having a look at both alert log and oradim log files to insure that “ORA-12546: TNS: permission denied” not being appearing once again.


Then I gave my user account rajesh full rights on the bin folder (Over reaction) to make sure that I am not going to get hammered with the dreaded, without much explanations available “ORA-12546: TNS: permission denied” error once again.


I think during the upgrade process much of the file permissions were changed as part of the patching process & eventually the permissions were not reset to the actuals. This issue could happen with any Oracle upgrade processes. So if you are that another unlucky one, please give the above hack a try.




Oracle Applications R12 | error while loading shared libraries:…

December 11, 2016>frmcmp_batch module=$AU_TOP/forms/US/XXITMDTLS.fmb userid=apps/apps output_file=$ONT_TOP/forms/US/XXITMDTLS.fmx Module_Type=FORM compile_all=Special
frmcmp_batch: error while loading shared libraries: cannot open shared object file: No such file or directory>

Recently I cloned our Production instance to check the feasibility of OEL 6.7 & as usual securely copied most of the bash profile for the Oracle and Application manager users from the production server.

I came across the “cannot open shared object file: No such file or directory” error while trying to compile an old form module & hadn’t have a clue for how to deal with this error, that happened to me first time in last 8 years with Oracle applications.

I crosschecked the folder permissions against production instance and everything was fine. All I could remember which could have gone wrong was narrowed down to the bash profile for the application user and after validating I realized that I was sourcing a wrong environment file!

Instead of sourcing the “/apps/apps_st/appl/APPSPRODBAK_hostname.env” file, I was sourcing “/apps/apps_st/appl/PRODBAK_hostname.env”. I realized it while trying to echo the $ORACLE_HOME variable as application manager user.

So, if you come across “error while loading shared libraries” error while trying to compile, before start dismantling your instance, try to see whether you have sourced the environment variables correctly.



Oracle Database (10g) & Developer 6i settings for Arabic/Urdu support

November 6, 2016

Hi guys

I think it was 2001-2002 our company decided to migrate to Developer 6i based build from Developer 2000 (4.5). We had loads of fun setting up the Arabic part for the forms runtime. I remember setting up the NLS_LANG string as ‘ARMSAWIN1256’ instead of ‘AR8MSWIN1256’ and wasting hours trying to figure out what went wrong.

If not often, I receive requests once in a while, asking about setting up the Arabic (Right to left languages) environment for client server architecture. Today I am “Showing” you a how to, rather than typing the entire stuff here :)

This Video demonstrates the following few

  1. Creating a database using AR8MSWIN1256 character set
  2. Setting up the languages and Unicode parameters to show correct languages
  3. Setting up client OS (Windows Xp, later OS)
  4. Hope the attempt helps few out there :)






Migrating Oracle developer 6i applications to Windows 2008 R2

October 13, 2016

Hi guys

Even though my blog has reached 600k+ visits, I am one of those “lucky” tech bloggers who is hardly reached through emails for some specific tips and helps.

One of the recent were about migrating from Developer 6i developed web deployment to Windows 2008 R2, and the asker decided to approach me through email after reading my post about installing Developer 6i suite on Windows 7 and later OS

There were many emails until I realized they have a web deployment! Using Developer 6i & I was truly impressed. Developer 6i setup was one of the toughest, when I tried it by 2004-2005 period and I truly given up once after a number of failures to setup it properly and “googling” wasn’t as efficient as today when a single search fetches you hundreds of blog posts those explain such setups minutely so that a beginner can, without sweating much could, almost setup anything!

The hacks I posted with my blog towards installing Developer 6i on Windows 7/later and Windows Servers did have it’s own drawbacks. Many of the Oracle products like Oracle graphs doesn’t work with the .dll hacks & we experienced unexpected crashes and I have made sure that I did warn the enthusiasts about them with my blog. Did it stop people from taking risks? I don’t think so

Our legacy Oracle database server hardware was 14 years old when we decided to finally decommission it. Many places around the world businesses never listen to the Administrators complaining about the age of hardware and how difficult it is to maintain obsolete hardware and software. Oracle database(proprietary) must be one of the widely used database without proper licensing and I hardly believe many small organizations will ever pay the unbelievable prices Oracle tries to extract from customers when they want to do proper licensing. Many of those environments may have new admins and the entire development teams dispersed or the software company that has developed the software diversified and started selling fish. Anyway, my asker’s situation was not far different. His hardware was obsolete and the company has brought him a new hardware with 4GB memory and he was desperately looking for a method to migrate from his Windows 2003 server to Windows 2008 R2 server

Can you/should you take risks by trying to migrate to a newer OS because there are “few hacks” available over internet?

I work as information technology manager and I will not let it happen, knowing and after having bad experiences. Instead I will try to find better solutions, like converting your Windows 2003 physical machine into a Virtual Machine and going online from a newer hardware and OS

Mr. Asker’s scenario

Windows 2003 Server with Developer 6i Web deployment and Oracle database 10g and his hardware has just 2GB memory!

His requirement

Want to start using the new hardware and Windows 2008 R2. Can’t take risks

My suggestion to him

  1. Use VMWare’s P2V converter, Convert the legacy server into a VM
  2. From the new hardware, run the VM

While I am NOT at all happy with the 4GB physical memory, I will suggest anyone who wants to go with such an approach to upgrade their hardware to have minimum 8GB so that the Windows 2008 R2 can reserve 4GB for itself, 3GB maximum for the 32Bit Windows 2003 Server and tweaking the Oracle database SGA to 40% of from the 3GB reserved for the VM!

Let us consider the few advantages of converting legacy hardware to virtual machines quickly

  1. One can always take a full backup of the VM, based on mission criticality, in addition to the database backups. Such backups will help the administrators to restore the whole “machine”, if something goes drastically wrong
  2. No headaches to figure out how the deployment was made, especially when there are hardly any documentations available explaining the setups

My asker got so excited that he stopped answering my consequent mails checking about progresses. That’s the downside of free consultancy in most of the cases. Oh well, that was not my first experience anyway. This year itself I helped someone to setup a 12c environment and when he was online, he told me how he had tears in his eyes and later he stopped answering my calls Winking smile

I hope I made some sense with this post and if you are someone who is frantically looking for a way to “Migrate” without risking much, give it a try. Have comments or need more clarifications? Use the comments area to let me know about them.