Feed aggregator

Six Plus One Types of Interviewers

Abhinav Agarwal - Fri, 2017-08-04 12:29

R
emember Chuck Noland? The character in the movie Castaway, who has to use the blade of an ice-skate to extract his abscessed tooth, without anesthesia? The scene is painful to watch, yet you can't look away.

Interviews have this habit of turning up a Chuck Noland - in the interviewee or the interviewer. You willingly agree to subject yourself to the wanton abuse by random strangers who you may have to end up working for or with. Apart from the talented few whom companies are more eager to hire than they are to get hired, most are in less enviable positions.

What about interviewers? Not all are cut from the same cloth. But there are at least six types that I think we have all met in our lives, and a seventh one.
1. The Interview As an End In Itself - Hyper-excited newbieYou know this guy. You have been this person, most likely. You have a team now. You expect your team to grow. You have to build a team. You believe that you, and you alone, know what it takes to hire the absolutely best person for the opening you have.
You sit down and explain to the harried hiring HR person what the role is, what qualifications you are looking for, why the job is special, why just ordinary programming skills in ordinary programming languages will simply not cut it, why you as the hiring manager are special, and how you will, with the new hire, change the product, the company, and eventually the whole wide world. The HR executive therefore needs to spend every waking minute of her time in the pursuance of this nobler than noble objective. You badger your hiring rep incessantly, by phone, by IM, by email, in person, several times a day, asking for better resumes if you are getting many, and more if you aren't getting enough.
You read every single resume you get, several times over. You redline the points you don't like. You redline the points you like. You make notes on the resumes. You still talk to every single candidate. You continue interviewing, never selecting, till the economic climate changes and the vacancy is no longer available.
Yes, we all know this person.
2. Knows what he is looking for and knows when he finds itThis person is a somewhat rare commodity. This person does not suffer from buyer's remorse, knows that there is no such thing as a perfect candidate, and that the best he can hope to get is a person who comes off as reasonably intelligent, hard-working, ethical, and is going to be a team player.

This person will however also suffer from blind spots. Specifically, two kinds of blindspots. The first is that he will look for and evaluate a person only on those criteria that he can assess best. The second is that he is more likely to hire candidates that are similar to other successful employees in his team, and will probably become less likely to take chances on a different type of a candidate. On the other hand, this manager also knows that conceptual skills are more important to test than specific knowledge of some arcane syntax in a geeky programming language - if you are talking of the world of software for instance.
This person is a rare commodity.
3. Hire for EmpireLike our previous type of hiring manager, this hiring manager is also very clear-headed.  But, here the interviewer is hiring to add headcount to his team. Grow the empire. More people equates to more perceived power. This person understands three things, and understands them perfectly.
First, that if he is slow in hiring, then a hiring freeze may come in, and the headcount may no longer stay open.
Second, he (or she) is also unable and equally unwilling to evaluate a candidate, so just about anyone will do.
Third, and most importantly, this manager knows that every additional person reporting to him on the organization chart elevates him in importance vis-a-vis his peers, and therefore hiring is a goal noble enough to be pursued in its own right.
It's a win-win situation for everyone - except the customers, the company, and the team.
4. I have other work to do. What am I doing here? What is he doing here?This person has little skin in the game. He has no dog in the fight. Pick your metaphor. He is there to take the interview because of someone's absence, or because in the charade of the interview "process" that exists at many companies, there exists a need to do this interview. The interviewer agrees because it is a tax that needs to be paid. You don't want to be labeled a non-team-player. Who knows when this Scarlet Letter may come to haunt you. So our interviewer sets aside half an hour or more, preferably less, of his time, and comes back wondering where thirty minutes of his life just went. That question remains unanswered.
5. Know-it-all and desperate to show itThis person perceived himself as an overachiever. This is the sort of person who will tell you with casual nonchalance that he had predicted the rise of Google in 1999  - just so you can get to know that he had heard of Google in 1999. This person knows he knows everything that there is to know, that it is his beholden duty to make you know it too, and it is your beholden duty to acknowledge this crushing sacerdotal burden he carries. This is the person who will begin the interview with a smirk, sustain a a wry smile, transform into a frown, and end with an exaggerated sense of self-importance.
Do not get fooled.
This person is as desperate, if not more, to interview you as you are to do well on the interview. He will in all likelihood end up talking more than the interviewee.
In every group in every department of every company there exists at least one such person. The successful companies have no more than one.
6. The rubber-stampThe boss has decided the person who needs to be hired. The charade needs to be completed. The requisite number of people have to interview the candidate so that HR can dot the "I"s and cross the "T"s. Our interviewer here has to speak with this person. With an air of deference. He will ask all the right questions, but the answers do not matter. You sign off with a heartfelt, "Great talking to you. Thanks a ton for your time. Take care, and we really look forward to working with/for you." No, don't belittle this rubber-stamp. He could be you.

These are not mutually exclusive sets. There are overlaps that exist, sometimes in combinations that would warm Stephen King's heart.

Oh, what about the seventh type of interviewer? He is the Interviewer as Saboteur.  I will talk about him in a separate post.

This post appeared on LinkedIn on July 31st, 2017.
This is an edited version of a post I wrote on April 23rd, 2013.

© 2017, Abhinav Agarwal. All rights reserved.

Video: Kubernetes: Finding the Magic

OTN TechBlog - Fri, 2017-08-04 12:18

"It's one thing to say 'I want to use Kubernetes for my orchestration and for my application,'" says TJ Fontaine. "But  you can't just sprinkle some Kubernetes dust on it and get magic out of it. You actually have to do a little bit of work and understand how it all fits together." Fortunately, getting started with that work can be as easy as watching a video. In this case, the video in question is this short interview with TJ, recorded at the Oracle Code event in Atlanta on June 22, 2017.

TJ, a software engineer, leads Oracle's open source efforts for Kubernetes. In this interview he recaps his Oracle Code presentation, "Introduction to Kubernetes," discusses patterns and anti-patterns for using Kubernetes in your development projects, and explains why the abstract for his session contains only 15 words.

Additional Resources
  1. Video: Discover Graal: Open Source Polyglot Runtime Environment
  2. Video: When Apache Spark Meets Hazelcast
  3. Video: Cassandra, Open Source, and Bare Metal Cloud
  4. Video: Basic Help for Docker Noobs
  5. Video: Meet Anzen A Startup Powered by Open Source, Oracle Cloud, Math, and Modern Art
  6. Blog Post: Three New Open Source Container Utilities

SELECT CASE INTO

Tom Kyte - Fri, 2017-08-04 11:26
How can I use a SELECT CASE INTO to store a value in a local variable?
Categories: DBA Blogs

Poor performance got worse after using alter table shrink space cascade, why?

Tom Kyte - Fri, 2017-08-04 11:26
We have an Oracle 12g database without partitioning (another issue due to cost) which has one table that got very large before we deleted unwanted rows. The table grew to over 150 million rows and was over 50% of the database (200GB allocated). Use...
Categories: DBA Blogs

How to make a use of Pipelined Table functions (that implement ODCI table interface) in PL/SQL?

Tom Kyte - Fri, 2017-08-04 11:26
I have created a pipelined table function similar to the well known Anton Scheffer's PIVOT function and it works as expected (in SQL*Plus) When I tried to use it in PL/SQL to open a cursor or bulk fetch, it fails with the following exception: <b> ...
Categories: DBA Blogs

Identity Column Next Value

Tom Kyte - Fri, 2017-08-04 11:26
Hi Tom, I just wanted to know, How to find next value from identity for any particular column ?
Categories: DBA Blogs

Names of Identity Column

Tom Kyte - Fri, 2017-08-04 11:26
Hi TOM, if I want to create one table with identity column so can i define name for identity ?
Categories: DBA Blogs

How to identify null columns vs null rows in left join

Tom Kyte - Fri, 2017-08-04 11:26
Hi Chris/Connor, I have a below query output: <code>select tab1.usr, tab2.salary from tab1 LEFT JOIN tab2 ON (tab1.usr = tab2.usr and tab1.name = tab2.name); USR salary ----- ------- 1111 5001 2222 NULL 3333 NULL Since usr: 22...
Categories: DBA Blogs

Exadata Capacity on Demand and Elastic Rack

Yann Neuhaus - Fri, 2017-08-04 11:18

Since X4 we can do Capacity on Demand on Exadata: disable some CPU cores to lower cost of Oracle Database licenses. Depending on the models, and the configuration, there are different minimums and here is a recap table about those.

Here is the summary of Capacity on Demand minimum, maximum and increment. Those numbers come from the configuration file of OEDA, the Oracle Exadata Deployment Assistant (es.properties) and you can see that it already has an option for Exadata X7-2

Exadata model sockets cores per socket cores per server thread per core Capacity on Demand minimum Cod maximum CoD increment X2-2 2 6 12 2 X3-2 2 8 16 2 X4-2 2 12 24 2 12
(not for 1/8th) 24 2 X5-2 2 18 36 2 14 36 2 X6-2 2 22 44 2 14
(8 for 1/8th) 44 2 X7-2 2 24 48 2 14
(8 for 1/8th) 48 2 X2-8 8 8 12 2 X3-8 8 10 12 2 X4-8 8 15 32 2 48 120 8 X5-8 8 18 32 2 56 144 8 X6-8 8 18 32 2 56 X7-8 8 24 32 2 SL6 2 32 64 8 14
(8 for 1/8th) 64 2 T7-2 2 32 62 8

 

Special minimums for 1/8th of Rack

The smallest configuration (1/8th of Rack) is a bit special. First, because it is physically identical to the 1/4th one with just some processors and disks disabled. But also, for this entry-level, the minimum required is lower – 8 cores per node – in X6.

Here is the Oracle Exadata Deployment Assistant for X6-2 1/8th of Rack:

CaptureOEDAx68002

When having selected 1/8th of Rack we are allowed to enable a minimum of 8 cores per nodes, as mentioned in the table above:

CaptureOEDAx68006

Elastic Rack

Elastic Rack configuration allows to configure any combination of database nodes and storage cells:

CaptureOEDAx68004

With Elastic Rack configuration, the next screen is not only displaying the configuration, but you can customize it.
Here I define the same configuration as an 8th of RAC:

CaptureOEDAx68005

However, because it is not an 1/8th Rack configuration, the minimum is 14 cores per node and not 8:

CaptureOEDAx68001

So be careful. Elastic configuration gives more flexibility, but CoD minimums are is different than the equivalent configuration.

/opt/oracle.SupportTools/resourcecontrol

As I’m talking about elastic configuration here is how the cores are enabled. The configuration assistant calls /opt/oracle.SupportTools/resourcecontrol which displays or updates the BIOS configuration. You may wonder why you can do that here and not in your own servers? Because here Oracle can trace what happened. You will find the log in /var/log/oracleexa/systemconfig.log and here is an example where the Elastic Rack has been deployed with 16 cores per database node Capacity on Demand:

Fri Aug 04 16:12:18 CEST 2017
Executing command: /opt/oracle.SupportTools/resourcecontrol -show
[INFO] Validated hardware and OS. Proceed.
[SHOW] Number of physical cores active per socket: 22
[SHOW] Total number of cores active: 44
 
Mon Aug 07 11:24:31 CEST 2017
Executing command: /opt/oracle.SupportTools/resourcecontrol -core 16 -force
[INFO] Validated hardware and OS. Proceed.
[INFO] Enabling 8 cores on each socket.
[INFO] Import all bios settings
[INFO] All bios settings have been imported with success
[ACTION] Reboot server for settings to take effect
[SHOW] Number of physical cores active per socket: 8
[SHOW] Total number of cores active: 16
 
Mon Aug 07 11:31:24 CEST 2017
Executing command: /opt/oracle.SupportTools/resourcecontrol -show
[INFO] Validated hardware and OS. Proceed.
[SHOW] Number of physical cores active per socket: 8
[SHOW] Total number of cores active: 16

This does not stay on your server. There is a rule that you can do Capacity on Demand only if you have configured Platinum support, or use Oracle Configuration Manager, or Enterprise Manager. All those may store history of the CPU count, which means that it is auditable.

 

Cet article Exadata Capacity on Demand and Elastic Rack est apparu en premier sur Blog dbi services.

Can Nologging Be Enabled for EBS 12.2?

Steven Chan - Fri, 2017-08-04 09:59

The nologging Oracle database feature is used to enhance performance in certain areas of Oracle E-Business Suite. For example, it may be used during patch installation, and when building summary data for Business Intelligence.

What are the tradeoffs of using nologging?

Use of nologging in an operation means that the database redo logs will contain incomplete information about the changes made, with any data blocks that have been updated during the nologging operation being marked as invalid. As a result, a database restoration to a point in time (whether from a hot backup or a cold backup) may require additional steps in order to bring the affected data blocks up-to-date, and make the restored database usable. These additional steps may involve taking new backups of the associated datafiles, or by dropping and rebuilding the affected objects. The same applies to activation of a standby database.

Can nologging be enabled for EBS 12.2?

Yes.  See the following documentation for additional considerations and operational implications of using nologging:

Related Articles

Categories: APPS Blogs

Oracle FY18 Partners Immersion Training

This Oracle fiscal year, the FY18 Partners Immersion Training to our OPN partners promises to be a modern learning engagement designed to provide the building blocks to: Articulate the...

We share our skills to maximize your revenue!
Categories: DBA Blogs

A wonderful PostgreSQL feature: default privileges

Yann Neuhaus - Fri, 2017-08-04 02:52

Imagine this scenario (which is not so uncommon): You have a lot of objects in a user schema and you want to grant another user access to that tables. You can easily do this by granting select on the tables to the user and you’re fine. Really? Maybe now, but what will happen when the user which owns the objects creates new objects? Then you will need to grant those to the second user as well. In PostgreSQL there is an easier solution. Lets go …

Again we start by creating two users each with its own schema:

postgres=# create user a with login password 'a';
CREATE ROLE
postgres=# create schema a authorization a;
CREATE SCHEMA
postgres=# alter user a set search_path=a;
ALTER ROLE
postgres=# create user b with login password 'b';
CREATE ROLE
postgres=# create schema b authorization b;
CREATE SCHEMA
postgres=# alter user b set search_path=b;
ALTER ROLE
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 a         |                                                            | {}
 b         |                                                            | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 a      | a
 b      | b
 public | postgres
(3 rows)

User “a” shall be the one owning the objects:

postgres=# \c postgres a
You are now connected to database "postgres" as user "a".
postgres=> create table t1 ( a int );
CREATE TABLE
postgres=> create table t2 ( a int );
CREATE TABLE
postgres=> insert into t1 (a) values (1);
INSERT 0 1
postgres=> insert into t2 (a) values (2);
INSERT 0 1
postgres=> \d
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 a      | t1   | table | a
 a      | t2   | table | a
(2 rows)

When you want to give user “b” access to these tables you could do:

postgres=> grant select on table t1 to b;
GRANT
postgres=> grant select on table t2 to b;
GRANT

From now on user “b” should be able to select from the two tables owned by user “a”, right?:

postgres=> \c postgres b
You are now connected to database "postgres" as user "b".
postgres=> select count(*) from a.t1;
ERROR:  permission denied for schema a
LINE 1: select count(*) from a.t1;

This is not how it works in PostgreSQL. What you need to do is this:

postgres=> \c postgres a
You are now connected to database "postgres" as user "a".
postgres=> grant usage on schema a to b;
GRANT

This allows user “b” access to the schema “a” (remember that a user and a schema are different things in PostgreSQL):

postgres=> \c postgres b
You are now connected to database "postgres" as user "b".
postgres=> select count(*) from a.t1;
 count 
-------
     1
(1 row)

postgres=> select count(*) from a.t2;
 count 
-------
     1
(1 row)

What happens now when user “a” creates another object:

postgres=> \c postgres a
You are now connected to database "postgres" as user "a".
postgres=> create table t3 as select * from t1;
SELECT 1
postgres=> \d
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 a      | t1   | table | a
 a      | t2   | table | a
 a      | t3   | table | a
(3 rows)

Will user “b” be able to select data from it?

postgres=> \c postgres b
You are now connected to database "postgres" as user "b".
postgres=> select count(*) from a.t3;
ERROR:  permission denied for relation t3

Of course not. The “usage” on a schema grants only access to that schema but not access to the objects in the schema. When we want user “b” being able to select from all tables in schema “a” even when user “a” creates new objects then we can modify the default privileges:

postgres=# \c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# alter default privileges in schema a grant select on tables to b;
ALTER DEFAULT PRIVILEGES

Should user “b” now be able to select from the “t3″ table in schema “a”?

postgres=> select current_user;
 current_user 
--------------
 b
(1 row)

postgres=> select count(*) from a.t3;
ERROR:  permission denied for relation t3
postgres=> 

No. When you modify the default privileges this will affect only objects created after your modification. Lets create a new table with user “a” in schema “a”:

postgres=> \c postgres a
You are now connected to database "postgres" as user "a".
postgres=> create table t4 as select from t1;
SELECT 1

As this table was created after the modification to the default privileges user “b” is allowed to select from it automatically:

postgres=> \c postgres b
You are now connected to database "postgres" as user "b".
postgres=> select count(*) from a.t4;
 count 
-------
     1
(1 row)

When you check the link to the documentation above you’ll notice that you can not only grant select on tables but much more. Hope this helps …

 

Cet article A wonderful PostgreSQL feature: default privileges est apparu en premier sur Blog dbi services.

What Employers Want : Communication Skills

Tim Hall - Fri, 2017-08-04 01:28

It’s important you can present yourself in a confident and professional manner when it comes to interviews, but this also carries over into a work environment.

Once you get a job you need to be able to communicate effectively with your colleagues and with your customers/users. I know you think your silent genius act makes you look special, but it doesn’t. The initial interaction between humans involves building rapport. It’s kind-of difficult to build rapport with someone who refuses to talk to you and can’t look you in the eye. You need to get your communication skills sorted before you try to enter the job market.

If you are working in IT your written skills will be really important. You will need to communicate with colleagues and customers/users in a concise, but accurate way. People won’t read waffle (TL;DR), but they will demand enough detail to make sense of what you are saying. A quick read through your typical IT forum will make you realise that most people have terrible written skills and are incapable of stringing together a logical argument. You don’t have to be a prize winning novelist, but you need to be able to make yourself understood.

Remember in a previous post I wrote about enthusiasm. It doesn’t matter how enthusiastic you are if you can’t express it!

I’ve written some post on writing tips and public speaking tips. I think this is important for you as someone who is trying to enter the job market, or someone who is trying to move up the ladder. Don’t lose out on an opportunity because you’ve neglected your soft skills!

Check out the rest of this series here.

Cheers

Tim…

What Employers Want : Communication Skills was first posted on August 4, 2017 at 7:28 am.
©2012 "The ORACLE-BASE Blog". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.

Event Mapping: Fluid Landing Page "Dot" Buttons

Jim Marion - Thu, 2017-08-03 23:12

The bottom of a Fluid landing page contains dots that identify how many landing pages the user can view as well as the position of the current landing page within the user's landing page collection. This piece of information is quite useful on a swipe-enabled mobile device, but somewhat meaningless on my mac. A few months ago I was helping a PeopleSoft customer with their Fluid implementation. This rather brilliant customer made those dots clickable to navigate between landing pages. To implement this behavior, the customer modified delivered PeopleTools JavaScript and CSS definitions, which, unfortunately, presents a bit of an upgrade problem. In a recent webinar I mentioned that one of the things that excites me about Fluid is that everything is a component. What that means is we can use Event Mapping anywhere. Landing Pages are no exception. With that in mind, I wondered what this solution would look like with Event Mapping.

Those little dots at the bottom of the page are created through JavaScript. To enhance them, therefore, we will need to write some JavaScript. Because the original implementation of this behavior modified delivered PeopleTools JavaScript, the author was able to leverage existing JavaScript variables and functions. To avoid customizing PeopleTools, we will need to extract the relevant JavaScript and rewrite it in a standalone manner, meaning no dependencies on PeopleTools JavaScript. We'll start with a CSS selector to identify dots: .lpTabIndicators .dot. We will iterate over that dot collection, adding a click event handler to each dot. That click event handler needs to know the target tab on click so we need another CSS selector to identify tabs: .lpTabId span.ps_box-value. For compatibility reasons, I'm not going to use any libraries (like jQuery), just raw JavaScript:

(function () {
"use strict";
// include protection just in case PS inserts this JS twice
if (!window.jm_config_dots) {
window.jm_config_dots = true;
var originalSetTabIndicators = window.setTabIndicators;

// MonkeyPatch setTabIndicators because we want to run some code each
// time PeopleSoft invokes setTabIndicators
window.setTabIndicators = function () {

// JavaScript magic to invoke original setTabIndicators w/o knowing
// anything about the call signature
var returnVal = originalSetTabIndicators.apply(this, arguments);

// The important stuff that adds a click handler to the dots. This
// is the code we want to run each time PS invokes setTabIndicators
var dots = document.querySelectorAll('.lpTabIndicators .dot'),
tabs = document.querySelectorAll('.lpTabId span.ps_box-value'),
titles = document.querySelectorAll('.lpnameedit input');

[].forEach.call(dots, function (d, idx) {
d.setAttribute('title',titles[idx].value);
d.addEventListener("click", function () {
lpSwipeToTabFromDD(tabs[idx].innerHTML);
});
});

return returnVal;
};
}
}());

Funny... didn't I say we would start with a CSS selector? Looking at that code listing, that CSS selector and the corresponding iterator don't appear until nearly halfway through the listing. When testing and mocking up a solution, the objects you want to manipulate are a good place to start. We then surround that starting point with other code to polish the solution.

This code is short, but has some interesting twists, so let me break it down:

  • First, I wrapped the entire JavaScript routine in a self-executing anonymous JavaScript function. To make this functionality work, I have to maintain a variable, but don't want to pollute the global namespace. The self-executing anonymous function makes for a nice closure to keep everything secret.
  • Next, I have C-style include protection to ensure this file is only processed once. I don't know this is necessary. I suspect not because we are going to add this file using an event that only triggers once per component load, but it doesn't hurt.
  • The very next line is why I have a closure: originalSetTabIndicators. Our code needs to execute every time PeopleSoft invokes the delivered JavaScript setTabIndicators function. What better way to find out when that happens than to MonkeyPatch setTabIndicators? setTabIndicators creates those little dots. If our code runs before those dots are created, then we won't have anything to enhance. Likewise, when those dots change, we want our code to be rerun.
  • And, finally, redefine setTabIndicators. Our version is heavily dependent on the original, so first thing we want to do is invoke the original. As I stated, the original creates those dots, so it is important that we let it run first. Then we can go about enhancing those dots, such as adding a title and a click handler.

In Application Designer (or online in Branding Objects), create a new HTML (JavaScript) definition with the above JavaScript. I named mine JM_CLICK_DOTS_JS. You are free to use whatever name you prefer. I point it out because later we will reference this name from an Application Class, and knowing the name will be quite useful.

If we stop our UX improvements here, the dots will become clickable buttons, but users will have no visual indicator. It would be nice if the mouse pointer became a pointer or hand to identify the dot as a clickable region. We will use CSS for this. Create a new Free formed stylesheet for the following CSS. I named mine JM_CLICK_DOTS.

.lpTabIndicators .dot:hover,
.lpTabIndicators .dot.on:hover {
cursor: pointer;
}

With our supporting definitions created, we can move onto Event Mapping. I detailed all of the steps for Event Mapping in my post Event Mapping: Extending "Personal Details" in HCM. According to that blog post, our first step is to create an App Class as an event handler. With that in mind, I added the following PeopleCode to a class named ClickDotsConfig in an Application Class appropriately named JM_CLICK_DOTS (noticing a pattern?). Basically, the code just inserts our new definitions into the page assembly process so the browser can find and interpret them.

import PT_RCF:ServiceInterface;

class ClickDotsConfig implements PT_RCF:ServiceInterface
method execute();
end-class;

method execute
/+ Extends/implements PT_RCF:ServiceInterface.execute +/

AddStyleSheet(StyleSheet.JM_CLICK_DOTS);
AddJavaScript(HTML.JM_CLICK_DOTS_JS);
end-method;

After creating a related content service definition for our Application Class, the only trick is choosing the Landing Page component content reference, which is a hidden content reference located at Fluid Structure Content > Fluid PeopleTools > Fluid PeopleTools Framework > Fluid Homepage

Probably the trickiest part of this whole process was identifying which event to use. For me the choice was between PageActivate and PostBuild. The most reliable way I know to identify the appropriate event is to investigate some of the delivered component PeopleCode. What I found was that the same code that creates the dots, PTNUI_MENU_JS, is added in PostBuild. Considering that our code MonkeyPatches that code, it is important that our code run after that code exists, which means I chose PostBuild Post processing.

Using Event Mapping we have effectively transformed a customization into a configuration. The point of reducing customizations is to simplify lifecycle management. We now have two fewer items on our compare reports. If Oracle changes PTNUI_MENU_JS and PTNUI_LANDING_CSS, the originally modified definitions, these items will no longer show on a compare report. But!, and this is significant: you may have noticed my JavaScript is invoking and manipulating delivered PeopleSoft JavaScript functions: setTabIndicators and lpSwipeToTabFromDD. If Oracle changes those functions, then this code may break. A great example of Oracle changing JavaScript functions was their move from net.ContentLoader to net2.ContentLoader. I absolutely LOVE Event Mapping, but we can't ignore Lifecycle Management. When implementing a change like this, be sure to fully document Oracle changes that may break your code. This solution is heavily dependent on Oracle's code but no Lifecycle Management tool will identify this dependency.

Question: Jim, why did you prefix setTabIndicators with window as in window.setTabIndicators? Answer: I am a big fan of JSLint/JSHint and want clean reports. It is easier to tell a code quality tool I'm running in a browser than to define all of the globals I expect from PeopleSoft. All global functions and variables are really just properties of the Window object. The window variable is a browser-defined global that a good code quality tester will recognize. The window prefix isn't required, but makes for a nice code quality report.

Windows Datapump Export

Michael Dinh - Thu, 2017-08-03 22:45

The purpose of the script is to perform full database export keeping 3 export copies.
If export is successful, then fullexp*.dmp will be renamed with _1.dmp suffix added to filename.
If export is unsuccessful, then code will exit, skipping rename operations.

Note: there should never be .dmp file without # suffix unless export is unsuccessful.

In hindsight, directoryName should be using variable (ORACLE_SID) versus hardcode.

SET ORACLE_SID=DB01
SET directoryName=D:\DB01\export

expdp ‘/ as sysdba’ full=y directory=DATA_PUMP_DIR dumpfile=fullexp_%ORACLE_SID%_%COMPUTERNAME%.dmp logfile=fullexp_%ORACLE_SID%_%COMPUTERNAME%.log flashback_time=SYSTIMESTAMP REUSE_DUMPFILES=YES
IF %ERRORLEVEL% NEQ 0 GOTO ERROR

IF EXIST “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_3.dmp” (DEL “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_3.*”)

IF EXIST “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_2.dmp” (RENAME “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_2.dmp” “fullexp_%ORACLE_SID%_%COMPUTERNAME%_3.dmp”)
IF EXIST “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_2.log” (RENAME “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_2.log” “fullexp_%ORACLE_SID%_%COMPUTERNAME%_3.log”)

IF EXIST “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_1.dmp” (RENAME “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_1.dmp” “fullexp_%ORACLE_SID%_%COMPUTERNAME%_2.dmp”)
IF EXIST “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_1.log” (RENAME “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%_1.log” “fullexp_%ORACLE_SID%_%COMPUTERNAME%_2.log”)

IF EXIST “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%.dmp” (RENAME “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%.dmp” “fullexp_%ORACLE_SID%_%COMPUTERNAME%_1.dmp”)
IF EXIST “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%.log” (RENAME “%directoryName%\fullexp_%ORACLE_SID%_%COMPUTERNAME%.log” “fullexp_%ORACLE_SID%_%COMPUTERNAME%_1.log”)

EXIT 0

:ERROR
EXIT 1

Results after 4 runs.

08/03/2017  07:53 PM     2,680,008,704 fullexp_DB01_CMWPHV1_1.dmp
08/03/2017  07:53 PM           161,707 fullexp_DB01_CMWPHV1_1.log
08/03/2017  07:46 PM     2,680,008,704 fullexp_DB01_CMWPHV1_2.dmp
08/03/2017  07:46 PM           161,707 fullexp_DB01_CMWPHV1_2.log
08/03/2017  07:37 PM     2,680,008,704 fullexp_DB01_CMWPHV1_3.dmp
08/03/2017  07:37 PM           161,707 fullexp_DB01_CMWPHV1_3.log

Duplicate records in MLOG

Tom Kyte - Thu, 2017-08-03 17:06
Is it possible to restrict creation of duplicate record in MLOG. In our scenario, same record is updated twice then it is creating two record in MLOG and fast refresh is taking longer time. Is it possible if it create only one record in MLOG n...
Categories: DBA Blogs

Materialized view

Tom Kyte - Thu, 2017-08-03 17:06
Hi Tom Just wanted to know whether materialized view will be available for querying during refresh if refresh is performed using atomic refresh=>false..?
Categories: DBA Blogs

SQL_Target,tablespace Question

Tom Kyte - Thu, 2017-08-03 17:06
1)What happen when SGA_MAX_SIZE & SGA_TARGET not define under Init parameter file? 2)When extending datafile with Auto extend on command without specifying size what will happnen?
Categories: DBA Blogs

ENABLE PARALLEL DML Vs FORCE PARALLEL DML

Tom Kyte - Thu, 2017-08-03 17:06
Hi Chris/Connor, I came across below two piece of codes where only difference is "ALTER SESSION FORCE PARALLEL DML PARALLEL 16" Can you please help to understand if we need to perform DELTE using parallelism, do i need to write both ALTER SESSI...
Categories: DBA Blogs

update bulk row based on case statement

Tom Kyte - Thu, 2017-08-03 17:06
Hello Experts, We have a requirement as per below example, For Example, Need to create a procedure which fulfill below condition, create or replace procedure as <declaration part> Begin select emp_id,emp_name,mgr_id, (case when dep...
Categories: DBA Blogs

Pages

Subscribe to Oracle FAQ aggregator