Finding and cleaning Oracle locks

How to find blocking sessions in Oracle (11g). This is used to make sure that the object which we are trying to update is actually locked by another session:

 v$locked_object a ,
 v$session b,
 dba_objects c
 b.sid = a.session_id
 a.object_id = c.object_id;

And this query tells which are the problem sessions:

select l1.sid, ' IS BLOCKING ', l2.sid
from v$lock l1, v$lock l2
where l1.block =1 and l2.request > 0
and l1.id1=l2.id1
and l1.id2=l2.id2;

So now we have the SID of the problem session and we only need the serial number to kill it.

SELECT serial# FROM v$session WHERE sid=<sid>

And now kill it:

ALTER SYSTEM KILL SESSION '<sid>,<session#>'

Check tablespace free space and total used – Oracle

Use the below SQL query to check the total, used and free space in all the tablespaces in the database

   fs.tablespace_name                          "Tablespace", 
   (df.totalspace - fs.freespace)              "Used MB", 
   fs.freespace                                "Free MB", 
   df.totalspace                               "Total MB", 
   round(100 * (fs.freespace / df.totalspace)) "Pct. Free" 
      round(sum(bytes) / 1048576) TotalSpace 
   group by 
   ) df, 
      round(sum(bytes) / 1048576) FreeSpace 
   group by 
   ) fs 
   df.tablespace_name = fs.tablespace_name;

If you are running this in sqlplus you might want to format the columns first

column "Tablespace" format a13
column "Used MB" format 99,999,999
column "Free MB" format 99,999,999
column "Total MB" format 99,999,999


Sync servers using multiple streams with LFTP

If you have a remote server that you want to sync a directory you can use for example rsync, however rsync doesn’t offer the multi stream syncing and can be slower if you have many new files. The below solution uses lftp with 5 parallel streams to download and each stream is split into 10 separate segments. This is very helpful if you cannot max your download connection with regular methods and of course if the uploading server has enough bandwidth.

trap "rm -f /tmp/syncserver.lock" SIGINT SIGTERM
if [ -e /tmp/syncserver.lock ]
 echo "Syncserver is running already."
 exit 1
 touch /tmp/syncserver.lock
 lftp -u $login,$pass $host << EOF
 set ftp:ssl-allow yes
 set mirror:use-pget-n 10 
 mirror -c -P5 --newer-than=now-15min --log=syncserver.log $remote_dir $local_dir
 rm -f /tmp/syncserver.lock
 exit 0

The above sample should work for most cases – you just need to change the values of the variables (highlighted in red).

This part (–newer-than=now-15min) can be changed based on how old files you want to sync, for example if you synced the files 4 hours and you have new files in the last hour, you want to change this part to ONLY download the new files then change this part to be now-60min or more (but less than 4 hours in this example).

If you want to share from your local machine to the remote server, replace this line as (changed parts highlighted in red):

 mirror -R -c -P5 --newer-than=now-15min --log=syncserver.log $local_dir $remote_dir

Now save the above as a .sh file, example and you can add it as a cronjob to run every 15 minutes or run it when you have new files.

*/15 * * * * /home/redoer/ >> /home/redoer/sync_cron.log 2>&1

ZNC in a DigitalOcean droplet

It is nice to have an IRC connection that is always available and that doesn’t have your home IP address exposed. With the ZNC setup you can then use your local IRC client (BitchX, irssi, HexChat etc) to connect to the ZNC and you will be able to see all the networks and channels it is connected to. This tutorial will explain how to setup ZNC on a $5/month DigitalOcean droplet (ref link) with Ubuntu 16.04.1. Of course this setup should work on any hosting and setup – DigitalOcean is just given as an example here.

Create a Droplet

1. Press on the Create a Droplet button once you are logged in your DO account

  • Select the OS image (Ubuntu 16.04.X), the Droplet size/price ($5/mo), data center region, add extra features, ssh key if you want that extra security and then press on Create Droplet

2. Login to your Droplet (box) and make sure everything is up to date

sudo apt-get update
sudo apt-get upgrade

Installation and Build of ZNC

1. Grab few essentials that are needed to compile the ZNC from source

sudo apt-get install build-essential libssl-dev libperl-dev pkg-config

2. Grab the latest ZNC source tar ball

cd /usr/local/src; sudo wget

3. Extract the package and enter the directory

sudo tar -xzvf znc-latest.tar.gz; cd znc*

4. Configure the source system wide (you can use ./configure –prefix=$HOME/znc if you don’t want system wide)


5. Then, compile ZNC (might take few minutes)

sudo make; sudo make install

Configuration of ZNC

1. Create a new user on which we will run ZNC

adduser znc-admin

2. Switch to the new user

su znc-admin; cd ~

3. Start ZNC and its configuration

/usr/local/bin/znc --makeconf

4. Below is a sample configuration (ZNC version 1.6.4) – I highlighted in red all the config that I entered manually, the rest is the default values (what is given in the brackets [ ])

[ .. ] Checking for list of available modules...
[ >> ] ok
[ ** ] 
[ ** ] -- Global settings --
[ ** ] 
[ ?? ] Listen on port (1025 to 65534): 14125
[ ?? ] Listen using SSL (yes/no) [no]: yes
[ ?? ] Listen using both IPv4 and IPv6 (yes/no) [yes]: yes
[ .. ] Verifying the listener...
[ >> ] ok
[ ** ] Unable to locate pem file: [/home/znc-admin/.znc/znc.pem], creating it
[ .. ] Writing Pem file [/home/znc-admin/.znc/znc.pem]...
[ >> ] ok
[ ** ] Enabled global modules [webadmin]
[ ** ] 
[ ** ] -- Admin user settings --
[ ** ] 
[ ?? ] Username (alphanumeric): redoEm
[ ?? ] Enter password: 
[ ?? ] Confirm password: 
[ ?? ] Nick [redoEm]: 
[ ?? ] Alternate nick [redoEm_]: 
[ ?? ] Ident [redoEm]: 
[ ?? ] Real name [Got ZNC?]: Redo'Em
[ ?? ] Bind host (optional): 
[ ** ] Enabled user modules [chansaver, controlpanel]
[ ** ] 
[ ?? ] Set up a network? (yes/no) [yes]: 
[ ** ] 
[ ** ] -- Network settings --
[ ** ] 
[ ?? ] Name [freenode]: 
[ ?? ] Server host []: 
[ ?? ] Server uses SSL? (yes/no) [yes]: 
[ ?? ] Server port (1 to 65535) [6697]: 
[ ?? ] Server password (probably empty): 
[ ?? ] Initial channels: #redoEm
[ ** ] Enabled network modules [simple_away]
[ ** ] 
[ .. ] Writing config [/home/znc-admin/.znc/configs/znc.conf]...
[ >> ] ok
[ ** ] 
[ ** ] To connect to this ZNC you need to connect to it as your IRC server
[ ** ] using the port that you supplied. You have to supply your login info
[ ** ] as the IRC server password like this: user/network:pass.
[ ** ] 
[ ** ] Try something like this in your IRC client...
[ ** ] /server <znc_server_ip> +14125 redoEm:<pass>
[ ** ] 
[ ** ] To manage settings, users and networks, point your web browser to
[ ** ] https://<znc_server_ip>:14125/
[ ** ] 
[ ?? ] Launch ZNC now? (yes/no) [yes]: 
[ .. ] Opening config [/home/znc-admin/.znc/configs/znc.conf]...
[ >> ] ok
[ .. ] Loading global module [webadmin]...
[ >> ] [/usr/local/lib/znc/]
[ .. ] Binding to port [+34125]...
[ >> ] ok
[ ** ] Loading user [redoEm]
[ ** ] Loading network [freenode]
[ .. ] Loading network module [simple_away]...
[ >> ] [/usr/local/lib/znc/]
[ .. ] Adding server [ +6697 ]...
[ >> ] ok
[ .. ] Loading user module [chansaver]...
[ >> ] ok
[ .. ] Loading user module [controlpanel]...
[ >> ] ok
[ .. ] Forking into the background...
[ >> ] [pid: 19576]
[ ** ] ZNC 1.6.4 -

That is it – ZNC is now up and running!

Connect to ZNC with your local IRC Client

Now find the IP address from your Droplet and setup your IRC client to connect to it.

Example with HexChat:

After connecting to the ZNC all the networks and channels you have added will appear.

Enable higher screen resolution in VirtualBox (for Ubuntu)

This might work on other systems too, I tried it on Ubuntu 14.04.1.

In VirtualBox the screen for Ubuntu was very small and it was difficult to see what’s on the screen. To fix this issue, you need to install the following packages on the guest (VM) box:

sudo apt-get install virtualbox-guest-dkms virtualbox-guest-x11

If you get this error:

The following packages have unmet dependencies. virtualbox-guest-x11 : Depends: xorg-video-abi-15

You will need to remove this package (note: I am not sure what all this removes, it was a lot – use caution):

sudo apt-get remove libcheese-gtk23

Then install these

sudo apt-get install xserver-xorg-core-lts-trusty


sudo apt-get install xserver-xorg-core

Then try to install the virtualbox packages, as the first step:

sudo apt-get install virtualbox-guest-dkms virtualbox-guest-x11

Once they install properly, restart the VM and the screen should be normal size. You might need to increase the Display memory in VB before starting the VM.

Fix White Screen of Death in WordPress (3.3.1?)

I haven’t updated WordPress for a while and I was getting the what is know as White Screen Of Death. Basically once I login on the admin panel, all the screens are white and I cannot click or do anything.

In the source of the pages, there is an error message like:

Fatal error: Access to undeclared static property: WP_Screen::$this in wp-admin/includes/screen.php on line 706

To fix this, you will need to access the files on the server, and modify the following file in your favorite text editor:


Go to line 706 and modify the line from:

<?php echo self::$this->_help_sidebar; ?>


<?php echo $this->_help_sidebar; ?>

In summary, remove the ‘self::‘ part.

Save it and re-login/refresh your WordPress admin panel.

Add or modify the IP address for Wireless Printer Brother MFC-J6920DW in Linux

If you set up the printer Brother MFC-J6920DW on the network and with their brsaneconfig4 utility in Linux, the value is hard-coded in a file, so if the router is reset and you lose the IP address associated with the printer, some of the functionalists (mainly scanner) will not work.

To fix this, you should edit the following file:

vi /etc/opt/brother/scanner/brscan4//brsanenetdevice4.cfg

Or if you prefer gedit

gedit /etc/opt/brother/scanner/brscan4//brsanenetdevice4.cfg

Modify the IP address at the end of the file to the new IP address that the printer has. To find the new IP address, check the settings on the printer or your router.

The line should look something like this:

DEVICE=MFC-J6920DW , "MFC-J6920DW" , 0x4f9:0x2f5 , IP-ADDRESS=

If this file is empty, most likely you haven’t set up the scanner with the Brother’s tool (you can download it freely from their website), and if you like to set it up, run the following:

brsaneconfig4 -a name=MFC-J6920DW model=MFC-J6920DW ip=

That should be it.

Enable Delete button in Gnome

By default the Delete button does not move files to trash, you need to use Ctrl+Delete which is major annoyance. This is after 3.2 Gnome I believe and still the same up to 3.10. They say it is a feature but I don’t see it as such.

To fix this, you will need to modify the accels of Gnome, with few simple steps:

Run the following in the terminal as your user:

gsettings set org.gnome.desktop.interface can-change-accels true

Now you are able to give items different buttons.

Select a file that you might want to delete (create New Folder for example) and after you have selected it, go to the Edit menu (right-click doesn’t work) and position your mouse over the Move To Trash field. Once the field is in focus, press the Delete button twice. The button combination on the right should be changed from Ctrl+Delete to Delete only.

That is all, now it is enabled. You should disable changing of accels now because you might accidentally do it for other things:

gsettings set org.gnome.desktop.interface can-change-accels false


This was tested on Gnome 3.4.2 on Debian Wheezy.

Setup plugins directory in Linux (debian) for Firefox

I had issues with Firefox not finding the plugins for flash. I had to setup the following environment variable for it to find it:

Check if it is already set:


If it is not, set it:

export MOZ_PLUGIN_PATH=/home/user/.mozilla/plugins

Any path will work, I just used the .mozilla directory to keep things clean.

You should restart Firefox to see the plugins.


This was tested on Debian Wheezy.

Recover data from a damaged hard disk drive

I would like to begin this presentation by first stating that I am not an electronic technician. Nor do I have any more than a very basic understanding of hard disk drive technology. I have a basic understanding of computer technology and of electricity. You do not have to be uber skilled to do what I did.

I successfully retrieved lost data from a dead hard disk drive for a few cents more than $100. I had been quoted $590 and up by professional data recovery firms to do what I did. The following presentation is a brief summary of what I did and how it worked. I cannot guarantee it will work for everyone. I can advise you to be very careful if you try to do any of the things that I did because it is possible that you can so badly corrupt your drive that any data on it might be lost forever.

Before you begin, do what you are doing right now. That is, go on the Internet and read, read, read and then read some more.


The disk drive was accidentally exposed to water. The water caused the printed circuit board to dysfunction. My friend, the owner of the drive replaced it and gave it to me to try to recover his data if I could. The arrangements were I could keep the drive in exchange for any data I might be able to recover from it.

My preliminary assessment was that the data was most probably intact. The platters had never been opened or exposed to air in anyway. The printed circuit board was the only part of the drive that had been damaged as a result of the accident. I wrongly assumed that I could simply, “hot swap,” the circuit board that had stopped working for another one from some other drive.

The disk drive details:

Brand: Hitachi
HDD: 5K250-250
Model: HTS542525K9SA00
RPM: 5400
Power: 5v 700mA DC
Capacity: 250GB
Type: SATA
P/N: 0A54876
MLC: DA2010

Complete 2.5″ HDD, PCB has been unscrewed

I have a source locally that is involved in dismantling and recycling computers of all kinds. He advised me that from time to time he gets small SATA drives and he has to drill a hole in them to insure that no data can ever be retrieved from any of them. However he told me that would not stop him from giving me the printed circuit boards if I wanted them.

But when I told him about my project to recover data he told me that he was uncertain why but he was pretty sure that I could not simply hot swap boards between drives with any hope of retrieving data or resurrecting a dead drive. That opinion was further substantiated by another friend who provided me with the following Internet link to the HDD Guru Forum.


The article on HDD Guru is also a basic primer that explains why it is not possible to simply hot swap one printed circuit board for another when trying to recover data. The key to understanding that is a thing called the NVRAM or the Non-Volatile Random Access Memory chip. While it would appear that two identical drives have identical circuit boards attached to them that is not totally true. It is true that the boards themselves do operate identically and removing one and replacing it with the other is a piece of cake involving a few tiny screws and some careful physical work.

PCB only, NVRAM removed and placed on top of another chip with scotch tape to avoid losing it

But the individual boards are unique in as much as all of the information about the specific hard disk drive is stored within the NVRAM chip. So while the boards will physically move from one drive to the next they will not operate unless the NVRAM chip is moved as well.

The above article includes two photos of the kind of printed circuit board I worked with including a highlighted diagram of where to find the NVRAM chip.

The first problem I addressed was moving that chip. From a casual glance at the dead drive that I had I knew that there was no way that I could ever dream of doing that type of board level electronic work. But here where I live I am familiar with a TV repair shop that has done circuit board work for me in the past when they removed and reinstalled IC circuit chips in an old Sony TV I owned.

I consulted the technician in that shop and he said that moving the NVRAM, which is basically an 8-legged EPROM or an Erasable Programmable Read Only Memory device, is an easy procedure. The NVRAM performs so that once it has been programmed the information contained in it remains non-volatile. So no matter if the power is turned on or off the data remains safe. The technician I spoke with in the TV shop advised me that he has to move those kinds of chips all of the time. It seems that in modern electronics often the new replacement part is unusable unless the original EPROM chip is removed from the old part and then soldered onto the new part. He estimated the labor cost for moving my NVRAM at $25.

The next problem I encountered was finding a donor drive. As I began this discussion I will remind you that I don’t have detailed hard disk drive knowledge. So I was kind of shooting in the dark. On the HDD GURU forums there are various discussions authored by learned individuals who speak of the various characteristics that must be matched between circuit boards. But given the gamble I was taking I determined to set my own standards as I attempted to match a donor drive to my dead drive.

I first determined that the physical description of the two drives had to match exactly (Hitachi, HDD:5K250-250, Model:HTS542525K9SA00). Next I decided that the part numbers for the printed circuit boards should also match because that would insure that the two boards would physically interchange with each other (p/n 0A54876). Finally, I decided that the MLC should also match (DA2010). I know that experienced technicians might suggest that there are other boards which would also interchange but I determined to play it safe and apply my own personal standards in selecting my donor drive.

I also note that there are other characteristics between my donor drive and my dead drive that did not match. There are a variety of numbers on both the hard disk drive enclosure as well as the two PCBs that do not match. I don’t know what those numbers mean but I assumed that if the basic information like the size of the drive, the numbers of heads, the speed, the voltage, the number of cylinders etc. all matched then the two boards would probably interchange. I also noted that if the model numbers, pin numbers, and MLC numbers matched those other characteristics should also match.

Finally, I needed a USB, SATA, hard disk drive enclosure in order to have a way to attach the repaired disk drive to my computer. There are countless numbers of them on the market and I bought mine for less than $10 from Amazon. Enough said.

When I was finally able to locate a donor drive, my cost was $55 plus freight. When it arrived the very first thing I did was record all of the characteristics about the two drives and the two PCBs so that they would not become confused during the exchange process. I then careful removed the individual PCBs using the standard static precautions employed in handling any electronic circuitry. Basically you should not touch the PCB except by the edges but there are many places on the internet that can help you understand the precautions in dealing with electrostatic discharge and how it can ruin a printed circuit board.


Bare HDD, no PCB

After I delivered the two printed circuit boards to the TV shop technician, I waited about a week to get them back. I advised the technician to retain the donor NVRAM as I supposed that if my experiment failed I could at least put it back and have one functional hard disk drive. But my concerns were unfounded. He was able to successfully exchange the NVRAM that matched my dead drive with the one that was on the donor drive PCB. When I swapped out my dead PCB with the donor PCB that now had my NVRAM chip soldered onto it, everything worked perfectly.


Just to recap exactly what I did, I had a dysfunctional hard disk drive printed circuit board which had on it the NVRAM which had all of my disk drive’s data in it. I also had a printed circuit board which was functional but which had on it an NVRAM that contained data about that other hard disk drive. I had the technician exchange the two NVRAM chips so that the functional printed circuit board now had on it my data’s NVRAM chip.

For me the work involved finding a functional drive that matched, and then carefully removing the two circuit boards and safely packing them into electrostatic bags to deliver to the TV technician.

I was able to recover all of the lost data off of my friend’s hard disk drive. The drive functions perfectly and I am actually considering installing it in my laptop as it has a greater capacity than the drive I am currently using.

The final cost for the whole operation total just a bit more than $100. The expenses were as follows:

USB SATA hard disk drive enclosure ........ $  5.58
Used Hitachi donor drive .................. $ 55.00
Shipping for above ........................ $  6.00
TV technician labor fees .................. $ 35.00

Total charges ............................. $101.58

This was a guest post by TJD.

Go to Top