New to Oracle 11g: The Server Result Cache

November 5, 2012 at 12:30 pm | Posted in Oracle, Technical Tips | Leave a comment
Tags: ,

If you’ve been using the Oracle database for as many years as I have, I’m sure you’ve noticed how Oracle tends to tweak the contents of the SGA from one release to the next. Oracle release 11g is no exception to that trend, and starting with this release we now have two more caches in the Shared Pool: one called the SQL Query Result Cache and another called the PL/SQL Function Result Cache. These two caches differ from virtually all of the remaining memory areas of the SGA in that the data stored in these two buffers are NOT blocks of data. Rather, the data stored is stored in terms of returned rows from either a SQL or PL/SQL command.

Why might Oracle choose to store the results of a user’s SQL command or the return results of a user’s PL/SQL function? Simply put, if a request for a query comes along that is identical to a previous query request that Oracle had stored in one of these buffers, then it’s possible for Oracle to re-use that prior result set. This technique is even better than checking to see if the commands are identical, so you can potentially save reparsing. If the prior result set matches the new request, and the prior result set is stored in the buffer, then we can skip the effort of parsing as well as any logical or physical reads to bring blocks into the database buffer cache. Obviously, Oracle has to be sure that the result set is still accurate before deciding to use it based on a subsequent SQL statement.

Oracle has the overall responsibility for managing these two new memory areas, but you can influence the optimizer using hints such as RESULT_CACHE, the DBMS_RESULT_CACHE package, and the RESULT_CACHE_MODE init.ora parameter. The following link in the Oracle 11gR2 documentation set,
http://docs.oracle.com/cd/E11882_01/server.112/e25789/memory.htm#CNCPT1920,
will take you to an overview explanation of these two buffer caches. It will also provide links to the details of the SQL Result Cache and another to the PL/SQL Function Result Cache.

Until next time,
– Bob the OrclTestGuy

Multiple options beyond multiple choice: an overview of Microsoft’s new exam item types

May 29, 2012 at 9:41 am | Posted in Microsoft, Study hints, Technical Tips, Vendor news | 4 Comments
Tags: , , , ,

As technologies evolve, so do the means of testing your technical knowledge. While the multiple choice standard still has its place, Microsoft and other major vendors are rapidly evolving beyond such mechanical (and easily braindumped) question formats. Microsoft has even released a catchy YouTube video on the subject:

An awful lot of research goes into the most effective question format. In the past few years we’ve seen an explosion of new item types and testing techniques. Some have been rolled out, some have been rolled back, and some are newly announced but haven’t yet been sighted in the wild.  Here are the ones encountered by the Transcender Team, with our notes on each.

Extended Matching

This item type was announced in early 2011 (Something New, Something Borrowed, Something Blue: Introducing a New Item Type on Certification Exams), but we didn’t encounter it in an exam until recently. George, our Microsoft Windows Server and SQL Server expert, first tackled extended matching on the beta exams for SQL Server 2012. Here’s what he had to say:

I encountered Build-list and reorder questions that required you to know the exact sequence in which tasks should be performed. There were also Active Screen items that required you to answer questions based on a scenario. I also saw the new “Extended Matching” questions. The Extended Matching questions looked kind of like case studies, because they were a set of multiple choice questions answered in one time frame. However, these did not have the usual four or five answer choices. No, each question had the same 14 choices.  The questions were slightly different, but the choices were the same. These question types caught me off guard and I found them completely confusing until I realized you could actually have the same correct answer for more than one question in the set.

The Extended Matching questions were like someone put a long multiple choice question, a matching question, and a pint of buttermilk in a blender, pulsed it,  left the horrible concoction on the kitchen table overnight, and then tricked you into drinking it in the morning. 

We’re hoping that you go into your exams a little more prepared than George, so we’re in the process of revising our 70-667 practice exam  and our 70-432 practice exam to include this new item type. This will give you the chance to get comfortable with how Extended Matching items are put together, and not be caught off guard on exam day.

Case studies and code case studies

Case studies (mini-tests that are timed separately from the SAMC/MAMC questions) are nothing new in the Microsoft world, but they did vanish from the testing scene for a few years, until recently (see George’s post, The Case Study Gets Its Groove Back). Because each case study has its own clock, the trick is not to let them eat into your overall exam time. However, the Code case study was a new twist on the concept. It was touted in Born To Learn last year (Code case studies: test drive our new item type for developer exams). Josh reported on this item type extensively here a few months back (They’re back: the return of the developer exam case study). They’ve been incorporated into all of our practice tests for these technologies.

As of this writing, you can still access Microsoft’s mockup code case study here: http://mcppoc.rangers.ms/

Short Answer Code

This item type will incorporate live coding into the exam, and as far back as our SMEs can remember, this item type is a first for Microsoft. Short answer code items were announced in October 2011  (Check Out the Short Answer Code Item Type). While we haven’t encountered this item type on a certification exam yet, here’s what we know about it so far: the item will have a field in which the candidate writes a short code segment to accomplish the task in the scenario. All the standard tools that would be available to a developer in real life (such as syntax checking) will be reproduced on the test, so in theory, you can’t trip yourself up with a simple mis-key or typo.

Have you encountered this item type yet? If so, we’d love to hear about it.

MAMC: Choose All that Apply

“Wait,” you say. “That’s not a new item type. That’s the same old multiple choice question that Microsoft (and Transcender) has been doing all along.”

Well, yes. But in the course of reviewing the most test-worthy item types, psychometricians made a surprising discovery: this classic structure is actually one of the hardest to answer without a thorough knowledge of the subject being tested.  You can read about the methods used by psychometrician Liberty Munson here, Investigating the Psychometric Performance of Our Item Types.

How many times have you encountered a multiple choice question where you weren’t sure of all the answers, but the fact that the question said “choose two” or “choose four” let you safely guess the parts that you weren’t sure about? If Microsoft has anything to say about it – and, let’s face it, they do – then this guessing technique will be ruled out. Fortunately, Transcender has used this MAMC structure in all of our practice tests, so users should be prepared to answer them on exam day.

What about simulations?

A few years ago, simulation exams were the item type of the future; almost impossible to braindump, and representing a real-world test of the user’s skills. Microsoft introduced the simulation format with the 83-640 Windows Server Configuring exam. Problems with exam delivery, though, sidelined this particular format, which reverted to the conventional 70-640.

While there may have been some setbacks, this was an excellent testing format, and it certainly shouldn’t be ruled out of future Microsoft exams. We think the live coding exams for developers represent one new direction in which to take simulations – the goal of which, after all, is to have the user perform real-life tasks.

For one last obsessive look at this subject, check out Liberty Munson’s Born To Learn post on Microsoft’s changing attitudes towards the building of certification exams (Exams Grow Up)

Happy testing!

–the Transcender Team

MERGE your application to improve performance

April 23, 2012 at 2:09 pm | Posted in Oracle, Technical Tips | Leave a comment
Tags: ,

Hello, Oraclites. Have you taken a look at the new (well, relatively new) MERGE command that is now part of ANSI SQL?  In many cases, incorporating the MERGE command into your application can replace writing a 10 to 20 line program in PL/SQL. And that will lead to significantly improved performance.  This is definitely one of those cases where “less is more.”

How does MERGE work?

The MERGE command functions as either an INSERT command or an UPDATE command all in one,  depending upon a condition that you specify.  And just like INSERT and UPDATE, the new MERGE command is a DML command.  If you totally hose your data trying out the new MERGE command, you can do a ROLLBACK.  No harm, no foul.

Here’s an example that everyone can probably relate to.  WIDGETS Incorporated has 10,000 active and inactive employees, and thus 10,000 rows in the emp table.  The column status contains an I for inactive employees, and an A for active employees.

Here is the description of the emp table:

id          NUMBER(5) PRIMARY KEY
name        VARCHAR2(20) NOT NULL
dept        VARCHAR2(10) NOT NULL
salary      NUMBER(10,2)
hire_date   DATE
status      CHAR(1)

There’s also a new_emp table created by HR and used nightly to update the emp table. HR assigns a new unique ID to new employees who have never worked for WIDGET before, but those who have are reassigned their previous ID. The number of rows in new_emp varies night by night, but averages around 20 rows. Usually one or two out of the 20 represents a rehire. The structure of the new_emp table is exactly the same as the emp table; only the data is different.

What HR wants to do, and the MERGE command allows them to accomplish, is to add the personnel data for a new hire who has never before worked for the company, and assign that employee a status of A (for active). In the same pass through the data, the command should update the emp table by locating inactive employees who have been rehired.  When those records are found, the status should be changed from Inactive to Active, and the starting salary when this person is rehired should be updated in his or her row in the emp table. We’ll take care of updating the other columns later.

MERGE INTO emp E
USING (SELECT id, name, dept, salary FROM new_emp) N
ON (e.id = n.id)
WHEN MATCHED THEN UPDATE SET E.dept = N.dept, E.salary = N.salary, E.hire_date = sysdate, E.status = ‘A’
WHEN NOT MATCHED THEN INSERT VALUES (N.id, N.name, N.dept, N.salary, SYSDATE, ‘A’);

This should solve their problem!  The merge (either Inserts or Updates) are going to happen to the emp table.  We are going to use the data returned by the SELECT to compare each returned row with each row in emp to determine if the values of id are equal.  If they are, we’ll do the update in the “WHEN MATCHED” clause.  If they aren’t equal, we’ll do the INSERT in the “WHEN NOT MATCHED” clause.

That’s pretty neat, and what’s really great is we don’t need to write a program to accomplish it. Furthermore, we can deal with all the rows in a single pass of the data.

If you like this, take a look at multitable INSERTS, another great feature for developers and DBAs.

–Bob the OrclTestGuy

Using Function-Based Indexes to Improve Oracle Performance

April 6, 2012 at 10:08 am | Posted in Oracle, Technical Tips | Leave a comment
Tags: ,

There are a number of reasonably easy steps that database administrators and database developers can take to improve the performance of both an Oracle database and the applications that run against the database. Some of these steps would probably be considered the responsibility of the DBA; others would typically be handled by the application developer. Of course, there are a number of shops where the IT professional wears multiple hats, so I’ll just provide the tuning information and leave it to you to determine who in your shop might find this useful.

Function-Based Indexes

Let’s take a look at the world of indexes when it comes to speeding up data retrieval. Normally, it would be good practice to put an index on a column of a table when the following conditions are met:

  1. The table is relatively large.
  2. The column doesn’t have many nulls.
  3. The data in the column has good cardinality.
  4. There isn’t a lot of DML activity against that column going on in your database.
  5. Your application code often uses that column to search or sort.
  6. The indexed column isn’t typically involved in a mathematical expression or a function.

Take a look at this code:

SELECT student_id, major, class, advisor FROM students WHERE last_name = ‘Monsalvatge’

Assuming there are thousands of rows in the students table, and that there are very few rows where last_name is NULL, there are very few last names that are identical, last names don’t need to be updated often, and that our statement runs many times during the day, then according to the 6 rules above it would be a good idea to create a B-tree index on that column. (I wrote more about B-tree indexes in this post here.)

But now consider this situation. Suppose the way last names got entered into the table wasn’t very well controlled. Different users used different capitalization standards when they entered the last names. Some had the last name in all caps, some had it in mixed case, and others had it in all lowercase. If the last name stored in the database is ‘MONSALVATGE’ or ‘monsalvatge’ or ‘MonSalvatge’, it will not match the literal ‘Monsalvatge’ string in the SELECT statement, regardless of whether there is or isn’t an index on the last_name column.

But you’re a smart person, so you have a fix. You write your code like this:

SELECT student_id, major, class, advisor FROM students WHERE INITCAP(last_name) = ‘Monsalvatge’

Now the SELECT statement will find what it’s supposed to find regardless of how the capitalization of last_name is stored in the database. Good job!

That’s the good news, but there’s some bad news as well. Remember that index we built on the last_name column? It’s still there, but guess what? According to rules above, the column we have indexed (at least in this specific SELECT statement) is having the function INITCAP applied to the column before the WHERE clause comparison is made. When that happens, the optimizer is unable to use the index on that column. The same would be true is we performed any other manipulation or function to the last_name column.

Consider this SELECT:

SELECT student_id, major, class, advisor FROM students WHERE tuition > 5000

In this case, if the six conditions listed above are met, then you probably want an index on the tuition column. However, if there was B-tree index on the tuition column and your SELECT was written like this:

SELECT student_id, major, class, advisor FROM students WHERE
tuition + 1 > 5000

then the optimizer would be unable to use that index because it has a mathematical expression on the index column (namely, add 1 dollar).

Interestingly enough, this SELECT statement is logically equivalent to the previous one:

SELECT student_id, major, class, advisor FROM students WHERE
tuition > 5000 – 1

Recall from algebra class that adding 1 (one) to the left side of an equation or inequality is the same thing as subtracting 1 (one) from the right-hand side. Furthermore, the optimizer, when building the parse tree and execution plan, will be able to choose using that index on tuition, since the functions and/or mathematical work is on the other side of the equation/inequality.

So how do you solve this dilemma? If you don’t put in the function to adjust the capitalization on last name, then you won’t get all of the correct answers. That’s unacceptable! If you put the INITCAP function into your SQL statement, you will get all of the correct answers, but the performance will take a hit since the optimizer won’t be able to use the index you created on last_name.

To give you the best of both worlds, Oracle created function-based indexes. This is simply an index that is built, not on the column, but on the function or mathematical expression defined on the column. For example, to create an index on the INITCAP function applied to the last name column, you simply type the following:

CREATE INDEX my_func_indx_1 ON students(INITCAP(last_name))

And, if you want to create an index on the tuition column plus $1, you would simply type the following:

CREATE INDEX my_index ON students(tuition + 1)

You can even have more than one function-based index on the same column. For example, you might have one index on the INITCAP of last_name, and another on the UPPER of last_name.

Search your application code, and I’ll bet you that there are a number of places where these function-based indexes will speed up the performance of your queries.

Until next time,

–Bob the orcltestguy

IT Interview Tips

April 4, 2012 at 12:41 pm | Posted in Technical Tips, Transcender news | Leave a comment
Tags: , , ,

A while back one of our team members ran across this LifeHacker post on IT job interviewing, provocatively titled Why I Won’t Hire You. The post stirred some spirited debate with the Transcender Team. Some of us thought it was refreshingly honest and contained valuable insights for a potential job candidate. One of us thought the author deserved a punch in the nose (metaphorically only — we’re not violent people, except where fantasy football/basketball is concerned).

Joking aside, we then sat around and discussed whether people need specific advice on interviewing for an IT job versus a non-IT job. Then we sat around and exchanged stories about people we’d actually interviewed for jobs who had made strange common-sense errors. Turns out we’ve seen it all kinds of quirks, from the classic typos-on-the-resume errors to showing up with their portfolio in a paper grocery sack.

Assuming you are qualified for the job you are applying for, you will have to go through a series of interviews.  First there’s typically a screening, usually over the telephone but it can be in person where the employers will evaluate your overall fitness as a candidate. If you make it beyond the screening interview, you may go on to a series of interviews with the people in the department that will hire you — and that’s just the beginning. You might be called to dozens of interviews. Conclusion? That’s a lot of face time. So we feel there can *never* be enough tips out there to help an inexperienced (or experienced) job seeker ace an interview.

Here are some tips that might help you land the job.

Show up early   

If you are on time, I consider that you’re late. Arriving late does not leave a good impression. I recommend that you show up at the interview site at least 30 minutes prior to schedule. This will give you a few moments for last-minute prep for the interview. However, make sure that you check in for your interview no earlier than 10 minutes prior to the actual appointment time, because arriving too early could backfire if that person thinks you don’t value their time. So kill those extra 20 minutes in the parking lot or the reception area. While you’re there, take a sneak peak at the office environment and get a glimpse of the office culture.

Research the company   

It’s easy to win friends by talking about other people rather than yourself. However in an interview you need to sell yourself.  Take some time before the interview and study the company that you are interviewing. Learn about the company, but don’t regurgitate the company’s website or annual report. If possible, try to learn as much about the department that will be interviewing you.  You can set yourself apart from other interviewees if you can highlight your assets in relation to their specific needs.  For example, if you know the company will be installing several SQL server instances and will need support, you should highlight your previous experience of managing, maintaining, backing up, and restoring databases on a SQL server. Remember, though, that the person conducting the screening interview may not be technical, so keep your experience to what is advertised in the job posting.

Dress for success  

The days of people wearing Brooks Brothers suits and 100% cotton starched shirts may be gone. People tend to dress business casual in the workplace, and go even more casual in the IT world.  To stand apart from the herd of candidates, you need to be neat and clean.  You don’t have to look like you are ready to pick up your prom date at your parent’s house, but in a way, an interview is like a speed date. You need to make a good impression fast. Your date is not going to appreciate an unclean, unkempt person, or the person who over-dresses. I try to know what their office dress code is and aim to go one step above it. 

In my role as a trainer I’m frequently asked about tattoos and piercings on a job candidate.  I do not have a tattoo or piercing and not going to get any, but they don’t bother me. If the person can do the job and gets along with other team members, why should I care?  But – and this is a big but – the person conducting the interview may not share your same view on tattoos and piercing. Many companies ask employees to keep tattoos covered in the workplace.  For an interview, I recommend you cover the body art and remove piercings.  An HR employee at a large company once told me, “Tattoos and piercings are not professional and we only hire professionals.” Does having a tattoo or a piercing mean that you cannot do the job?  Of course not; that’s ridiculous.  Do employers hire people based on looks?  Well, a company cannot discriminate against you based on sex, religion, race, age or reproductive status, but they can certainly choose to not hire you based on looks.  If you look like you fell into a tackle box or you have tattoos like a member of the band Motley Crue, expect the hiring company to hold that against you. It may not be fair, but it is legal.  

Expect to prove your skills   

You should expect to have some skills test, written test or combination of both in order to gain employment.  I am from the school of thought that people do not intentionally lie on a resume, but they may stretch the truth. A prospective employer has the right to call you on your skills and experience. The information that you put down on a resume should be corroborated by someone else at your current job or previous job.  Do not expect an employer to accept the fact that you can do a particular task because a person you work with and a person they have never met says that you can.

When I interviewed for a LAN administrator’s job, I was called back to perform a  series of tasks within a 30 minute time frame in a lab the company had set up.  That was the fastest 30 minutes of my life. The company wanted a highly skilled candidate that worked quickly. This was their way of weeding out candidates.

Do not lie  

As I said before, people tend to stretch the truth on a resume, but you should not out-and-out lie. If you lie about certifications, degrees, or other items that can be checked, you will get busted.  Expect to give the prospective employer a copy of your certification transcript or your certification ID number.  For example, if you are certified in a Microsoft product, you will get a Microsoft Certified Professional (MCP) number which can be used by a prospective employer to check your Microsoft transcript. CompTIA, Oracle, and Cisco also issue IDs for their certified professionals.  If it can be checked, do not lie about it.  Even little lies will get you in trouble.

Another true story – a hiring manager had to choose between two candidates. One candidate, who was only was a casual jogger, said that he ran in the 2008 Boston Marathon and placed in his age group. The hiring manager looked this information up on the Internet and found it to not be true. That candidate did not get the job. The hiring manager said if he lied about running in the Boston Marathon, he could have lied about anything else.  

Oh yeah – and pictures say a thousand words. Start vetting your social profiles — Twitter, Facebook, Google+, and so on – before you apply for jobs. Those pictures you have on Facebook may not paint a very favorable picture of yourself. Any modern employer will do a quick background check on you. Expect them to look at your Facebook page. Make sure there is nothing there that will cost you a job.

Another true story. Former Georgia Tech football coach George O’Leary was named head football coach at Notre Dame in 2001, but had to resign a few days later for resume’ padding. Although the padding was on his resume for over twenty years, he had never rechecked and updated the information. Although Coach O’ Leary has bounced back at University of Central Florida, winning conference titles, winning bowl games, and being a positive influence in the lives of young athletes, he may be remembered by some as the guy who once lost a job for resume padding — and that truly is a shame.

The demand for IT professionals is increasing. There are many challenging opportunities opening up. With a little preparation, you too can present yourself as the top notch candidate who will be hard to pass up.

Rebirth of the Webinar

March 16, 2012 at 10:14 am | Posted in Oracle, Technical Tips, Vendor news | Leave a comment
Tags: , , , , ,

As a technology professional, it is not uncommon to find yourself attending product training and demonstrations. Luckily, many of these events no longer require expensive face-to-face time. Unfortunately, the term webinar leaves a bad taste in many people’s mouths. That’s because often these events boil down to a poorly organized sales meeting led by a person that likes the sound of their own voice. Don’t judge….you know what I’m talking about.

So, when I attended the Oracle Virtual Developer Days for WebLogic Server 12c and Java 7, I was not expecting anything beyond the standard webinar. I could not have been more wrong! Their functional presentation and depth of information blew me away.  Besides the requisite keynote session, there were breakout tracks that included a focused Q/A and hands-on labs and even a networking lounge to chat with other attendees. Overall, the experience was engaging, easy-to-navigate and best of all, educational.

Virtual Campus

Virtual Sessions

I had only minor hiccups with the video streaming, and those were quickly addressed using the chat, where moderators helped to resolve this (among many, I’m sure) issue. All of the presentations were pre-recorded, so I could pause and rewind as needed. The hands-on-labs required me to download and install software prior, but this was a lot less buggy than working in virtual cloud.

Having used this dynamic Oracle Developer Day platform, I am now spoiled. We can only hope other vendors take a page from Oracle and up their virtual education game to this level. I’ll keep you posted on any other webinar gems, and if you’ve attended one that you loved be sure to share the new here.

–Josh Hester

“Divide and Conquer” with partitioning in Oracle

February 29, 2012 at 5:25 pm | Posted in Oracle, Technical Tips | Leave a comment
Tags: ,

One of the best features of the Oracle RDBMS over the last ten years has been partitioning. If your shop needs to handle large volumes of data, if you are running OLAP applications, if you often need to move datasets around, if you are responsible for staging data for a rolling  twelve-month period, or if you want to improve the performance of you SQL statements, then this is the tool for you!

The basic idea behind partitioning is “divide and conquer”. We’re going to take a very large object (such as a table with six million rows), divide it into logical piece parts, and then manage the smaller pieces. Oracle provides us with a number of different strategies on how we can divide our data. If your data represented orders from your customers, and that was a stored column in the table, you could partition your data by order date. You could break the data into twelve partitions, one for order data for each month over the past year. You could also break your table data into partitions by a selected range. For example, all customers whose last name begins with A – C could go in partition 1, D – H into partition 2, etc.

Another way to “divide and conquer” is to partition by a list when you have discrete values. For example, customers who live in Illinois and Indiana go into partition 1; Pennsylvania, Ohio, and Kentucky go into partition 2; and so on.

Now that you’ve got the idea, let’s talk about the benefits of this tactic. If you can divide your data into 10 partitions, each partition can go into its own tablespace. Radical, huh? That means if you need to move the customers whose last names begin with A – C, you only need to move that single partition, not the entire table. If the data is divided into ten partitions of approximately the same number of row, you will only need to move 10% of the data, instead of 100%. The same is true if you only need to back up one specific partition; your typical O/S tasks would only take 10% of the time they used to take.

The optimizer is also aware of partitioning. If you query your customer table looking for a customer whose last name is Baker, the optimizer knows that it only needs to search in Partition1, since this partition contains customers whose last names range from A – C. You don’t have to spend any time searching through the other nine partitions, because Oracle knows it will never find what you’re looking for in any of the remaining partitions. You can also choose to create an index on just that partition.

There’s still a lot more to know about partitioning, and I encourage you to take a look at it, especially if the size of your Oracle datafiles is starting to become unmanageable, and you’re seeing a degradation of performance at the same time.

Start with the following resources:

Oracle Database Concepts 11g Release 2 (11.2)
Chapter 4  Partitions, Views, and Other Schema Objects
http://docs.oracle.com/cd/E11882_01/server.112/e25789/schemaob.htm#CFAGCHCD
Also, another title that is related to this topic is VLDB Oracle® Database VLDB and Partitioning Guide 11g Release 2 (11.2), Part Number E25523-01. Chapters 2, 3, 4, 5, 6, and 7 all address partitioning.

I hope that you can learn whether this technique is something that could benefit you and your organization.
The OrclTestGuy

The Year of the Developer

February 17, 2012 at 11:39 am | Posted in Technical Tips, Vendor news | Leave a comment
Tags: , , , , , , , , , , , , , , , , , , , , , , , ,

Did I get your attention? I hope so, but let’s be honest: it’s been the Year of the Developer since 1954. As wonderful as it is to have the latest gadget goodness in your hand, without developers, that gadget does a whole lot of nothing. Arguably, the adoption of shiny devices and powerful operating systems is directly proportional to the software that runs on it.

IBM 704 mainframe that uses FORTRAN

IBM 704 mainframe that uses FORTRAN

But I do have a more salient point beyond giving the developer community a pat on the back.

Development in 2012

What does the future look like? Better yet, which skills should you focus on in the upcoming year? Justin at TechRepublic actually beat me to the punch on this one, so rather than rehash the whole article, I’ll just throw in my two cents.

Mobile Development

This one should be fairly obvious. What isn’t so obvious is how fragmented the mobile field really is. An iPhone, Android, and Blackberry device all do very similar things and contain very similar components and UIs, but the back-end development for these platforms is entirely different.  Let’s not even discuss the form factor differences between these smartphones and their tablet cousins.

I predict the ascendance of uniform development kits like Red Foundry and  PhoneGap/PhoneGapBuild to level the playing field. PhoneGap, in particular, leverages Web development skills such as jQuery and HTML5.

NoSQL Continue Reading The Year of the Developer…

What’s new in Exchange 2010 with the latest Service Packs?

January 20, 2012 at 4:26 pm | Posted in Microsoft, Technical Tips | Leave a comment
Tags: , ,

Although it hasn’t been too long since Exchange 2010 SP1 was rolled out, Exchange 2010 SP2 was recently released. When reviewing the changes between service packs, you need to remember that changes are cumulative, and features introduced in SP1 will be rolled into SP2. I’ve prepared an overview of the enhancements featured in both service packs that you might find the most helpful in your daily work or in preparing for an exam.

We live our lives under the microscope. As an Exchange administrator, you will need to track changes made for regulatory compliance. Exchange 2010 SP1 allowed enhanced auditing ability. Audit logs are accessed using the Exchange Control Panel (ECP) Auditing Reports page or the Search-AdminAuditLog or New-AdminAuditLogSearch cmdlets. The new audit abilities of the Exchange service packs allow you to discover who logged into a mailbox and what actions were taken there. You can now track mailbox access by mailbox owners, delegates, and administrators, check whether a message was moved or deleted, and discover whether, when, and how a mailbox folder or message was accessed.

If you had to place a litigation hold on a mailbox, you could not remove the mailbox or disable the mailbox while the mailbox has a litigation hold. However, SP2 now allows you to bypass this restriction by using the IgnoreLegalHold switch parameter when removing or disabling the mailbox with the Disable-Mailbox or Remove-Mailbox cmdlets.

There are several enhancements to your ability to track messages with the latest Exchange 2010 service pack. There are new event log entries, alerts, and performance monitor alerts that can be used to monitor and troubleshoot message tracking. You can get logs of every operation that was executed by a Client Access server processing a delivery report request to ensure detailed tracking.

You can use the Exchange Control Panel (ECP) to manage Exchange ActiveSync devices. You can use the ECP to allow or block a specific mobile phone or device for a specific user. You can set up alerts when a mobile device is quarantined.

With SP2, a mini version of Outlook Web App has been rolled into the interface. It was designed to work with a mobile operating system so that users can perform most e-mail actions from a mobile device, and relies on Basic authentication. To access the mini version of Outlook Web App, append /oma to your Outlook Web App URL. For example, if your Outlook Web App URL is https://mail.nutex.com, the URL for the mini version of Outlook Web App would be something like https://mail.nutex.com/owa/oma.

You now have wizards to help streamline the process of configuring a hybrid deployment between an on-premises organization and Office 365 Exchange organization. The new Hybrid Configuration Wizard creates the foundation for the hybrid deployment. The Manage Hybrid Configuration wizard configures your Exchange organization for the hybrid deployment.

You should review the permission enhancements rolled out with Exchange 2010 SP1. With the new enhancements, you can limit which databases certain administrators can manage and control via database scopes. Unfortunately, this feature is not backwards compatible to Exchange 2010 RTM. Database scopes cannot be viewed, modified or deleted from Exchange 2010 RTM servers.

Exchange administrators and Active Directory administrators have separate duties. Continue Reading What’s new in Exchange 2010 with the latest Service Packs?…

Additional Oracle Exam Tips to Prevent Common Mistakes

November 23, 2011 at 1:33 pm | Posted in Oracle, Study hints, Technical Tips | 2 Comments
Tags: ,

One component of my job as the Oracle Content Developer at Kaplan/Transcender is to review the trouble tickets that we receive from customers using our practice exams. This gives me invaluable insight into “why” students sometimes choose the wrong answer 0n our practice test (and by extension the live exam), even when their technical knowledge of that subject matter is quite good.

I’d like to share with you two of the common errors, as well as strategies which hopefully will serve you well when taking an exam, so you can hopefully avoid these types of mistakes.

Error #1: Dating Yourself

One very common error involves the use of dates, especially when sorting. Remember that if a column in a table or a variable in a PL/SQL block of code is defined as DATE, that value internally stores all the detail to point to an exact second anywhere between 4712BC and 9999AD. Also, you can subtract dates, which creates a difference that has a datatype of NUMBER. That number will represent the number of days (and fractional parts of a day) between the two dates. Suppose your SELECT statement looks like this:

SQL> SELECT id, name, (sysdate – hiredate) AS SENIORITY FROM emp ORDER BY SENIORITY;

If you want this report sorted by seniority, with the person working at the company for the longest period of time to be first, is this the correct way to sort, or should you sort in descending order? Well, the difference between sysdate and hiredate will be the largest number when hiredate is the earliest date possible (since SYSDATE stays constant if you perform this operation for all employees at the same time). Since you want the person where that difference is the greatest to be first, you need to sort descending (DESC) on SENIORITY. Some people find this counter-intuitive, so be sure to think this through carefully on the exam.

Error #2: Evaluating NULL

The use of NULL can sometimes throw off a student who is well prepared for the exam. NULL can be assigned to a variable, in which case it means you don’t know the value of that variable. NULL can also be assigned to the truth value of an expression, in which case it means you don’t know whether the statement is TRUE or FALSE. If you remember NULL like this, things will make sense. Let’s try a few examples.

Evaluate the following:

a. x + 5 where x is 4.

The answer is 9.

b. X + 5, where x is NULL

Since I don’t know what x is, I can’t figure out x+5. Thus the answer for x + 5 is NULL (I don’t know)

c. 6 (x+2) / x * 7 – 3, where x is NULL.

If you don’t know x, you can’t figure this out. Thus the answer for this expression is I don’t know (NULL).

d. WHERE X + 2 > 10, where X is 5.

This is an expression which has a truth value. The choices are either TRUE, FALSE, or NULL. In this case, since x is 5, the expression becomes WHERE 5 + 2 > 10, which is false. The expression’s TRUTH VALUE is FALSE. If that WHERE clause was part of a SELECT statement, when Oracle was searching through the table and got to the row where x is 5, that row would not be displayed since only rows that evaluate to TRUE are displayed.

e. WHERE X + 2 > 10, where x is NULL.

This is also an expression which has a truth value. Since x is NULL, I can’t compute x + 2. Therefore, I can’t determine whether the statement x + 2 > 10 is TRUE or FALSE. Consequently, the TRUTH VALUE of this expression is NULL. If that WHERE clause was part of a SELECT statement, when Oracle was searching through the table and got to the row where x is NULL, that row would not be displayed since only rows that evaluate to TRUE are displayed.

f. WHERE x + 2 > 10 OR y + 3 = 10, where x is NULL (unknown) and y is 7.

This is an expression and consequently has a truth value. It is a compound expression separated by an OR. Since x is unknown, the value of x + 2 is also unknown. Since x + 2 is not known, we can’t tell whether the statement x + 2 > 10 is true or false. Therefore, it is NULL. For the second condition in the WHERE clause, since y is 7, then 7+ 3 is 10, and hence the second condition is TRUE. Therefore, the truth value is now NULL OR TRUE. Since the separator is OR, only one of the two conditions needs to be true to make the entire expression true.

To put this another way, if the first condition was TRUE, the overall expression would be TRUE. However, if the first condition was FALSE, the overall expression would still be TRUE. Therefore, it doesn’t matter what the truth value of the first part of the expression is, the result will still always be TRUE. So if the first part is NULL, the overall result will still be TRUE.

Just for fun, Evaluate these expressions to either TRUE, FALSE, or NULL. The answers are located at the bottom.
1. Condition A OR Condition B where Condition A is True and Condition B is False
2. Condition A OR Condition B where Condition A is False and Condition B is NULL
3. Condition A AND Condition B where Condition A is NULL and Condition B is TRUE
4. Condition A AND Condition B where Condition A is False and Condition B is NULL
5. NOT Condition A where Condition A is False
6. NOT Condition B where Condition B is NULL
7. Condition A OR Condition B where both Conditions are NULL
8. Condition A AND Condition B where both Conditions are NULL

Until next time,
Bob Bungenstock aka Orcltestguy

Answers 1. TRUE 2. FALSE 3. NULL 4. FALSE 5. TRUE 6. NULL 7. NULL 8. NULL

Next Page »

Blog at WordPress.com. | Theme: Customized Pool by Borja Fernandez.
Entries and comments feeds.

Follow

Get every new post delivered to your Inbox.

Join 35 other followers

%d bloggers like this: