And so is Oracle SQL Developer Data Modeler 4.0...
And so is Oracle SQL Developer Data Modeler 4.0…

A new version of Oracle SQL Developer has been officially released. Oracle developers, DBAs, and data professionals will find that v4.0 is perhaps our best release yet.

Of course, we always say that πŸ™‚

So here’s 10 reasons to go upgrade.

10. Version 3.2 is more than a year old.

Version 3.2 was released last November. Tens of thousands (maybe more!) of man and woman-hours have gone into the making of version 4.

9. New framework and updated look and feel.

The code ‘under the covers’ has been greatly improved. Some java developer feature favorites from Netbeans have been integrated, and the JDeveloper team has put in some nice improvements when it comes to working with core editor features like search and replace and the editors.

8. GIT

Integrated GIT support. So now you have the option to running with Subversion or GIT out of the box with SQL Developer.

7. Reports are brand new.

If you liked reports before, you’re going to love them now. Faster editors, preview your reports while you design them, and many many more charting options.

6. New Command Line Interface

Like a report? Want to have it run from a batch script? Now you can do that.

5. Finding stuff in the database is that much easier.

The Find DB Object feature has been greatly enhanced. It also now has it’s own main toolbar button, and a new editor keyboard shortcut, ALT+G. Select some text, say ‘DEPARTMENT’ in an editor and try it now. Way cool stuff.

4. Java 7

Java 6 was getting a little long in the tooth. We now officially support Java 7. Our Early Adopter users have been telling us the application is running better and more efficiently than before.

3. Better Connection Management

You can color code your connections now. When opening a new worksheet or report that requires a connection, existing live connections are defaulted to the top. Reconnecting ‘orphaned’ connections should be more reliable.

2. Lots and lots of dead bugs.

We love killing bugs. We killed a bunch of them in the past 18 months or so. It’s bad that they existed in the first place, but we are human after all. Will there be bugs in this version? Yes, but I think way fewer than otherwise – thanks again to our thousands of beta testers who downloaded the Early Adopters and provided feedback. They made v4.0 a much more robust release.

1. Get a leg up on the competition.

It’s the end of the year. Time for budget planning for 2014 and beyond. Be that person who shows initiative, provides value to the team, and helps make everyone that much stronger. I think Oracle SQL Developer version 4.0 provides such a boost to productivity over v3.2 and previous versions, that you have an opportunity to use this as a way to differentiate yourself.

0. Bonus: New Integrated Support for Oracle Diagnostics Pack.

Under the DBA tree, the performance node gives you access to ASH, ASWR, ADDM, your snaphots, baselines, and more!

I didn’t want to turn this post into link bait, but I will leave you with this – all of my new 4.0 feature posts.


I'm a Distinguished Product Manager at Oracle. My mission is to help you and your company be more efficient with our database tools.


  1. Jeff,

    I started using Data model feature of SQL developer 4.0 and suddenly now when I try to open data model project or click on browse data model, CPU utilization goes to 100% and the memory usage is 1GB.. After 30 mins also, I don’t data mode browser.. Is there any configuration where I can change to increase the performance?

    • Yes, you can give the JVM much more memory when working with larger designs. For very large designs you might want to set the jvm to have as much as 3 or 4GB of RAM.

  2. Alejandro Rodriguez Reply

    Top reason NOT to upgrade:

    Doesn’t work in Windows 7

  3. Hi,

    It’s seems that it’s still not possible to edit a field with 4.0.13 ? The pen is there, a form open but no way to modify it ?

    • Olivier,

      What exactly are you trying to edit? Table or view data? What is the datatype?


    • I’ll pass along your compliment to the development team – thanks for the positive feedback!

  4. Kirk Spence Reply

    Never mind, Jeff. Figured it out. Please delete my original e-mail.



  5. Kirk Spence Reply

    Great site, Jeff. Many thanks.

    Was wondering if there is a way to document a PL/SQL package itself, and its global entities like variables, constants, types, exceptions, etc., that would be recognized and published by DB Doc? I’d like to document those items, in addition to the public modules comprising the package.

  6. I managed to hang the session by canceling the task again. This time I was prepared and had a duplicate connection which let me open a session report. So, that hanged session was actually marked “inactive”, nothing was in the longops, and the only thing I found interesting was this only record in the “waits” tab:
    SQL*Net break/reset to client 1952673792 0

    I went to our DBA to monitor the session “deeper”; going by resource consumption (huge nonstop IO), the query failed to cancel and continued the sequential reading, and cancel operation waited for it to finish.

    That’s where my knowledge ends, sadly. I have no idea whether DB or SQLDev is at fault. Sometimes query cancels just fine, sometimes it hangs like that. Our DB version is, if that’s of any help. Any directions/tips would be greatly appreciated; thank you in advance.

    • Quick update: disregard the “nonstop IO” part; the session waits on “Application” for last half-an-hour, meaning (probably) that “SQL*Net break/reset to client” just waits for a reply from SQLDev.

    • Try activating the OCI thick connection support in SQL Developer. There’s better listening points in the database over OCI than straight JDBC. You already know this, but 10gR2 is already quite old, and you should probably at least be on…

    • Thank you, switching to OCI actually helped!
      The only thing I’m concerned about now is the implications of using OCI. Could you point me to some article explaining the difference between the current implementations, or just explain it? Will one or another be slower/more buggy/more feature rich?

      Also, I have found some differences in the process of work when query hangs and when it doesn’t; I’ll investigate some more and post a bug report to the forums. Hopefully our DBA will not kill me for my experiments before it happens πŸ™‚

  7. Nevermind my question about colors, found it myself.
    For anyone else dissatisfied with default IDE colors: take a look into ide/themes/FusionBlue.jar, you can modify it to your liking.

    P.S. Sorry for being such a pain earlier, but I like SQLDev and want to make it better, and the best (or only?) way to do that is to continuously bug the developer team with complaints and suggestions, don’t you agree? πŸ™‚

  8. (Let me continue here, it becomes hard to read)
    >I could ask you why you don’t use a WHERE clause to limit your resultset…

    Well, I want to see last inserted rows. I think that the most “intuitive” course of action is to order the table by column (desc) with three clicks, not to write the query…

    As for hints, I can understand that, but AFAIK /*+ FIRST_ROWS*/ was designed for that specific purpose – to show the “topmost” results as fast as possible, resulting in very responsive interface. Maybe it’s possible to make this into one of the preferences?

    • If you want to see the last inserted rows, use greater than or less than predicated based on your insertion date…the FIRST_ROWS hint works fine in your example, but guess what would happen if the user asked to export the dataset to a text file?

    • But if my inserted date column isn’t indexed (and it isn’t), it would be just as slow as current ordering. That’s why I’m trying to order by sequence-based primary key column, and also to see when last inserts happened. I can’t just assume some random number that’s close to my current sequence value, right? I don’t think I’m the only one who makes such queries.

      >The FIRST_ROWS hint works fine in your example, but guess what would happen if the user asked to export the dataset to a text file?

      Yes, optimize one part and the other falls apart… Is it possible to distinguish whether the user asks to show data immediately or to get the whole result and try to base the hints on that information? I understand that it could turn out to be a difficult task, though…

  9. Hi Jeff,
    just downloaded the production release version Version Build MAIN-13.80 and I see the ASH report viewer and AWR reports are disabled no matter what i do..
    the ADDM snapshots and reports are visible

    Tried the license option, still no avail…. Is this a known issue or have I missed something?

    • Are the ASH Report Viewer and AWR nodes disabled or missing completely?

      The first thing I would try is installing SQL Developer again – extract the ZIP to a brand new directory and see if that fixes it.

      If not, I’ll step you though how to collect DEBUG info – or you can read this for the directions.

    • Pushparaj

      Hi Jeff,
      Sorry I was on vacation for a couple of weeks, couldn’t followup

      ASH Report Viewer and AWR nodes are visible, however when I click through it, the toggle input / generate report / save to file and Open in browser icons are disabled. the Snapshots and ADDM nodes list all snapshots, however there are no snapshots under ASH report viewer and AWR-> AWR Report viewer

    • Pushparaj

      Oh! and I did try extracting the Zip to a brand new directory as you suggested..

  10. Tried it out. The first thing new SQLDev greeted me with was a ton of unknown protocol: sqldev.temp

    exceptions while migrating from an old profile. Good start… Well, connections seem to still be in place, so it’s ok (probably).

    Next, LAFs. It’s pretty disappointing that I no longer have an option to change the theme at least – I don’t like dark blue top menu background, it’s hard to see actual menu text, or package/table names. I understand that new framework discourages changing LAFs, but maybe it’s possible to give more control to users after all, at least in colors and fonts? I loved “classic” theme of “Oracle” LAF in 3.2, can I maybe hack my way through configs to set it again? πŸ™‚

    And bug report regarding LAFs: “GTK+ ” laf refused to show connections with a folowwing exception:

    Failed to load a window
    java.lang.ClassCastException: oracle.dbtools.raptor.navigator.db.impl.ConnectionStoresTreeNode cannot be cast to oracle.ideimpl.explorer.ExplorerNode

    Next, it was a change to the worse. I went to a large table (16 mln rows) to see how SQLDev would perform querying it. UI seems a bit more responsive now, but I hit the same huge problem I had in 3.2. When I hit order by one of the columns, query hung up for good. It was an indexed column, and regular query – like [select * from (select * from tablename order by column) where rownum < 50] – works ligntning-fast, but judging by the popup, sqldev decided to fetch everything first and then order it. Since I don't want it at all, I click on "Cancel task"… and end up with a hung-up connection instead of cancelled query. Now I can't do anything – browse connection objects, open shared worksheets, see execution plans, work with another tables, etc. – nothing. The hung-up query doesn't show up in task progress, so I can't kill it. I can't even disconnect, because connection is busy! Furthermore, I can't even close SQLDeveloper, because connection is still open and can't be closed normally! The only ways out of this deadlock are either to launch another sqldev instance and kill the hung-up session, or to kill the sqldev process in the OS, and let's just say both ways aren't very good. Especially if I had some query written in open worksheets or unsaved changes in the packages. Same thing happened in 3.2 on a regular basis, except that ordering on indexed columns worked as fast as it should, and that connection reported that it's busy right away, not forcing me to wait for 15 seconds or so. Even
    more (it still gets worse, yes, I have a tester's blood πŸ™‚ ), when I tried to "find database objects" and selected the hung-up connection from the list, it hanged up my DE instead of simply adding search to the task list. I mean it – EVERYTHING stopped responding. I had to hop to the console and terminate SQLDev process from there to continue writing this post.

    So, maybe I'm doing something wrong, and "cancel task" is actually supposed to cancel the query, and not hang the connection? I hoped so much that it was a bug fixed in 4.0, but maybe problem's on my side…?

    Now, on a bright side. I LOVE the pl/sql editor improvements. Breadcrumbs(FINALLY!!!), insta-highlight on doubleclick, all the source functions in context menu, working variable renaming (incredibly useful when maintaining the debris-like sources of my predecessors), spec-body jumps, spec/body synchronization, even * expansion in cursors! It's really awesome! Still no "%rowtype" highlighting, nor child member insight for rowtype/cursor variables, though. If SQLDev supported insight for complex rowtype/cursor variables, I could work without any distractions now. Hopefully dev team is onto it.

    …OK, that was a long comment with a few questions. Can I get at least some of them answered, please? πŸ™‚ Along with a last question – I probably can come up with quite a few bug reports if I start actively using 4.0 since next Monday – where should I post them so they are more likely to be noticed by the dev team, and where should I search to see if such things already were reported? Thanks in advance.

    • The framework we use deprecated the alternative skins in the Look and Feel department. It was either stay on the out of date framework and keep the themes, or upgrade and lose the themes. We are looking at adding support for more Java Swing Look and Feel setups though – so stay tuned.

      Bugs can ALWAYS be reported via My Oracle Support. Or, you can post a thread on the OTN Forums for SQL Developer. We do our best to monitor the Forums and response appropriately. For formal bug responses, you should always engage with Support.

      We don’t fetch and sort – we re-run the query with a new Order By. We NEVER sort on the client. Now, for a test I tried this with SH.SALES. I asked for a DESC sort on CUST_ID. I waited a few moments and was able to cancel the request successfully. Can you tell me about table you are working with? How many rows does it have for example? Can you try this also with SH.SALES just to see if you have the same issue?

    • I remember you said that about LAF skins in some earlier posts as well, but still… Is there really absolutely no way I can change the dark-blue background color? I’m fine with modifying and/or recompiling the resource files if necessary. I like the new features too much to go back to 3.2, but my eyes hurt (not exaggerating). It’s a tough choice πŸ™

      Got it about support, thanks.

      Now, about that “problem” table. It’s VERY large, 16,000,000+ rows and still growing. The column I’m sorting on is a first column in a 2-column primary key. If I execute the query “normally” in the worksheet, e.g. [select * from (select * from tablename order by column) where rownum < 50], it runs fast and smooth.
      There is another table like that, not as large (about 2M records, if I remember correctly), which also hanged on sort by indexed column, but I was able to cancel the task successfully.
      Other tables, that are not as large, seem to run sorting just fine. We have a few more large tables, but today I didn't have time to play around breaking by primary work tool πŸ™‚
      I am willing to provide any feedback necessary to help you determine the cause. I run SQLDev Debian 6.5 x64, using jdk7 downloaded from Oracle website. If I run the from the console, it shows no exceptions or any other output when connection hanged on ordering, or when I tried to cancel the task unsuccessfully.

    • What happens if you take the rownum < 50 out...cause we don't use that. Check the explain plans between the 2, you might be surprised.

    • Well… full-scan happens, obviously. I’m away from work so I can’t test it now, but I know that much. But if I use ordering on table, I want to see just the first rows 90% of time; why don’t you use /*+ FIRST_ROWS(100) */ or something like that? Granted, if I decide to scroll down to millionth row it’ll be slower than without the hint, but something is wrong with my head if I scroll down to millionth row after ordering πŸ™‚

    • I could ask you why you don’t use a WHERE clause to limit your resultset…we give you what you ask for. We don’t use hints in our queries, we let the optimizer choose the best path.

  11. There is something highly annoying that hasn’t been fixed in this new version, or there is something that I am not getting: I have to deal with database connections that are interrupted every now and then, and when I try to reconnect to it using right click in the connection and disconnect or reconnect, it would try to do it in the Swing event thread (the pop up won’t go away). The sqldeveloper then becomes unusable for minutes until the connection error message appears.

    It is obviously wrong to run blocking code in the Swing event thread, but ΒΏis there something I can do to set the timeout higher so the wait time is tolerable (say 5 seconds)?

  12. Marcel Lasaj Reply

    Hey gz on the release.
    Could you please implement ALT+C for Block Selection mode? Or at least customizable keyboard shortcuts.

  13. Jeffrey Kemp Reply

    Downloaded and tried. It successfully brought my settings and connections across, but then when I tried to connect to a database that was not responding, it hung. I had to kill it; and now when I open it, all the passwords have been lost. Not a huge deal but rather inconvenient.

    • You didn’t get a timeout for the ‘bad’ connection? How long did you wait before killing the process? (Not that I blame you!)

      If you wipe out the application settings folder/directory for the 4 install, and run the exe again, it should re-prompt/copy over the settings and connections with passwords.

  14. Awesome! Congratulations on the release, gotta try it out tomorrow. Now I even don’t feel so bad for working on a weekend πŸ™‚

    One question before I start, though: can I disable the extensions without breaking things now?

    • Probably πŸ™‚

      We found quite a few instances of features being cross-contaminated in extensions when they should have been in the main project…best example is probably disabling extension broke drag and drop from the tree to a worksheet.

      Where we found these, we fixed them.

      Does that mean it’s perfect now? Probably not. But if and when we find them, we’ll fix it.

  15. SpaghettiPLSQL Reply

    Hi Jeff!
    I can’t enable/disable breakpoints (for debug) with the SQLDeveloper v4.
    The package is already recompiled for debug and the debugger works correctly in SQLDeveloper v3.
    Any suggestions ?

    • I just tried and it works for me, what happens when you try to disable an existing breakpoint? I’m right-clicking on the breakpoint indicator in the gutter.

    • SpaghettiPLSQL

      I tried from a different host (Oralce Linux 6.5) and it works perfectly. Still I can’t figure out why it doesn’t work on Win 7.
      Thank you anyway.

  16. This 4.0 version is much better than 3.2.
    I would like to emphasize (among other nice stuff) better performance, stability and better PL/SQL editor.

    Great work !! πŸ™‚


Write A Comment