Browsed by
Author: vanpupi

Python … no not the snake – my very first script

Python … no not the snake – my very first script

Do you know the feeling? “I should do <fill in something cool here>”. Well, I was facing this already a time by learning python. I knew that you could do some cool thing with it, but never pushed myself to do it. Until now! Otn appreciation day! Thanks to Mr Oracle Base  Tim Hall. Some time ago, he launched the idea of otn appreciation day and of course I added my entry as well. You can find it here.

Tuesday 11 october 2016, my entry was scheduled at 08:30 CEST and seeing all the other blog posts, I soon realised that this would be a very nice bunch of information. I started copy pasting the blogs and links, but … As soon as I started doing something else (work!!! ) I missed some. That brought me the idea of creating a script. The idea was simple, log in to twitter, fetch all tweets hashtagged by ThanksOTN and then filtering out the retweets. Simple huh? Then … how to do it? mmm … let’s take the challenge, I’ll do it in python.

The result is here (improvement needed Christian! But that will come in time).
I’m happy to have an omnios (solaris derivate) server at home and there I have python available. So let’s go.

I broke it down into some steps. In order to read a twitter feed you need a twitter application. To do so, surf to and after loging in, click the create application button.

twitterapp creation


I only left the callback url blank. For this purpose, we don’t need it. I think, if I do, please let me know.






Then all is done. The next screen will give you an overview about the application you just have created and in the tab “keys and access tokens”, you only have to click on one more button “Create my access token”. So that’s it folks, nothing more to be done at twitter side.
Just record following fields:

  • Consumer Key (API Key)
  • Consumer Secret (API Secret)
  • Access Token
  • Access Token Secret

these we need in order to be able to establish a connection with tweepy to twitter.

Then it’s time to write some code! I assume you already have python setup, if not, drop me a mail, comment or tweet and I’ll help you out. So I never ever had done some python scripting so it was googling a bit.
It turned out i’d need tweepy for this task, so it was easy to install. Pip install tweepy was all I needed to enter and confidence was growing, if it’s going to be as easy as this, I’ll be good!

first we need to import some things:

import tweepy
from tweepy import OAuthHandler
import json

Then (at this point) I only needed a main procedure. I call it “main”. maybe obvious but ok 🙂 If you need more procedures, they go right after the import statements.

So the main I created looks like this. The comments are my comment for the blog as well:

def main():

 #Variables that contains the user credentials to access Twitter API
 access_token = "<fill in your own>"
 access_token_secret = "<fill in your own>"
 consumer_key = "<fill in your own>"
 consumer_secret = "<fill in your own>"

 # OAuth process, using the keys and tokens
 # here we create an auth object which uses the tweepy oauthhandler. There we need to pass the consumer key and secret
 # then we need to set the access tokens into the auth object
 auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 auth.set_access_token(access_token, access_token_secret)

# Creation of the actual interface, using authentication
# here we create the actual connection to twitter and we call it api. It's just a name.
 api = tweepy.API(auth)

# search it and display them after removing the RT @'s
# some variables i picked:
 query = '#thanksOTN'
 max_tweets = 1000

# here i am gathering the tweets into an array and put them in a cursor.
 searched_tweets = [status for status in tweepy.Cursor(, q=query).items(max_tweets)]
# this is just "quick'n dirty I figured out in the meanwhile. A better way would be to 
# use templates and fill them in this way, but hey... this works :-)
# now I have a resultset (searched_tweets) and I will run over them in a for loop.
 for tweet in searched_tweets:
# I'm filtering out the retweets in following line
 if "RT @" not in tweet.text:
## the next line in comment. I added an extra if-clause first to only list tweets which contained "OTN Appreciation day:" in the tweet
# later turned out that not everyone put this one in, so I commented it out.
# if "OTN Appreciation Day:" in tweet.text:
# and here i'm printing the user who has sent the tweet
 print('<p>Twitter user:',tweet.user.screen_name,'<br />')
# and eventually what he has tweeted. This is also a bit Q'n'd I figured out. but the emoji weren't
# displayed correctly in python 3.4, so this is a was to have them parsed to utf8. I think there 
# will be some more efficient ways of doing this, so feel free to comment on this.
 tweet_text = str(tweet.text.encode("utf-8") if tweet.text else tweet.text).lstrip('b\'')
# and finally print the tweet.
 # and close the webpage 

# finally call main
if __name__=='__main__':

And finally  this script was scheduled in crontab every 30 minutes, and redirected to a html file.

I should still create a kind of tokeniser to manipulate the tweet_text in order to make hyperlinks from the links. But hey … that’s something for the future 🙂

So this was my very very very first python script. I think it’s a fun language which I’ll be using more and more.

Comments, advice,… are always welcome!


OTN Appreciation Day: Dataguard

OTN Appreciation Day: Dataguard

Thanks Tim Hall for the idea about OTN Appreciation day. The feature I like the most in oracle is a rather “old” one, but it can be extremely useful: Dataguard. Why dataguard? I find it extremely easy to set it up, maintain it and it can save you a lot of “troubles”. Especially on big(ger) databases it takes down the time to recover in case of a failure down to seconds instead of hours.

The concept is simple:

Dataguard configuration

(image borrowed from the oracle documentation) It consists out of a primary (mostly live) database and we replicate all the redo to a target / standby database. This in real-time or if needed, with delayed apply.

One of the nice things about it, even how you mess it up, you get it up and running every time again, so it’s virtually unbreakable. Is it? Maybe not, but even it lags behind, it’s fairly easy to bring your standby database up to date with incremental backups and go on with your daily tasks.

Nowadays, I (and lots of my colleagues) use it a lot for hardware migrations. Almost everything can be done on beforehand, the moment of the big switch, you just switch the db, adapt the connection strings and done. You even can test your migration easily by breaking the redo stream (or in current versions use the snapshot standby) and test the applications on the new platform.

One of the nicest things I ever used it for was a exadata to exadata migration from Germany to The Netherlands. That client decided to switch from datacenter and all the equipment must be moved from Germany to the Netherlands, but with as few as downtime as possible. Switching over 45 databases (not too big, only a couple of TB in total), took only minutes and the end-users weren’t even aware that a complete DC move had been done.

All those nice features, active dataguard, snapshot standby, … they all make our live a bit easier. So thanks for this nice feature which makes my life a bit easier.


First POUG conference

First POUG conference

I could create a very short blogpost summarising this first POUG conference: AMAZING! But as this marvellous event deserves what it deservers, I’m going to write a little post about it, as a way of saying thank you!

Poug: it’s a word with double meaning. Intentionally it would stand for Poland Oracle User Group but thanks to Kamil (@ora600pl ) and his team it was turned into Pint with the Oracle User Group.
I met Kamil only at UKOUG Ireland this year where he revealed his plan. Philippe Fierens (@pfierens) and I were enthousiast immediately: count us in. Some weeks after … “Hi guys, we made it, we are expecting you”. Great news!

While composing this blogpost, I realised that I should take more pictures during conferences. Memo to self! Here we go.
We were arriving on thursday rather late so unfortunately we missed the speakers dinner. Anyhow … at friday morning the conference started.


2 Kamil’s opened the conference by “explaining” the rules. So meaning that we have to adapt and that water is meant for bacterias, so we should go for the beers. It’s the first conference on which we actually we’re encouraged to drink beer as a speaker! This looks like a good start.
It was a rather good amount of people who showed up. If I need to guess, it must be around 150 people who were traveling to Warsaw for this nice event. In summary, this is a great start and more great things to come.

The first session I attended was from Jim Czuprynsky (@JimTheWhyGuy) . It was titled: “DBA, Heal Thyself: Five Diseases of IT Organizations and How to Cure Them”. Such an interesting talk with lots of truth in it. Jim was telling so full of passion and enthusiasm, a session never to forget.

Heli Helskyaho from Finland  (  )  ,it’s easier to spell her name as to pronounce it 😉 , had a extremely interesting session about how and why you should use sql developer and showed us a huge amount of useful tip&tricks you could do with it. Lots of thing I even didn’t know that were possible with this product. If you ever have the chance to attend one of her sessions, please go! You won’t be disappointed.

poug_beers_and_ivicaNext topic I chose was the session about parallellism from Ivica Arsov. I was very interested in it as parallellism in 12c is a rather complex mechanism. Notice the nice choice of Polish beers we had the opportunity to choose from.

After lunch it was our turn, we talked about the ovm implementation on exadata. It was nice to have such an interested audience, really a joy to speak for. Thank you POUG and attendees.
Our successor was Kiran Tailor ( ) with a very interesting session about exalytics. As we have a customer with exalytics it was EXTREMELY interesting to hear this.

poug_only_one_drinkWe closed the evening with really “only one drink” each. But it was an amazing party. It was called a party, but a far better name should be appreciation event. Check also this link from Robin




After a long short night, mmm you get the picture 🙂 , a lot of people turned up for Neil Chandler’s session. Ok it started at 10:50h but a full room, and all attentive on Neil’s talk why the optimizer from time to time decides to go his own wrong way. Useful hints, tips and tricks. Actually a presentation you should see and make sure every dba should have seen this!

poug_multitierJoze Senegacnik (@joc1954 ) took over by opening the CBO’s black box and then you understand why sometimes it can be more the box of pandora instead. Fortunately the parallels to “normal life” weren’t far away and pretty well illustrated. No further comments on this one.

“You should use sql” (or at least pl/sql) were the words of a small man in size, but a great man for all the rest. An marvellous speaker. Ladies and gentleman: Martin Widlake ( ) ! He had an EX-CEL-LENT talk over how to use (pl)sql to use loading data into a database. Everybody agreed on “row-by-row slow-by-slow” and very good tips which can be implemented very easily and give you lots of advantages. Thanks Martin!

This block of text, I’m borrowing from my friend Kiran on his blog entry . I can’t write it better, so I’m going to give you the block of text about the afternoon:

Once we had consumed our lunch we had our final session of the day ‘#DBADEV,Bridging the gap between development and operation table’ This was a panel session with Sabine @oraesque, Martin @MDWidlake, Philippe @pfierens, Neil @ChandlerDBA, Piet @pdevisser and Erik @evrocs_nl. I think most people would be able to say something in this area, I am always fighting with developers :-). What a great way to end the conference.

I should actually continue copy/pasting as the lunches, dinners, breakfasts Kiran and I enjoyed together. It was just epic!

This conference was

  • extremely well organized
  • on a fabulous location
  • equipment/food/drinks/beers/… were plenty and excellent
  • fantastic attendees

It was so nice to meet so nice people in such a positive and stimulating environment.
Dear organizers, I would like to say special thank you for having us. It was the first edition, but it was FANTASTIC! Thank you so so so much.


My trip to Oracle Openworld 2016 #OOW16

My trip to Oracle Openworld 2016 #OOW16

It all started a couple of months ago. I submitted a presentation and my friend Philippe Fierens submitted a panel session together with Adam Bolinski ( , but unfortunately, I’m joining #teamRejected Lots of cool and nice people had to join as well, so it’s not too bad.
Then great news came and my boss asked if I was interested of visiting Oracle Openworld. I didn’t have to think twice, so my answer was yes very quickly.

The trip starts early. Very early … on saturday at 04:30 in the morning we had the appointment at the company. There a little coach picked us up and after a 2hour drive, we arrived at schiphol.


A nice group of friendly and interesting people traveling together. This will be fun!

After a short check-in, bagage drop-off and all other security checks, we had breakfast and after that, off we go!


img_0868 Immediately it became very clear what the main topic of this Oracle Openworld would be: CLOUD! 🙂

Personally, I’m very sceptic to this new “hype”, but the only way to know if I’m right or wrong is to go with an open mind and experience it.



10:30h of flying later, we safely landed in San Francisco. Then the necessary checks, and we took a cab to the hotel. Checking in and then off we went to the Moscone center for the registration.


It IS impressive. People told me it’s big and large, but if you stand there for yourself, you know they’re right. This is going to be cool.

After registration we went for a walk. Doing something a little bit active in order not to suffer from the jetlag. Then I received a message from Philippe, he’s already at Jillians, so we went to have some drinks together to catch up. Always nice to see friends again! And friends do have some good ideas, this night’s dinner would be sushi. A very typical sushi bar but so good! If I could find it back, I would recommend it!

The next day, sunday, ok there are already some sessions, but for my first time in San Francisco I really wanted to see the bridge. So with the oracle belgium people we we went biking. After riding the Goldengate bridge and taking the Ferry back, it’s time to follow some sessions.

I tried to create a varying schedule filled with attending some sessions and going to the demo-grounds. My personal feeling was that you really had to search well for technical sessions, whilst when walking a moment in the demo grounds, you could talk to lots of technical people and some of my questions I had were answered very quickly. So it became clear very quickly that this was the place to be.

Sunday evening, the glorious moment of every OOW – virgin. Larry’s keynote. To be honest, he let me down. After hearing so much about the keynotes maybe my expectations were a bit high but, it is an impressive event. We closed the evening with some drinks and then … early to bed!

Monday a day full of sessions/demogrounds/… but most of all, trying to get to know as much as possible about the newly announced exadata, the Exadata SL6-2. A sparc based engineered system which I think Oracle is going to push pretty hard. Engineers I was talking to, said that this machine is to be used in the Oracle cloud. Still trying to figure out on how to check it easily to confirm this.

Tuesday it became very clear that Oracle is focusing on cloud … but … “there will be a coexistence of about 10 a 15 years”. I like this, but in some way it feels like they aren’t very confident in their own product, but time will tell. Larry held his second keynote and this was really what I had expected. If you’re curious, you can see it here. And that evening we had a blast during the benelux party. So we went early to bed, literally 🙂

Wednesday, the last full day. I spent most of the time on the demo grounds this day. Taking a picture of the famous America’s cup  and an interesting session about the exadata technical deep dive and internals. Congratulations also to Oren Nakdimon (@dboriented on twitter), he had a nice presentation about upgrading his pl/sql code without any downtime on standard edition.

Last full day, apparently means also the appreciation event. It was announced to be Billy Joel, but he cancelled and was replaced by Gwen Stefani and Sting. Personally, I’m not really a Gwen Stefani fan … but Sting was really fantastic and he got the atmosphere going!

Thursday was a day of buying some presents for home and rushing to the airport.

A common topic through many presentations and talks at the geek theatre at the demo grounds is encryption. It’s almost named in one sentence with cloud. Which they immediately turn directly to sparc. So my guess is sparc will be pushed more and more. Just because of the encryption on the chip and the software in silicon which can help you with the in-memory option of the oracle database. This screams for some tests.

In summary, my first Oracle Openworld experience was fantastic. I can advise everybody that you need to have experienced it at least once. Such nice friendly people, and lots of knowledge transfer. Thanks Exitas for letting me doing this!























Welcome Exadata SL6-2!

Welcome Exadata SL6-2!

EDIT: a new entry about this Exadata SL6-2 launch can be found here!

During a session of Juan Loaiza with the lovely title “Oracle exadata: what’s new and what’s coming” suddenly following slide popped up.



So it looks like this is really going to happen. In the session no exact timings were given, but I’m awaiting this system to play with.

Basically I think this will be useful to migrate current solaris / sparc users to exadata. I’m a bit sceptic about these extreme performance numbers, but hey … if it’s launched, i’ll be happy to test it.

To be continued!

Exadata on sparc: sl6-2

Exadata on sparc: sl6-2

EDIT: a new entry about this Exadata SL6-2 launch can be found here!

Yesterday while walking to Larry’s keynote  on Oracle OpenWorld 2016, all people had to pass the engineered systems.


Curious as I am, and fed by lots of rumors I wanted to have a look at them. And indeed, there was one “new” one standing.

the nice thing is that you just can talk to the guys and this extremely friendly guy told me “this one is being announced on Tuesday”. It’s all about the exadata sl6-2. You’d think, ok another exadata, but this one is a bit special. The compute nodes are sparc t7 based and they run Linux on sparc. The nice thing they have 2ib cards and thus potentially 160gb/s available. Sounds something nice to test 🙂

Storage cells are still Intel, but who knows what’s going to come. I had the chance to play with it a very short bit and it’s really running Linux on sparc, ofcourse it’s just exploring and it should be available around December and the virtualized version was to be expected around May 2017. Anyhow, I ‘ll be attending the keynote (so that’s why Larry will do a second one 🙂 ) and then we’ll hopefully know more.


What I know now is that it will come in same elastic configurations as the current Intel based exadata’s

Anyhow … To be continued!


Database psu patch july 2016: cannot find -lodbcinst

Database psu patch july 2016: cannot find -lodbcinst

It’s patching time again. So on one of our test systems we gave the july 2016 bundle a go. It’s a simple system, just a plain database with the april bundle applied. No grid infrastructure, no asm, just a plain simple database system.

The sequence is the same as always. Unzipping, conflict check, nothing new. In our case, no conflicts were found so the next step is opatch apply.

All went good until a certain point the make command failed on:

Make failed to invoke "/usr/bin/make -f isqora 
   ORACLE_HOME=/u01/app/oracle/product/"....'/usr/bin/ld: cannot find -lodbcinst
collect2: error: ld returned 1 exit status
make: *** [/u01/app/oracle/product/] Error 1
The following make actions have failed :
Re-link fails on target "isqora".

This doesn’t look good.
The good thing is that opatch creates a backup and it’s pretty easy to restore it. It just tells you how to do it.

In the meanwhile there is already a mos-note: New DocumentMake Failed To Invoke “/usr/bin/make -f isqora” ‘/usr/bin/ld: cannot find -lodbcinst for While Applying Patch 23054246 (Doc ID 2163593.1)

To save you some time from reading it, the summary is simple. This error comes from the unixODBC package which is not installed on the system.
after installing the x86_64 and i686 version, opatch succeeded successfully.

What’s odd is that if we check the prerequisite packages for eg RHEL in following mos-note: Requirements for Installing Oracle Database 12.1 on RHEL6 or OL6 64-bit (x86-64) (Doc ID 1529864.1) it does not show any indication that this package is mandatory.

For general information about the install notes, this mos-note is useful as well: Master Note of Linux OS Requirements for Database Server (Doc ID 851598.1)

I checked some linux versions for 12c database prerequisite packages, but no luck. No reference found to unixODBC being mandatory now.

I decided to install a clean OEL version (an older image of OEL67 which was the first available I had) and then I used the preinstall rpm coming from the public-yum from oracle.
It’s stunning that in the official rpm does not include the new mandatory rpm’s.

[root@oel67 ~]# rpm -aq |grep -i rdbms
[root@oel67 ~]# rpm -qa |grep -i unixodbc
[root@oel67 ~]#

So conclusion, if you are about to install a new system, don’t forget to install the unixodbc binaries as well.

As always, questions, remarks? find me on twitter @vanpupi

Acfs: it’s all about permissions

Acfs: it’s all about permissions

It all starts with creation of a database on a Database appliance which failed with the error

Validation of server pool succeeded.
Registering database with Oracle Restart
PRCR-1006 : Failed to add resource ora.demodb.db for demodb
PRCR-1071 : Failed to register or update resource ora.demodb.db
CRS-2566: User 'oracle' does not have sufficient permissions to operate on resource 'ora.redo.datastore.acfs', which is part of the dependency specification.
DBCA_PROGRESS : DBCA Operation failed.


One of the things … is it due to running on the ODA or is it a general cluster issue?
It was easy to verify as this customer had another ODA on which everything just works smoothly. So we started to compare the environments. One tiny little thing appeared to be different: the ACL.

On a working ODA:

[grid@ODA_A-1 ~]$ crsctl status resource ora.redo.datastore.acfs -p |grep ACL
[grid@ODA_A-1 ~]$ 


On this one:

[grid@ODA_B-1 ~]$ crsctl status resource ora.redo.datastore.acfs -p|grep ACL
[grid@ODA_B-1 ~]$ 

Sooo there we have it.
The first intention to do is to do a crsctl modify or a crsctl setperm.
Let’s switch to a demo system as this is acfs and not oda related.

So it’s playtime!
On the demo environment we have an acfs volume:

[root@demo-rac12-01 ~]# crsctl status resource ora.dg_advm.advmvol01.acfs
STATE=ONLINE on demo-rac12-01, ONLINE on demo-rac12-02, ONLINE on demo-rac12-03

[root@demo-rac12-01 ~]#

If we verify the ACL we see the same configuration as on the ODA:

[root@demo-rac12-01 ~]# crsctl status resource ora.dg_advm.advmvol01.acfs -p |grep ACL
[root@demo-rac12-01 ~]#

Yes I know, I did this as root and you could get this information as grid as well.
So let’s do the instinctive thing and try to modify the resource:

[root@demo-rac12-01 ~]# crsctl modify resource ora.dg_advm.advmvol01.acfs -attr "ACL='owner:root:rwx,pgrp:root:r-x,other::r--,user:oracle:r-x'"
CRS-4995:  The command 'Modify  resource' is invalid in crsctl. Use srvctl for this command.
[root@demo-rac12-01 ~]#

And now we have to be careful with googling things. If you start googling this error, you will find several pages suggesting to use the -unsupported flag. But there is no reason to do so 🙂
By the way, this same errors is thrown to you if you try to crsctl setperm.

Let’s assume the cluster is right (he mostly is), then a srvctl modify must exist and indeed there is!

[root@demo-rac12-01 ~]# srvctl modify filesystem -h

Modifies the configuration for the file system.

Usage: srvctl modify filesystem -device <volume_device> [-user {[/+ | /-]<user> | <user_list>}] [-path <mountpoint_path>] [-node <node_list> | -serverpool <serverpool_list>] [-fsoptions <options>] [-description <description>] [-autostart {ALWAYS|NEVER|RESTORE}] [-force]
-device <volume_device> Volume device path
-user <user>|<user_list> Add (/+) or remove (/-) a single user, or replace the entire set of users (with a comma-separated list) authorized to mount and unmount the file system
-path <mountpoint_path> Mountpoint path
-node <node_list> Comma separated node names
-serverpool <serverpool_list> Comma separated list of server pool names
-fsoptions <fs_options> Comma separated list of file system mount options
-description <description> File system description
-autostart {ALWAYS|NEVER|RESTORE} File system autostart policy
-force Force modification (ignore dependencies)
-help Print usage
[root@demo-rac12-01 ~]#

So it seems we need to find out which device we’re using. This is simple:

[root@demo-rac12-01 ~]# crsctl status resource ora.dg_advm.advmvol01.acfs -p |grep VOLUME_DEVICE
[root@demo-rac12-01 ~]#

There we have it. So now it ‘s just syntax. Remember the difference in ACL, so we need to add user:oracle:r-x and sometimes we’re lucky, it’s not too hard.

[root@demo-rac12-01 ~]# /u01/app/ status resource ora.dg_advm.advmvol01.acfs -p |grep -i acl
[root@demo-rac12-01 ~]# /u01/app/ modify filesystem -device /dev/asm/advmvol01-438 -user /+oracle
[root@demo-rac12-01 ~]# /u01/app/ status resource ora.dg_advm.advmvol01.acfs -p |grep -i acl
[root@demo-rac12-01 ~]# 

Removing it, isn’t too hard either:

[root@demo-rac12-01 ~]# /u01/app/ modify filesystem -device /dev/asm/advmvol01-438 -user /-oracle
[root@demo-rac12-01 ~]# /u01/app/ status resource ora.dg_advm.advmvol01.acfs -p |grep -i acl
[root@demo-rac12-01 ~]#


As always, questions, remarks? find me on twitter @vanpupi

Oracle secure backup. It DOES work on windows

Oracle secure backup. It DOES work on windows

A while ago I was asked to implement a filesystem backup on a windows server. How hard could it be and basically it’s not too difficult. Only one minor thing is not too well documented and I would like to highlight this here.

In this particular setup the service was running under the local system account. Personally I would like to see it under a local user account.

In order to be able to perform a succesfull filesystem backup, we need to teach oracle secure backup how to log on to this system.

Two methods can be chosen.

  • adapt the current configured admin user
  • create an extra user for the windows filesystem backups

In this case the second option was chosen for clarity to split the windows filesystem backups from the linux ones. It’s a choice.



And in the users screen click “add”.

Choose a username and enter a password and change “NDMP server user” from yes to “no” and click “Apply”

You will be redirected to following screen:


2 buttons at the top/bottom are needed now.

First choose the windows-domains button and you see the default:


In this case we don’t have a domain account, so we need to teach him to use the local administrator account:


Domain name is the hostname of the windows guest and the Administrator is the local administrator and the password is the password for the local administrator.

Then click add and go back to the user configuration.

Click on the “Preauthorized Access” button and edit accordingly



Then it’s just configuring this client as you would configure another one.

It took me some windows-like thinking while I was expecting this to be in the documentation.


As always, questions, remarks? find me on twitter @vanpupi