Story of my iPhone(s)

If you follow me on twitter or see me in day-to-day life you know I had “some” problems with my iPhone5. But I did not want to upgrade to iPhone6, I rather waited for iPhone7. Just to give you an idea briefly: the battery needed to be recharged 4-5 times per day (42% meant that no point trying to use Sports Tracker or see your emails too often, the phone will die in less than an hour), the phone gets hot every now and then, the Wi-Fi was not working well and those problems forced me to reboot the phone at least 2-3 times a day and so on. I am sure you already understand how frustrated I was…

A bit more than a month ago one evening my iPhone stopped working, totally. I was just about to go to the gym but… I need my phone in my work so an option not having a phone tomorrow was not an option and going to gym without being able to use Sports Tracker…no… So I really had no other option but to try to recover the phone…

I was really lucky: I had a backup from that morning. The backup was in our office and I was at home so the first thing was to drive to the office and find the backup. Then the recovery started. It was reaaaally slow. By the estimation of iTunes I knew it will take hours… I decided to go for a run while it is recovering. I was wearing my iWatch for the run. It took me 7 hours to complete the recovery (not the run😀 ). It was early in the morning when I finally had my iPhone working again (thank you, thank you, I was so happy about it) and then the phone decided to reset my watch and update the data. What I learned during this exercise was that the phone is the master and the watch is the slave. What does that mean? My running was gone! Like I never run. The watch never had a chance to tell the phone about my run before the phone erased my watch.

But never mind, everything else was recovered and I had my phone and watch working again. I was really tired in the office, but happy🙂

I was in San Francisco when the new iPhone came out but immediately heard they run out from the stock. I did not want to wait anymore so I told my elder son to order me one to home. It took several weeks (4?) to arrive and of course it arrived while I was travelling in Poland. When I returned home I was too busy to start setting up the new phone, especially since I already learned it is not a job I can do in a minute… Last evening (during a meeting) I decided it is the time to start using the new phone…

Just a note: I had three top level IT experts in the room (one dba and two developers) plus my elder son who is very smart with technology so please do not even think for a second “there you see when a woman is trying to be technical”…

First I plugged the phone to my computer (which had the backup of my previous phone). The iTunes told me the iTunes version I have is too old for my new phone and must be updated. Ok, let’s update. After a while it tells me the signature for iTunes is faulty and therefore it cannot be updated. What next? Google. The advice I found was simply install the new version, do not update. Ok, I did that. Now the iTunes is saying “cannot connect to Heli’s iPhone5”. What? Why do you want to connect to iPhone5? The sim is already on the new one and the new phone is connected to iTunes, the backup should be in this computer. Think! OK, got it, the screen of the iPhone7 is locked (insert the pin) and iTunes calls it Heli’s iPhone5 because of the backup. Here we go, backup restored in not too long. But what about my iWatch? It looks happy and working but no messages showing up on the screen. Yeah right you need to pair it with the new phone. But how to do it?

We all try but we have no idea how to do it. Google. Then I understand I must reset the watch (that is scary, it tells me that all the data will be gone but I already learned it last time that the data on my watch is useless and the phone always wins so ok) and do the pairing. Next thing (surprise) is that the phone tells me the software on my watch is too old and must be updated. Ok, do it. I wait, I wait, I wait… I finally go to bed.

Now it’s the next morning and it is still not ready. I started the pairing again…

This morning I was luckier than Mark Rittman ( I was able to have my coffee, oatmeal and rye-bread while waiting for my “iThings” to start working. I was able to read my emails and follow social media with my laptop. So I really cannot complain, except that I do not have an extra 2h in a morning for this. I remember the times when the phones just worked and starting to use a new phone was easy. I miss those days! I solve technical problems as part of my work but I DO NOT WANT to solve problems with my phone or my watch. I simply want them to work…

Now, 2h later, my phone says it is not able to find updates for the watch and asks me to start over… Great! Have a wonderful day! I might continue in the evening or I might stop using my iWatch…let’s see…



P.S. I do not give up easily…trying one more time. The error message was not an error message but saying all is good now and you can start pairing your phone and watch. At least I hope so… Dear Apple, please work on your wording, you make our life very hard now. Missleading error messages are a pain! I left home too late because of this mess but with both the phone and the watch, and both working.

Comparing, Part 1: A database to a database

I am writing a serie of posts about different compares: comparing databases and comparing database designs. The possibility to automatically compare different versions of the database or a design is very crutial to have good quality designs and databases.

This first post is about comparing two databases. Maybe the production and the test?

If I want to compare two databases to each other, I use SQL Developer and the Database Diff functionality you can find under Tools menu.


First select the Source Connection and the Target Connection and select the parameters the way you want.


Press Next (In Finnish that is Seuraava🙂 , see SQL Developer even speaks Finnish :-D) )

Select the database object to be compared and press Next:


You can specify objects:


Or select all by just pressing Next.

You can see what will be compared and what will not:


If you are happy with it just press OK, otherwice press Back and change your parameters.

In the Diff Report you can see in green all the new objects and in yellow all the objects that has been changes. If you select an object from the list you can see the exact change:


And if you select the Script tab you can see the DDL script to make that change to your target database:


Do you think this is a feature you should be using?😀

OTN Appreciation Day: Constraints

My favourite feature in a database is constraints: Primary Key, Foreign Key, Unique Key, Not NULL, etc.

Why? Because I like to have good quality data in my databases! The only way to have a good quality data is to design the databases and use constraints whenever possible.

To avoid duplicate data I use Primary Key and Unique Key Constraints, to avoid orphan records in child tables I use Foreign Key Constraints and to avoid data nobody can understand (NULLs!) I use Not NULL constraints. I can also define CHECK constraints to define a condition for each row in the table, the data is not accepted to the table unless it meets the criteria defined in a constraint. A simple example of a CHECK Constraint would be a list of values for a column, for example each row must have either “Yes” or “No” as a value for the column. A CHECK constraint can only be defined for columns in one table, not columns in several tables nor all the data in a table. What we do not have yet is a “CHECK constraint for several tables at a time”, “CHECK constraint for a whole table” or “CHECK constraint for the whole database”. This kind of constraint is called an assertion. If you want to vote for this important feature to be implemented in Oracle database, just go and vote: !

These are just examples of a great feature. The database will look after the data quality for me, while I do more interesting things…

— Heli


Last night I returned from the POUG event in Poland. It was a two day event in Warsaw. This was their first international event with plenty of globally known speakers. It definitely was a great two days! The event started with a speakers’ dinner on Thursday evening. On Friday morning some of us were feeling better than others  :-)  I was smart enough to skip the “Warsaw sightseeing” (read “bar tour”) organized by Kamil 😀

BTW I learned that a tringle means Mens’ and this symbol:


Is the symbol for Ladies’…almost took the wrong door…

During the event I spoke about my TOP 10 favourite features of SQL Developer and explained how to manage the changes in database structures using SQL Developer Data Modeler. And finally I remembered to take a photo of my audience:


Poland is a great place to speak! The people are smart and they want to learn. And the athmosphere in the conference was very warm and comfortable. Sabine, Arne and I decided the official color of the event is red.


In the morning I did not feel like wearing red:


But by lunch time I felt the pressure so strong I needed to go and change 😀 :


And on Saturday I already knew how to dress up 😀 :


Friday evening was superfun! We had the after party in a restaurant where an amazing band of pirates was playing interesting instruments:


An excellent event and I am so happy to see Polish user group so active! Congratulations! Well done! As one of the two ambassadors for EMEA user groups I am so happy I was able to attend and be part of this new phase of one of our user groups. Thank you for inviting me POUG! Thank you OTN and the ACE Program for your support! The community is growing!

What’s new in Data Modeler 4.2EA? Part 9: End of the serie

This is the last post of my What’s new in Data Modeler 4.2EA posts. What else is new is the integration to Subversion, there are some big changes. I will not go to details yet (will do it when the official 4.2 is out) but just a reminder: do not use several versions of Data Modeler to update your designs simultaneously, just select one version and use that. It is the same rule you probably follow with other software products too.

I hope this serie has been useful to you. I already have an idea about the next serie, stay tuned🙂


Domain Names in a diagram

I want to see the domain name in the logical diagram instead of the datatype. How can I do it?

Go to Design Properties (either double-click the design name or right-click and select Properties). Go to Settings, Diagram, Logical Model and select Domain Name for the Domain presentation:



See the datatype for Name before the change (Used Logical Type selected):



And after we changed the Domain presentation to Domain Name (the domain used for the attribute Name is called NameDomain in our example):





What’s new in Data Modeler 4.2EA? Part 8: Group objects by schema

There is one more Preference left we have not discussed about: Group objects by schema.


Here are the TOCs of two PDF reports on the same design:


On the left hand side there is the report where the preference is set on and on the right it has been set off. If the preference has been set the TOC will show the elements in groups based on the schema owner if it has been set off the elements are shown in alphabetical order.


What’s new in Data Modeler 4.2EA? Part 7: Embed diagrams (HTML&PDF)

A really great new feature in this release is the possibility to add diagrams in a report AND navigate from the object in a diagram to the detail section in a report.



Just set the Preference Embed diagrams (HTML&PDF) on.

In this release there are still some limitations/issues on this functionality but in the next release Data Modeler will allow you to add diagrams in PDF reports to both entity and table reports and in HTML reports it allows you to add diagrams in table reports.

For instance if I have the Preference on and I execute a PDF report for entities, I will have the diagram in the end of the report:


If I click the name of the entity Loan, it will navigate me to the details of that entity:


There will also be the TOC for a PDF report and if I choose an element from that I will be automatically navigated to the element details on the report:



If I have subviews defined I can also see them in the TOC. If I click the name of a subview I will be automatically navigated to that subview in the report:







What’s new in Data Modeler 4.2EA? Part 6: Include select statement in views reports

The new preference, Include select statement in views reports, for reporting in Data Modeler 4.2EA includes the SQL statement used for the query to the report.


To generate a report on views select Table Views report template:


If the preference has not been set the report would look something like this:


And if it has been set it might look something like this:


The report will show the SQL statement for the view in the new Select Statement field in a report template for Table Views.



What’s new in Data Modeler 4.2EA? Part 5: Generate HTML report TOC in separate file

In Data Modeler 4.2EA there are some new preferences for reporting. Let’s first see the new preference Generate HTML report TOC in separate file.


This preference ONLY affects reports generated in HTML format.

This does not affect the generated report itself: it looks the same does not matter if you chose this preference or not. But it does affect to the files generated for the report. In our example a report generated without this preference only has one file: in our example AllTablesDetails_NoSeparateTOC.html. Whereas the report with this preference on has three files: AllTablesDetails_SeparateTOC.html, AllTablesDetails_SeparateTOC_index.html and AllTablesDetails_SeparateTOC_toc.html.


Note that whenever we generate a report with Data Modeler (no matter how we chose the preferences) also a file report_data.xml is generated.

Why would I like to get the TOC in separate file? While the TOC is in separate file I can for example browse the report without the TOC or print the report.