Feed aggregator

My SLOB IO testing index

OraNA :: Oracle News Aggregator - 43 min 47 sec ago
Martin Berger suggested to create this page to keep track of blog posts related SLOB IO testing. Here it is Martin ;) If you seriously interested to get a good understanding of yours IO subsystem performance characteristics then one of the tools that you may consider for putting your’s system IO on stress is SLOB. See Introducing SLOB [...]


Oracle Linux components

OraNA :: Oracle News Aggregator - 54 min 31 sec ago
A few weeks ago I was visiting a customer where we were discussing Oracle Linux and Oracle VM advantages compared to some of our competitors. One of the comments from the customer at one point in the discussion was "And you get -all that- for just -$that-?"... Why, yes, you do, sir. I wanted to take the opportunity to list some of the included advantages of having Oracle Linux support. Next time I will do the same for Oracle VM.

Oracle Linux is a complete enterprise Linux solution available from Oracle. In fact, it is, we firmly believe, the best enterprise Linux solution available. Both for generic use of Linux and in particular and especially when using any Oracle product on top. It's important to remember that Oracle Linux is not just for running Oracle products on top of Linux. Oracle Linux is a complete generic Linux distribution that's fully supported underneath any Linux application. There are no restrictions from our end as to what you can run on it (as long as they're apps built to run of course). You can run 3rd party Linux applications just fine, use it as an NFS server or as a webserver or whatever you want to use the system for. Many customers I talk to somehow believe that it's unique for Oracle products and I have to point out that while we have great, unique advantages and extra benefits running Oracle products on Oracle Linux, it's certainly not in anyway restricted for that. It's the opposite, all you needs is Oracle Linux for any and every Linux server in house.

Why the best, you ask? Well, we do an incredibly amount of testing on a daily basis (1000's of servers run various types of QA on Oracle Linux amounting to over 100,000 hours of QA happening every single day), we have a huge amount of internal use as consumers (end-user/customer use), we have many years of experience helping enterprise customers in general and extend that down to Operating System support, we can scale using the greater Oracle infrastructure, etc.

The support team is a large group of dedicated professionals globally that are trained to handle serious issues, deal with mission critical environments and cases, know their product, have a focus on server use first and foremost, understand, in particular also the other products around it enough to be able to understand that ASM doesn't stand for -assembler language- (in our customer-base) but stands for automatic storage management. (you laugh? I can assure you it's not a joke) A single phone call, if a database problem is an OS issue, no worries, we deal with it internally, no need to go call someone else that might think a database is a dirty word, or someone that 's an expert in gnome (no offense) but not quite in a complex environment where you have a product use 50GB of RAM and has 2000 processes running and is doing massive amounts of IO and woops something is going wrong. "Reboot?" doesn't cut it.

When we do Linux development, the focus is basically on two things. 1) find ways to enhance Linux to run our products better, ways that are generic, and also help other applications. A database does disk/network IO, lots of processes, lots of memory access, if we make our product run better, others also benefit... 2) help make Linux a better OS. improve stability, help add features that an OS needs, unrelated to our own product stack but important for customers to run the operating system, no matter what application. Having access to in-house hardware such as very big x64 servers like the x4800 (4TB ram, 160 threads) and TB and TB of storage allows us to test things at very, very large scale. Offering the Unbreakable Enterprise Kernel(UEK) as part of Oracle Linux alongside what we call the Red Hat-Compatible kernel gives us the ability to provide current, modern, tested code to customers without reducing reliable and availability.

A CTO of another company a little while back implied on twitter that UEK is too current and reduces reliability because the code is new. Can I point something out here? One thing we decided to do, with UEK, was to not backport features from new kernels. The goal is to stay close (but not too close as we don't ship a development tree) to the "Linus kernel" and focus on testing the heck out of it and fixing any bug that we would find, any regression.. This is good for the Linux community because when we do find a problem, we fix it and it's immediately also relevant to the mainline kernel. So this helps us and the kernel community. It's a symbiotic relationship. The alternative : take a version of Linux that's 3 years old and take code from a more or less current version, after 100's of 1000's of lines of code changes and architectural changes have happened, and make that new code, somehow work in the old tree. The result : old patched up, totally unique code. Someone spending all their time retrofitting complex stuff into an old version. Testing is unique, bugs found are mostly only relevant in that version and not so much in newer versions unless they're greater design bugs or one liners. No one else really ever tested it because, well, it's unique, no other company is providing that seriously forked kernel that has 1+M of lines of differences. Somehow, I prefer our approach. At least the folks at SuSE seem to believe the same.

One advantage we have with our kernel is that we made it possible to install in an existing Oracle Linux 5 environment and you are not required to move to Oracle Linux 6 to get the benefit of new kernel features and new drivers and new performance benefits. Moving from one major version to the next is a very costly effort because you basically always end up doing a re-imaging of the servers. Most customers are driven to new major releases for a hardware refresh. We don't require you to do that, you can run both OL5 and OL6, your choice, your timeframe. You can reboot between 2.6.18 and 2.6.32 or even 2.6.39 (3.0.24) without problem, at any time.

The complete source code for Oracle Linux is available from oss.oracle.com (OL5 or OL6). The source code for our UEK and UEK2 kernels is available in a public GIT repository (UEK 2.6.32 or UEK2 2.6.39. Don't worry, it's not just a tar file and you don't have to go browse webpages behind a userid/password to figure out what all changed and try to piece it together yourself. It's all there, both the mainline kernel changelog and our changes on top. Transparent.

The binaries for Oracle Linux are available from edelivery in the form of ISO images of the installable DVDs for the major releases and all the update releases (OL5.1...5.8, OL6, OL6.1, OL6.2 etc). You are not required to first get a support subscription, you can just go and download the software, no activation keys, no trial period, production use OK, distribute to your friends? no problem, no need to remove logos. Errata/bug updates are available through ULN (ULN is our Oracle Linux customer portal where we have extra channels with extra software bits for subscribers, or from public yum (public yum is an open, free, no registration, no subscription site). All Oracle Linux errata/packages are published on both sites at the same time. If you have a set of servers where support is not needed, just a standard Oracle Linux, and then a set of servers where you do need support because they're production systems etc, you can install OL on both and you subscribe for the systems you need to have support for. One distribution installed across the entire company. No need to find a free distribution and a pay to use distribution. If you no longer need support services for a system, don't worry, we won't ask you to de-install.

But wait, there's more..

How about managing Oracle Linux... well, included in Oracle Linux support subscriptions, is the use of Oracle Enterprise Manager 12c and Oracle Enterprise Manager OpsCenter 12. This is management software that can handle 1000's of servers from a single managed web-based interface. It offers features like :

  • bare-metal provisioning of Oracle Linux servers
  • configuration management, collecting and analysis and auditing
  • lights-out or ad hoc patching
  • availability and performance monitoring
  • event management and job systems
  • yum repositories
  • grouping of servers, custom jobs, custom action/corrective action scripts
  • this is all included, for no additional fee. Any server with Oracle Linux support subscriptions include the above. No extra pack, no per server additional fees. Or if you don't really care for that and just want a very simple yum based setup, you can do that as well, just grab the rpms, put them on a server, create a repository and have your servers connect to that. So, very basic and simple, to very complete and comprehensive. Same cost.

    And there is even more...

    Oracle Real Application Clusters makes use of the Oracle Clusterware(CRS). CRS is cluster software that is capable of protecting any kind of application in a failover cluster. Not just Oracle. It is the basis for any clustered environment and provides generic availability eliminating the need for other third party cluster solutions. You can protect your own application using this enterprise grade clustering stack. Without additional fees. It's included in Oracle Linux support subscriptions (basic/premier).. have your own nfs server? webserver? want to monitor it and restart it in a cluster no problem? Go for it. Using the exact same software we use for the most mission critical clustered systems. Want to run Oracle Linux virtualized? 1 guest? 10 guests? 20 guests? You only need one subscription per physical server and we don't charge more if you run 1 or more than 1. And how much for all this?

  • Oracle x86 based systems with Premier support for Systems includes all this, both the Oracle Linux subscription and the use of the management features and Oracle CRS
  • Non-Oracle x86 based systems : 2 socket server $499 for all of the above or 4+ socket server $1199 includes all this, both the Oracle Linux subscription and the use of the management features and Oracle CRS
  • This is 24/7 support, not just office hours. Complete 24/7 support.

    We also have a premier support subscription which adds the ability to use Oracle ksplice technology to apply your kernel security fixes online, while the system is running at full speed, while the applications are running, while the users are working, without downtime. And I mean apply, not just install. The installed fixes are instantly effective at runtime. zero reboots. zero downtime scheduling. zero administrative program/planning management.. Or premier backport support, critical fixes for a specific bug in the specific version of the rpm you run in a mission critical environment. Or lifetime support, now with virtualization more useful than ever before. Virtual hardware can remain the same for much longer than the support lifecycles.

  • Oracle x86 based systems with Premier support for Systems includes all this, both the Oracle Linux subscription and the use of the management features and Oracle ksplice and premier backports and lifetime support
  • Non-Oracle x86 based systems : 2 socket server $1399 for all of the above or 4+ socket server $2299 includes all this, both the Oracle Linux subscription and the use of the management features and Oracle CRS and Oracle ksplice and premier backports and lifetime support
  • See our store for pricing, and our Unbreakable Linux Network site for policies and references to the above.

    Ok there you have it. Almost a novel but we just have that much to offer, and wait 'til I get to Oracle VM.. it just gets even better.


    PeopleSoft Global Payroll integrates with PeopleSoft Cash Management for European Payments

    OraNA :: Oracle News Aggregator - 3 hours 20 min ago
    PeopleSoft announces the much awaited union of two of its very popular products :

    Financial Gateway

    and

    Global Payroll

    To comply with the new Euro zone payments requirements and allow customers to leverage the value of a singular payments platform, PeopleSoft Global Payroll leverages the Financial Gateway, which is part of the Cash Management product within the PeopleSoft Financials suite.

    The Financial Gateway is a robust and flexible payment hub that manages large volumes of payments, in several formats. One of the supported formats is the SEPA Credit Transfer. This solution will make SEPA implementation, compliance and maintenance easier over time, as more Euro zone payments will transition to SEPA rules in the future.

    The SEPA (Single European Payment Area) project is an additional step in the construction of a unified European market, following the creation of the Euro Zone in 1999.The goal is to standardize the payment format used in cross border payments. This provides flexibility, security and reduced costs as well as enabling increased trade and investments in the SEPA area. The SEPA format was introduced in 2008 and will become mandatory for any Euro credit transfer from 2012 onwards. Direct Debit payment messages have also been introduced and will become mandatory in the coming years.

    In order to reduce current and future SEPA changes impact on payroll processing, Oracle has fully leveraged the existing Financial Gateway capabilities to generate payment files and manage interactions with banks, while minimal changes have been implemented in the PeopleSoft Global Payroll product to prepare those payments.

    The first SEPA update delivered by Oracle enables customers to manage:

    • Credit Transfers
    • in Euros
    • complying with general SEPA formatting and rules

    The PeopleSoft Global Payroll product has been integrated with the Cash Management module from the PeopleSoft Financials Suite through PeopleTools Integration Broker 8.51.The PeopleSoft Global Payroll Core banking process prepares all the payment data, while the Financial Gateway feature from the Cash Management product will:

    • Format the payment data based on country Setup
    • Produce the SEPA payment file
    • Interact with the banks to provide for bi-directional, real time communication (send the payment file and receive the response from banks)
    • Send acknowledgements back to Global Payroll

    It is critical to provide audit support in any payment process. To support that effort, the integration between Global Payroll and the Financial Gateway provides the following:

    • A delivered report can be run from PeopleSoft Global Payroll for data validation before publishing data to Financial Gateway.
    • Payment statuses and errors are sent back from Financial Gateway to PeopleSoft Global Payroll, and can be viewed through a new page in a Global Payroll component.


    GV$ Function

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 22:43

    I really thought I’d blogged about this before, but it appears not!

    First of all, this isn’t something I’ve worked out, I’m just recycling something that John Beresniewicz (who seems to be better known as JB) shared during one of his presentations at the UKOUG Conference 2011. This wasn’t a big part of the presentation, but it jumped out at me as a gem of knowledge that I was unlikely to get from anywhere else. In fact, as I recall, John described how he only became aware of the functionality as a result of discussing what he was working on, and the problem he had, to a member of the database server development team at Oracle.

    That nicely brings me to the usual, and very important, point about Oracle functionality that isn’t documented: It is not supported (unless someone from Oracle tells you otherwise).

    So, did you know that as well as the GV$ views in an Oracle database there is a GV$ function?

    Keeping it really simple to start with…

    Selecting INSTANCE_NAME for all instances via GV$INSTANCE

    SQL> select instance_name from gv$instance; INSTANCE_NAME ---------------- ORCL1 ORCL2 SQL>

    Selecting INSTANCE_NAME for all instances via V$INSTANCE with the GV$ Function

    SQL> select instance_name from TABLE(GV$(CURSOR(select instance_name from v$instance))); INSTANCE_NAME ---------------- ORCL1 ORCL2 SQL>

    So, apart from being cool because it’s undocumented, what good is the GV$ function? Well, in the above example it is no use at all apart from allowing you to type more characters and confuse anyone that is looking over your shoulder!

    However, what it is doing is executing the statement in CURSOR( ) on each instance in the cluster database and returning the results to the Query Coordinator (QC) session.

    I don’t remember the specifics of what John was working on, but as I recall the issue was that, on the basis of performance, he didn’t want to retrieve all the relevant rows from two GV$ views in order to join them locally. I’ll try to demonstrate the point below using a join between [G]V$SQL and [G]V$SESSION

    Preparation

    The first step was to execute the same statement a number of times in each of my two instances.

    Having obtained the SQL_ID for the statement the next step was to query the GV$ views in order to get some output – Note this is an artificially simple statement compared with where you would get a major benefit from this approach.

    Querying GV$ Views

    I’ve used autotrace as it’s a nice way to get the statement, results and execution plan without having to type/run too many commands…

    SQL> select se.inst_id 2 , se.sql_id 3 , sq.executions 4 from gv$sql sq 5 , gv$session se 6 where se.sql_id = sq.sql_id 7 and se.inst_id = sq.inst_id 8 and se.sql_id = 'cw1knhbvzvdbf' 9 / INST_ID SQL_ID EXECUTIONS ---------- ------------- ---------- 1 cw1knhbvzvdbf 15 2 cw1knhbvzvdbf 10 Execution Plan ---------------------------------------------------------- Plan hash value: 3376983457 ---------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | ---------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 55 | 1 (100)| 00:00:01 | | | | |* 1 | HASH JOIN | | 1 | 55 | 1 (100)| 00:00:01 | | | | | 2 | PX COORDINATOR | | 1 | 34 | 0 (0)| 00:00:01 | | | | | 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 34 | 0 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) | |* 4 | VIEW | GV$SQL | | | | | Q1,00 | PCWP | | |* 5 | FIXED TABLE FIXED INDEX | X$KGLCURSOR_CHILD (ind:2) | 1 | 34 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 6 | PX COORDINATOR | | 1 | 21 | 0 (0)| 00:00:01 | | | | | 7 | PX SEND QC (RANDOM) | :TQ20000 | 1 | 99 | 0 (0)| 00:00:01 | Q2,00 | P->S | QC (RAND) | |* 8 | VIEW | GV$SESSION | | | | | Q2,00 | PCWP | | | 9 | NESTED LOOPS | | 1 | 99 | 0 (0)| 00:00:01 | Q2,00 | PCWP | | | 10 | NESTED LOOPS | | 1 | 86 | 0 (0)| 00:00:01 | Q2,00 | PCWP | | |* 11 | FIXED TABLE FULL | X$KSUSE | 1 | 60 | 0 (0)| 00:00:01 | Q2,00 | PCWP | | |* 12 | FIXED TABLE FIXED INDEX| X$KSLWT (ind:1) | 1 | 26 | 0 (0)| 00:00:01 | Q2,00 | PCWP | | |* 13 | FIXED TABLE FIXED INDEX | X$KSLED (ind:2) | 1 | 13 | 0 (0)| 00:00:01 | Q2,00 | PCWP | | ---------------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("SQL_ID"="SQL_ID" AND "INST_ID"="INST_ID") 4 - filter("SQL_ID"='cw1knhbvzvdbf') 5 - filter("KGLOBT03"='cw1knhbvzvdbf') 8 - filter("SQL_ID"='cw1knhbvzvdbf') 11 - filter("S"."KSUSESQI"='cw1knhbvzvdbf' AND BITAND("S"."KSSPAFLG",1)<>0 AND BITAND("S"."KSUSEFLG",1)<>0) 12 - filter("S"."INDX"="W"."KSLWTSID") 13 - filter("W"."KSLWTEVT"="E"."INDX") Note ----- - statement not queuable: gv$ statement Statistics ---------------------------------------------------------- 12 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 753 bytes sent via SQL*Net to client 524 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 2 rows processed SQL>

    The next part was to use the GV$ funtion.

    Querying V$ Views with GV$ Function

    Running effectively the same statement with the GV$ function.

    SQL> select * from TABLE(GV$(CURSOR(select i.instance_number inst_id 2 , se.sql_id 3 , sq.executions 4 from v$sql sq 5 , v$session se 6 , v$instance i 7 where se.sql_id = sq.sql_id 8 and se.sql_id = 'cw1knhbvzvdbf'))) 9 / INST_ID SQL_ID EXECUTIONS ---------- ------------- ---------- 1 cw1knhbvzvdbf 15 2 cw1knhbvzvdbf 10 Execution Plan ---------------------------------------------------------- Plan hash value: 1284594253 -------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | -------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 100 | 3400 | 1 (100)| 00:00:01 | | | | | 1 | PX COORDINATOR | | 100 | 3400 | 1 (100)| 00:00:01 | | | | | 2 | PX SEND QC (RANDOM) | :TQ10000 | 100 | 4200 | 1 (100)| 00:00:01 | Q1,00 | P->S | QC (RAND) | | 3 | VIEW | | | | | | Q1,00 | PCWP | | | 4 | MERGE JOIN CARTESIAN | | 100 | 4200 | 1 (100)| 00:00:01 | Q1,00 | PCWP | | |* 5 | HASH JOIN | | 1 | 29 | 1 (100)| 00:00:01 | Q1,00 | PCWP | | | 6 | VIEW | V_$SQL | 1 | 21 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 7 | VIEW | V$SQL | 1 | 21 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 8 | VIEW | GV$SQL | 1 | 34 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | |* 9 | FIXED TABLE FIXED INDEX | X$KGLCURSOR_CHILD (ind:2) | 1 | 34 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 10 | VIEW | V_$SESSION | 1 | 8 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 11 | VIEW | V$SESSION | 1 | 8 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 12 | VIEW | GV$SESSION | 1 | 21 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 13 | NESTED LOOPS | | 1 | 99 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 14 | NESTED LOOPS | | 1 | 86 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | |* 15 | FIXED TABLE FULL | X$KSUSE | 1 | 60 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | |* 16 | FIXED TABLE FIXED INDEX| X$KSLWT (ind:1) | 1 | 26 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | |* 17 | FIXED TABLE FIXED INDEX | X$KSLED (ind:2) | 1 | 13 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 18 | BUFFER SORT | | 100 | 1300 | 1 (100)| 00:00:01 | Q1,00 | PCWP | | | 19 | VIEW | V_$INSTANCE | 100 | 1300 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 20 | VIEW | V$INSTANCE | 100 | 1300 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 21 | VIEW | GV$INSTANCE | 100 | 2600 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 22 | MERGE JOIN CARTESIAN | | 100 | 6000 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 23 | MERGE JOIN CARTESIAN | | 1 | 60 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | |* 24 | FIXED TABLE FULL | X$KSUXSINST | 1 | 26 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 25 | BUFFER SORT | | 1 | 34 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | |* 26 | FIXED TABLE FULL | X$KVIT | 1 | 34 | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 27 | BUFFER SORT | | 100 | | 0 (0)| 00:00:01 | Q1,00 | PCWP | | | 28 | FIXED TABLE FULL | X$QUIESCE | 100 | | 0 (0)| 00:00:01 | Q1,00 | PCWP | | -------------------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - access("SE"."SQL_ID"="SQ"."SQL_ID") 9 - filter("KGLOBT03"='cw1knhbvzvdbf' AND "INST_ID"=USERENV('INSTANCE')) 15 - filter("S"."KSUSESQI"='cw1knhbvzvdbf' AND "S"."INST_ID"=USERENV('INSTANCE') AND BITAND("S"."KSSPAFLG",1)<>0 AND BITAND("S"."KSUSEFLG",1)<>0) 16 - filter("S"."INDX"="W"."KSLWTSID") 17 - filter("W"."KSLWTEVT"="E"."INDX") 24 - filter("KS"."INST_ID"=USERENV('INSTANCE')) 26 - filter("KVITTAG"='kcbwst') Note ----- - statement not queuable: gv$ statement Statistics ---------------------------------------------------------- 6 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 753 bytes sent via SQL*Net to client 524 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 6 sorts (memory) 0 sorts (disk) 2 rows processed SQL>

    As you can see from the executions plans above:

    1. The GV$ view statement involves the rows from both GV$SQL and GV$SESSION being sent to the QC (line IDs 3 and 7) with the join between the two views being performed by the QC (line ID 1).
    2. The GV$ function statement involves all joins happening before any rows are sent to the QC (line ID 2).

    I, for one, think that’s pretty cool

    Note – In both cases the statements had previously been executed so the execution statistics don’t include the initial parse recursive calls… Just in case you were wondering.



    SQL*Plus Variable defined by default

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 22:37

    Earlier i used to maintain different sql script files for one function for every database version. As some of the older release dont have some of columns available in new release’s view/tables. I started updating my scripts to maintain a single script using Tanel Poder’s  snapper script’s idea of using SQL*Plus variables to automatically comment out the version specific code in the script (if its not applicable for logged in database version), so that it does not generate the syntax error.

    So initialize the variables (_IF_ORA_9iR2_OR_HIGHER, _IF_ORA_10gR1_OR_HIGHER etc) with single line comment “–” and if version of logged in database is applicable, then remove the “–” from its value and set relevant variable to empty string (“”). I was doing this via my header.sql script which is called in every script. Later i moved that bit of code to login.sql, as i wanted it execute only during initial database connection instead of during every execution of every script.

    For example, now i can use the following SELECT statement even on 9i databases where SQL_ID column does not exists in v$session view.

    SELECT sid &_IF_ORA_10gR1_OR_HIGHER , sql_id from v$session

    I used to get the version of logged in database using a query from v$version and parsing the output. I recently noticed that SQL*Plus by default sets given below variables in every sqlplus session at logon time. This also includes the _O_RELEASE which has the database version in it. Now i can make use of this variable, instead of querying from v$version and parsing the output myself.

    In 9.2.x.x release

    • _CONNECT_IDENTIFIER   – This is set to the value used to connect after @ in the connection string (user/password@connection_identifer). So if you are using TNS_ALIAS, it will be set to the alias. If you are using EZConnect format string, it will be set to that.
    • _SQLPLUS_RELEASE – This is the sqlplus version used to connect to the database.
    • _EDITOR -
    • _O_VERSION – Oracle database version banner
    • _O_RELEASE – Oracle Release version.

    From 10gR1 onwards (all above and following)

    • _DATE – Today’s date
    • _USER – User connected as.
    • _PRIVILEGE – Privilege being used by current session (e.g SYSDBA etc)

    See the output below from various version of SQL*Plus connection to their respective version databases. If sqlplus and database version are different, you will get the different values for _SQPLUS_RELEASE and _O_RELEASE variables, but you get the idea.

    ################# <strong>9204</strong> ######################## DEFINE _CONNECT_IDENTIFIER = "9204" (CHAR) DEFINE _SQLPLUS_RELEASE = "902000400" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.4.0 - Production" (CHAR) DEFINE _O_RELEASE = "902000400" (CHAR) ################# 9206 ######################## DEFINE _CONNECT_IDENTIFIER = "9206" (CHAR) DEFINE _SQLPLUS_RELEASE = "902000600" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.6.0 - Production" (CHAR) DEFINE _O_RELEASE = "902000600" (CHAR) ################# 9207 ######################## DEFINE _CONNECT_IDENTIFIER = "9207" (CHAR) DEFINE _SQLPLUS_RELEASE = "902000700" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.7.0 - Production" (CHAR) DEFINE _O_RELEASE = "902000700" (CHAR) ################# 9208 ######################## DEFINE _CONNECT_IDENTIFIER = "9208" (CHAR) DEFINE _SQLPLUS_RELEASE = "902000800" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.8.0 - Production" (CHAR) DEFINE _O_RELEASE = "902000800" (CHAR) ################# 10103 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10103" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1001000300" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - 64bit Production With the Partitioning, OLAP and Data Mining options" (CHAR) DEFINE _O_RELEASE = "1001000300" (CHAR)</pre> ################# 10104 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10104" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1001000400" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - 64bit Production With the Partitioning, OLAP and Data Mining options" (CHAR) DEFINE _O_RELEASE = "1001000400" (CHAR) ################# 10105 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10105" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1001000500" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 - 64bit Production With the Partitioning, OLAP and Data Mining options" (CHAR) DEFINE _O_RELEASE = "1001000500" (CHAR) ################# 10201 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10201" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1002000100" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options" (CHAR) DEFINE _O_RELEASE = "1002000100" (CHAR) ################# 10202 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10202" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1002000200" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production With the Partitioning, OLAP and Data Mining options" (CHAR) DEFINE _O_RELEASE = "1002000200" (CHAR) ################# 10203 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10203" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1002000300" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production With the Partitioning, OLAP and Data Mining options" (CHAR) DEFINE _O_RELEASE = "1002000300" (CHAR) ################# 10204 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10204" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1002000400" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1002000400" (CHAR) ################# 10205 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "10205" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1002000500" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1002000500" (CHAR) ################# 11106 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "11106" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1101000600" (CHAR) ################# 11107 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "11107" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1101000700" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1101000700" (CHAR) ################# 11201 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "11201" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1102000100" (CHAR) ################# 11202 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "11202" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1102000200" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1102000200" (CHAR) ################# 11203 ######################## DEFINE _DATE = "17-MAY-12" (CHAR) DEFINE _CONNECT_IDENTIFIER = "11203" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1102000300" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP, Data Mining, Oracle Database Vault and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1102000300" (CHAR)

    Hope someone finds this useful.


    Filed under: Oracle, SQL*Plus, Version Comparision


    The Future of Forms – presentations and other resources from the May 15th event at AMIS

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 21:49

    Tuesday May 15th, Nieuwegein – The Netherlands: During an intense day  and evening, close to 120 Forms developers and architects gathered for discussions, explorations and exchange of experience around the use of Oracle Forms and more importantly: the future of the current Forms applications, Forms-using organizations and Forms developers. Various scenarios, approaches and tools and technology stacks were discussed, hybrid landscapes sketched and pros and cons evaluated.

    An interesting line up of international experts on Forms had joined their collective forces and minds to present the most complete overview of the Future of Forms available anywhere in the world today. From relatively new and specialized solutions such as OraPlayer and Yo!Forms to more proven (OraFormsFaces) and mature, architecturally driven future scenarios from PITSS and Oracle Consulting complemented with Forms modernization and integration stories as well as the official strategy from Oracle product management.

    This article provides access to most presentations that were on offer during this day. Some other resources are listed as well.

    Every speaker did a general presentation of about 30 minutes as an introduction to his or her special approach. Most speakers did a second presentation of 45 minutes in break out sessions to cover in more detail what was discussed briefly and as a teaser in the general session. Most speakers also did a hands-on, technical deep dive or Q&A session in the evening for an even more focused audience.

    General session

    Forms to Future – history, evolution, architecture and future – Lucas Jellema

    Oracle Forms Product Strategy and Statement of Direction – Grant Ronald

    Modernizing Forms using Pluggable Java Components and the Forms Look and Feel project – François Degrelle

    To infinity and beyond: Extend the life of your Oracle Forms application by running your existing Forms from next generation technologies/platforms without migration – Mia Urman (and the video for the demo Mia showed: download 2Mb video)

    Forms 11g, ADF and APEX: Co-existence in Enterprise Applications – Madi Serban

    Rendering Forms to alternative platforms using YoForms – Oliver Tickell and Don Smith (slides for this presentation are not yet available)

    Partial and or Gradual migration by embedding existing Forms in new UI technology – Wilfred van der Deijl

    JHeadstart: Real world experiences for migrating Forms to ADF – Steven Davelaar

     

    Parallel Break-Out sessions

    Modernizing Forms using Pluggable Java Components and the Forms Look and Feel project – François Degrelle (this session consisted of demo, Q&A and technical discussions; no slides are available)

    JHeadstart: Real world more detailed experiences for migrating Forms to ADF – Steven Davelaar (this session was a more detailed rendition of the general session by Steven Davelaar; there is no specific slide set for this session)

    Demonstrating YoForms – on your laptop/ smartphone – Oliver Tickell and Don Smith (slides for this presentation are not yet available)

    Embedding existing Forms in new ADF applications using OraFormsFaces for perfect co-existence – Wilfred van der Deijl

    Forms 11g, ADF and APEX: Co-existence in Enterprise Applications – Madi Serban

    Run Oracle Forms business process from any UI (or service): Integrate, Go Mobile, SOA or BPM in minutes without migration – Mia Urman

    Note: this session also showcased a number of demonstrations, available on YouTube:
    1) Recording a simple Oracle Forms scenario using the unique OraPlayer Toolbar ;
    2) Using the OraPlayer generator wizard to Wrap the scenario file recorded in step 1 with a Java API, then import it into Jdeveloper to create an ADF DataControl;
    3) Create a default page in ADF to attach to the Forms business logic – http://youtu.be/A8eYcHWcx7s ;
    4) Running an ADF system that runs 2 seperate Oracle Forms scenario’s from ADF buttons and ADF text boxes binded to OraPlayer output parameters (Oracle forms wrapped by OraPlayer)

     

    Additional Resources

    Some additional resources around the Future of Forms are listed here:

    Tweets on the Future of Forms event

    Gartner Report on Oracle Forms modernization options

    Oracle Forms Product Statement of Direction

    Mia Urman’s blogpost on the 15th of May event

    Lucas Jellema – The Future of Forms – Article in ODTUG Technical Journal, Q1 2012

    Grant Ronald – Ten Years Younger -The Oracle Forms Makeover – Article in ODTUG Technical Journal, Q3 2011

    The Future of Forms is …. Forms (and friends) – Presentation on Slideshare from UKOUG 2011 by Grant Ronald and Lucas Jellema

    Websites and blogs for speakers, solutions and vendors

    Forms Look and Feel Project

    Oracle Forms Community – Pluggable Java Components & Java Beans; Library

    Francois Degrelle’s Blog

    PITSS.CON (Madi Serban)

    YO!Forms (Oliver Tickell and Don Smith)

    JHeadstart 11g Product Center on OTN

    Oracle JHeadstart Blog (Steven Davelaar et al.)

    Mia Urman’s Blog

    OraPlayer

    AMIS Technology Blog (Lucas Jellema et al.)

    OraFormsFaces (Wilfred van der Deijl)

    Formspider


    Oracle VM 3.1 is here!

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 21:20

    Oracle is announcing the general availability of Oracle VM version 3.1. With this new release we have introduce many improvements, fixed bugs and added more functionality. Our main focus continues to be improved usability, faster and efficient deployment and additional support for backup and availability. In this post we will go over some of the interesting new additions in Oracle VM 3.1

    Improved Usability

    In this release we have made a significant upgrade to the user interface and the result is a new UI which requires less clicks and is laid out in a much more convenient way. Working closely with our customers we have reviewed all the wizards and made them simpler and much more intuitive. The opening screen of Oracle VM now includes the Quick Start Guide to help users get started and allow them to follow step by step to get their environment setup and ready to go.

    We continue enhancing the user experience and trying to give the look and feel of a native application. In this release we also allow the user to simply drag and drop VMs from one server to another and servers from one cluster to another. This is made possible by using Oracle Application Development Framework.

    <img width="626" height="373" src="data:image/jpeg;base64,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86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzo+3W//AD0T86wqKAN37db/APPRPzrzr4gftBxeBf2gvh54GGnLdjx5DqcpvvtWz7D9jhjkx5ew+Zv8zH3l24zznFdRXjP7Qfwg8ZeJfj38M/HPhK18M6kfBEWqxXVjq+qz6d9o+2QxRqUkitrj7uxiQVHb14UX7yvtr+Wg7M9B+Kn7VngD4K+JLbSfEmvGyvp7b7c6RWNzdpZW3mCL7TcvDG6W0G9tvmzlEyG+b5Wxm+LP22Phl4L+IUHhbUPEjrrNxfWemKINMvLm1W7uwDb27XMcTQJLIp3BGcHb8xAXmvGvi7+y38RPiB4l8Y6rp/8AwhVlJ8VPCkXhjxBb3Oo3M66CY2lUXFo4tl+1gxTyfu5Et/nVTvwTjyjxV8AfE3gD4w2XgPwxYahr2hXnj7w74lnv59F1NJLNLOGBJ1a5a1FiybIFcSLcl9xMXlszZBDWSjLq0v8Aya34LW4T0V49Ff8AC6+96H15pf7a/wAM9X+KkHgy38RyPr93eXWnW6f2XeLaXFxaxmS5jjujF9ndolB37ZDtOFOGIBd4X/bV+GHjCTV/sXiqERaLp8urTz3Nnc2lvPZROySXVvLLGqXMCspBlgZ0yV5+Zc/I/gX4G+J7r9oPwl4Jg06+uPB/hTxD4o1KXWn0TU7KRYNQguEAeS6tYrdmWWcqv2eaYSgh8Iqc6/hX/gmNrlx8NLzwvrk2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


    Amit Jasuja Talks About Securing Applications

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 20:49

    Securing applications is complex because it involves providing the right level of visibility to auditors, application owners and developers. Application security has primarily been hard coded into applications and difficult to change. In addition, auditors have a difficult challenge verifying security controls for applications. The complexity has left applications vulnerable to fraud and audit violations. By taking a platform approach to application security, Oracle provides all of the components to address the application security value chain. See the embedded slides below.

    A better waytosecureapps-finalv1 View more PowerPoint from OracleIDM


    TKPROF Elapsed Time Challenge – the Elapsed Time is Half of the Wait Event Time

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 20:16
    May 20, 2012 An interesting quirk was recently brought to my attention by Mich Talebzadeh.  He generated a 10046 trace at level 8 for a session, executed some SQL statements, disabled the trace, and then processed the resulting trace file with TKPROF.  His TKPROF output included the following: UPDATE TESTWRITES SET PADDING1 = RPAD('y',4000,'y') WHERE [...]


    Tip #17 Don't Be Lazy #2

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 19:30

    I was debugging some GlassFish code today.  This one Admin Command needed to find out if a given node was local or remote.  It is (obviously, clearly)  impossible for the node to change this attribute during this command call.  The code calls this method:

    node.isLocal()

    Now if you write a final getter method this is perfectly OK because the compiler will simply inline the code so that it becomes a simple variable access.

    But NO WAY is that happening in this case.  The "node" object is a proxy. The value needs to get processed through code that resolves tokens, etc.  The stack shows 8 calls to get this value.  So it is an expensive call.

     I had a breakpoint in this method.  It was called over TWENTY times by the same command!  That's 152 or so pointless method calls.

    What it needed was just ONE line of code:

    boolean isLocal = node.isLocal();



    11g R2 RAC Expert ドタバタ受験体験記 ~週末の度に~

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 18:01

    雨が降らない限り週末は戸外で遊ばせることにしている我が家。週末の度に擦り傷が増えるちび怪獣。保育園の連絡帳には毎週月曜、「手足擦り傷」の文字が並ぶ。一昨日は階段で転んで顎に擦り傷、昨日は駐輪してあった自転車を倒して自分も転倒、後頭部に切り傷。念のため受診したら問題ないとのことだったが、後頭部の出血を見たときは一瞬頭が真っ白になってしまった。これからちび怪獣の大好きな水遊びの季節。ジャブジャブ池の季節だが怪我をしないか心配だ。

    勉強の方はGrid Infrastructure関連の新機能の技術資料を読み込んでいる途中である。私の場合、実機をいじる機会がないためなかなか頭に入らない。技術資料を読めば読むほど、実機で確認したい事柄が増えていく。VMで構築すればいい話なのだが、時間がなくてどうにもならない。


    Multiple DataBinding.cpx files in ADF 11 g?

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 17:43
    The Answer is yes .in 10 g it is not possible but in 11 g  it is possible. If any Application contains more than one data binding than entry should be added into adfm.xml
    The following code is code of adfm.xml file.
    <?xml version="1.0" encoding="UTF-8" ?>
    <MetadataDirectory xmlns="http://xmlns.oracle.com/adfm/metainf%22%3Cbr />                    version="11.1.1.0.0">
      <DataControlRegistry path="soadev/ext/DataControls.dcx"/>
      <DataControlRegistry path="soadev/ext/DataControlsHelper.dcx"/>

    </MetadataDirectory>


    CHECKPOINT_CHANGE#

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 17:26
    In my previous post CURRENT_SCN and CHECKPOINT_CHANGE#, I had asked : "In which scenarios could the checkpoint_change# value differ between V$DATAFILE and V$DATAFILE_HEADER ?"




    Here's a little demo :

    SQL> create tablespace NEWTBS datafile '/tmp/newtbs.dbf' size 50M;

    Tablespace created.

    SQL> create table hemant.objcopy tablespace newtbs as select * from dba_objects;

    Table created.

    SQL> select file_id from dba_data_files where tablespace_name = 'NEWTBS';

    FILE_ID
    ----------
    15

    SQL> alter system checkpoint;

    System altered.

    SQL> select f.checkpoint_change#, h.checkpoint_change#
    2 from v$datafile f, v$datafile_header h
    3 where f.file#=15 and h.file#=15 and f.file#=h.file#;

    CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
    ------------------ ------------------
    5312187 5312187

    SQL>
    I then backup the tablespace :

    RMAN> backup tablespace newtbs;

    Starting backup at 20-MAY-12
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=13 device type=DISK
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    input datafile file number=00015 name=/tmp/newtbs.dbf
    channel ORA_DISK_1: starting piece 1 at 20-MAY-12
    channel ORA_DISK_1: finished piece 1 at 20-MAY-12
    piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_05_20/o1_mf_nnndf_TAG20120520T230907_7vl28n6q_.bkp tag=TAG20120520T230907 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
    Finished backup at 20-MAY-12

    Starting Control File Autobackup at 20-MAY-12
    piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/autobackup/2012_05_20/o1_mf_n_783817749_7vl28oln_.bkp comment=NONE
    Finished Control File Autobackup at 20-MAY-12

    RMAN>
    Next, I update the object(s) in the tablespace.

    SQL> connect hemant/hemant
    Connected.
    SQL> select segment_name from user_segments where tablespace_name = 'NEWTBS';

    SEGMENT_NAME
    --------------------------------------------------------------------------------
    OBJCOPY

    SQL> insert into objcopy select * from dba_objects;

    76670 rows created.

    SQL> update objcopy set owner = owner || '_1';

    153301 rows updated.

    SQL> commit;

    Commit complete.

    SQL>
    SQL> alter system switch logfile;

    System altered.

    SQL>
    I then remove and restore the datafile : SQL> connect / as sysdba
    Connected.
    SQL> !rm /tmp/newtbs*.dbf

    SQL> alter database datafile 15 offline;

    Database altered.

    SQL>
    RMAN> restore datafile 15;

    Starting restore at 20-MAY-12
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=7 device type=DISK

    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00015 to /tmp/newtbs.dbf
    channel ORA_DISK_1: reading from backup piece /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_05_20/o1_mf_nnndf_TAG20120520T230907_7vl28n6q_.bkp
    channel ORA_DISK_1: piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_05_20/o1_mf_nnndf_TAG20120520T230907_7vl28n6q_.bkp tag=TAG20120520T230907
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
    Finished restore at 20-MAY-12

    RMAN>
    If I now query the V$DATAFILE and V$DATAFILE_HEADER views, I see :

    SQL> select f.checkpoint_change#, h.checkpoint_change#
    2 from v$datafile f, v$datafile_header h
    3 where f.file#=15 and h.file#=15 and f.file#=h.file#
    4 /

    CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
    ------------------ ------------------
    5315901 5313637

    SQL>
    I then RECOVER the datafile : SQL> recover datafile 15;
    ORA-00279: change 5313637 generated at 05/20/2012 23:09:08 needed for thread 1
    ORA-00289: suggestion :
    /home/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2012_05_20/o1_mf_1_1
    3_7vl2f3nf_.arc
    ORA-00280: change 5313637 for thread 1 is in sequence #13


    Specify log: {=suggested | filename | AUTO | CANCEL}

    Log applied.
    Media recovery complete.
    SQL>
    SQL> select f.checkpoint_change#, h.checkpoint_change#
    2 from v$datafile f, v$datafile_header h
    3 where f.file#=15 and h.file#=15 and f.file#=h.file#
    4 /

    CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
    ------------------ ------------------
    5321980 5321980

    SQL>
    Note : The CHECKPOINT_CHANGE# has been incremented and both the views now show the same value. Bringing the datafile online again increments the CHECKPOINT_CHANGE#.

    SQL> select f.checkpoint_change#, h.checkpoint_change#
    2 from v$datafile f, v$datafile_header h
    3 where f.file#=15 and h.file#=15 and f.file#=h.file#
    4 /

    CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
    ------------------ ------------------
    5322278 5322278

    SQL>
    I could ask the question : Why is the CHECKPOINT_CHANGE# incremented for a datafile that was OFFLINE and [merely] RECOVERed ?  But I am sure that you know the answer now.

    .
    .
    .


    UKOUG Conference Call for Papers – Just Two Weeks Left!

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 17:23

    Although it’s great fun to travel the world speaking at events such as Oracle Openworld, Collaborate and ODTUG KScope, Rittman Mead in the UK still consider the UK Oracle User Group Conference, held in Birmingham in November or December each year, to be our “home” conference and our main showcase for what we’ve been up to in the last year. Like most of the big annual conferences, the UKOUG event has multiple streams and the one we’re particularly interested in is the Business Intelligence and Data Warehousing stream, covering topics and products such as OBIEE, ODI, Essbase and Oracle OLAP, BI methodologies and the BI Applications.

    Jon Mead is on the board of directors for the UKOUG, and both Jon and I have chaired the Business Intelligence & Reporting Tools SIG within the UKOUG in previous years. I’m particularly keen that we get some good, new and in-depth content around Oracle BI, DW and ETL for this year’s event, and I’d imagine papers on the following topics might go down well:

    • OBIEE development methodologies and best/right practices
    • OBIEE metadata modeling techniques, particularly against OLTP sources, OLAP sources and federating disparate data sources
    • Dashboard design best practices, and anything around effective / innovative visualizations
    • Presentations around data mining, Oracle R, big data and Hadoop
    • Tips and techniques around ODI, including migrations from OWB and Informatica
    • Papers around mapping, mobile, scorecards or any of the other OBIEE extensions introduced with 11g
    • Techniques to get the best out of the BI Apps, including handling upgrades, preparing for the Fusion Apps, and combining packaged data models with custom ones

    I’ll be putting a paper in on real-world use of the Exalytics In-Memory Machine, based on testing we’ll be doing over the summer along with feedback from customer PoCs. All speakers get a three-day pass to attend all of the other sessions, and if you get accepted you’ll be presenting at Europe’s biggest Oracle conference as well as knowing you’re contributing to a great event. There’s also a number of great social events and awards over the three days of the conference, and the photo below is of Debra Lilley (UKOUG President) and Lisa Dobson (Vice President) giving the awards whilst Vikki Lira (OTN and the ACE Program) stands in the foreground.

    The call for papers website is here, and you’ve got until the 1st of June to get your abstracts in. Hopefully I’ll see some of you attend, and maybe present,


    HP and Dell make major moves in modernization and cloud

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 15:23
    HP and Dell in same story about my two favorite topics: legacy migrations and cloud computing. I did not realize that Dell is also make a play in the modernization and cloud space in regards to legacy 3270 terminal migration/modernization to newer thin client hardware (Wyse terminals). Did not think of this terminal modernization market before but there is definitely a lot of money to be made selling terminal hardware modernization! Read more: HP and Dell cloud and modernization plays


    HTML Embedding for FreeMarker

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 11:51

    When you click on @_sites, as you can see below, the IDE lets you open the file registered under that namespace, in this case, "/macros/sites.ftl":

    But I'm thinking that any FreeMarker support would be better if it were embedded in the HTML Editor.

    That means, the following needs to happen:

    1. Add this statement to the constructor of the FreeMarker data object, so that its MIME type is set to "text/html":
      getLookup().lookup(DataEditorSupport.class).setMIMEType("text/html");
    2. Create a language provider that will embed the FreeMarker MIME type within the HTML editor, if the current token ID is "TEXT", which is what unrecognized tokens in HTML, such as those provided by the FreeMarker support, are mapped to:

      @ServiceProvider(service = LanguageProvider.class) public class HTMLEmbeddingLanguageProvider extends LanguageProvider {     private Language embeddedLanguage;     @Override     public Language<?> findLanguage(String mimeType) {         return HTMLTokenId.language();     }     @Override     public LanguageEmbedding<?> findLanguageEmbedding(Token<?> token,         LanguagePath languagePath, InputAttributes inputAttributes) {         initLanguage();         if (languagePath.mimePath().equals("text/html")) {             if (token.id().name().equals("TEXT")) {                 return LanguageEmbedding.create(embeddedLanguage, 0, 0, false);             }         }         return null;     }     private void initLanguage() {         embeddedLanguage = MimeLookup.getLookup("text/x-ftl").lookup(Language.class);         if (embeddedLanguage == null) {             throw new NullPointerException("Can't find language for embedding");         }     }     }
    3. Change all the hyperlinkproviders. First, in the annotation at the top of the hyperlinkproviders, change from your MIME type (e.g., text/x-ftl) to text/html. Then, get your embedded language like this, from the HTML token sequence:
      TokenHierarchy<?> th = TokenHierarchy.get(doc); TokenSequence htmlTs = th.tokenSequence(Language.find("text/html")); if (htmlTs == null || !htmlTs.moveNext() && !htmlTs.movePrevious()) {     return null; } TokenSequence<SJTokenId> ts = htmlTs.embedded(); if (ts == null) {     return null; } ts.move(offset);

    The above gets you here, which is not perfect, but on the way to where it probably should be, i.e., HTML support within a FreeMarker editor:

    Click to enlarge the image above to get a fuller perspective.


    ADF Developer Guide

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 11:38

    Oracle Apps Framework Here I will be sharing all the Oracle Applications Development Framework related articles

    Item Type

    Author

    1

    ADF Hello World Tutorial

    Puneet Rajkumar


    ADF Hello World Tutorial

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 11:27

    1. Create a New Application

    New > Applications > Fusion Web Application (ADF)

     

     

    Application Name – HelloWorld

    Directory -- (Jdev install dir)/jdeveloper/(project name)

    Application Package Prefix – Demo.adf.helloworld

     

     

     

     

     

     

    2. Create JSF page

    You will see Model and ViewController in HelloWorld application. Now Click on ViewController and choose New

    Web Tier > JSF > JSF Page

     

     

    File Name – HelloWorld.jspx

    Check “Create XML Document (*.jspx)”

    Select “Blank Page” in “Initial Page Layout and Content” Section

    Select “Automatically Expose UI Components in a New Managed Bean” in “Page Implementation” Section

     

     

    3. Drag Decorative Box from Layout option available in Component Palate

     

     

    4. Drag item of type “Input Text”, “Button” on the center face of decorativeBox from Common Components Section

     

     

    5. Drag item of type “Output Text” on Top of decorativeBox from Common Components Section

     

     

    6. Select “af:decorativeBox” then go to Property Pallete and Double Click “Panel Group Layout” in “Layout” Section

     

     

    Select “af:panelGroupLayout – scroll” and set following property

    Halign -- center

     

     

     

    7. Select “top” then go to Property Pallete and Double Click “Panel Group Layout” in “Layout” Section

     

     

     

    Select “af:panelGroupLayout – scroll” under “top” and set following property

    Halign – center

     

     

    8. Set Bind Action Property for commandButton

    Double Click on commandButton that will open set Bind Action Property window as shown below

     

     

    Click Ok and then Write Following Code in cb1_action() which you have created just now

     

    public String cb1_action()
    { RichInputText inputText = getIt1();  
        String name = "Hello "+(String)inputText.getValue()+ "!!";  
        ot1.setValue(name);  
        return null;
    }

     

    9. following properties for commandButton, input text and outputText

     

    Set Following Properties for inputText item

    Label – Name

    Id – it1

     

    Set Following Properties for commandButton item

    Id – Go

    Action – cb1_action()

    Text – Go

     

    Set Following Properties for outputText item

    Id – ot1

    Value – Null (Blank)

    InlineStyle -- color:Red; font-family:Georgia, 'Times New Roman', times, Serif; font-size:xx-large;

    Color – Red

    Font -- Georgia, 'Times New Roman', times, Serif

    Size -- xx-large

     

    10. Congratulation you have successfully finished. Test Your Work Your Hello World Page is Ready

     

     

     

     

     

    1.


    How to Merge a Row

    OraNA :: Oracle News Aggregator - Sun, 2012-05-20 10:33

    The tough challenge that seems to have been faced by this developer was that the ID, name and value passed into the procedure needed to be either applied as an update if the name existed, or else inserted as a new row. You might think you could just use MERGE, or maybe attempt the update, capturing the ID value with a RETURNING clause, then if that found no rows insert a new row using seq_somethings.NEXTVAL for the ID. But wait, that wouldn't be complicated enough, would it?

    Here's the table:

    create table something ( id integer not null constraint pk_something primary key , name varchar2(100) , publicsomething number default 0 not null );Here's what they came up with:
    PROCEDURE SaveSomething(pId IN OUT something.id%TYPE, pName IN something.name%TYPE, pPublicSomething IN something.publicsomething%TYPE) IS counter NUMBER; BEGIN SELECT COUNT(rowid) INTO counter FROM something c WHERE LOWER(c.name) = LOWER(pName); IF counter > 0 THEN SELECT id INTO pId FROM something c WHERE LOWER(c.name) = LOWER(pName); END IF; IF (pId IS NOT NULL AND pId > 0) THEN UPDATE something SET id = pId, name = pName, publicsomething = pPublicsomething WHERE id = pId; ELSE SELECT seq_somethings.NEXTVAL INTO pId FROM dual; INSERT INTO something (id, name, publicsomething) VALUES (pid, pname, ppublicsomething); END IF; EXCEPTION WHEN OTHERS THEN -- log the details then throw the exception so the calling code can perform its own logging if required. log_error('PK_ADMIN.SaveSomething', USER, SQLCODE || ': ' || SQLERRM); RAISE; END SaveSomething;

    Thanks Boneist for this. By the way she mentioned she counted 6 WTFs, "some more subtle than others". I'm not sure whether we're counting the stupid redundant brackets around the IF condition (drives me crazy), the novel 5-character indent or the design WTF in which the "name" column is expected to be unique but has no constraint or indeed index. I'm definitely counting SQLCODE || ': ' || SQLERRM though.


    Syndicate content