51. (On UNIX) When should more than one DB writer process be used? How many should be used


If the UNIX system being used is capable of asynchronous IO then only one is required, if the system is not capable of asynchronous IO then up to twice the number of disks used by Oracle number of DB writers should be specified by use of the db_writers initialization parameter.



52. You are using hot backup without being in archivelog mode, can you recover in the event of a failure? Why or why not


You can?t use hot backup without being in archivelog mode. So no, you couldn?t recover.



53. What causes the “snapshot too old” error? How can this be prevented or mitigated


This is caused by large or long running transactions that have either wrapped onto their own rollback space or have had another transaction write on part of their rollback space. This can be prevented or mitigated by breaking the transaction into a set of smaller transactions or increasing the size of the rollback segments and their extents.



54. How can you tell if a database object is invalid

By checking the status column of the DBA_, ALL_ or USER_OBJECTS views, depending upon whether you own or only have permission on the view or are using a DBA account.



55. A user is getting an ORA-00942 error yet you know you have granted them permission on the table, what else should you check


You need to check that the user has specified the full name of the object (select empid from scott.emp; instead of select empid from emp;) or has a synonym that balls to the object (create synonym emp for scott.emp;)

56. A developer is trying to create a view and the database won?t let him. He has the “DEVELOPER” role which has the “CREATE VIEW” system privilege and SELECT grants on the tables he is using, what is the problem


You need to verify the developer has direct grants on all tables used in the view. You can?t create a stored object with grants given through views.



57. If you have an example table, what is the best way to get sizing data for the production table implementation


The best way is to analyze the table and then use the data provided in the DBA_TABLES view to get the average row length and other pertinent data for the calculation. The quick and dirty way is to look at the number of blocks the table is actually using and ratio the number of rows in the table to its number of blocks against the number of expected rows.



58. How can you find out how many users are currently logged into the database? How can you find their operating system id


There are several ways. One is to look at the v$session or v$process views. Another way is to check the current_logins parameter in the v$sysstat view. Another if you are on UNIX is to do a “ps -ef|grep oracle|wc -l? command, but this only works against a single instance installation.



59. A user selects from a sequence and gets back two values, his select is:

SELECT pk_seq.nextval FROM dual;What is the problem

Somehow two values have been inserted into the dual table. This table is a single row, single column table that should only have one value in it.

60. How can you determine if an index needs to be dropped and rebuilt


Run the ANALYZE INDEX command on the index to validate its structure and then calculate the ratio of LF_BLK_LEN/LF_BLK_LEN+BR_BLK_LEN and if it isn?t near 1.0 (i.e. greater than 0.7 or so) then the index should be rebuilt. Or if the ratio

BR_BLK_LEN/ LF_BLK_LEN+BR_BLK_LEN is nearing 0.3.


61  How can variables be passed to a SQL routine


By use of the & symbol. For passing in variables the numbers 1-8 can be used (&1, &2,…,&8) to pass the values after the command into the SQLPLUS session. To be prompted for a specific variable, place the ampersanded variable in the code itself:

“select * from dba_tables where owner=&owner_name;” . Use of double ampersands tells SQLPLUS to resubstitute the value for each subsequent use of the variable, a single ampersand will cause a reprompt for the value unless an ACCEPT statement is used to get the value from the user.



62. You want to include a carriage return/linefeed in your output from a SQL script, how can you do this


The best method is to use the CHR() function (CHR(10) is a return/linefeed) and the concatenation function “||”. Another method, although it is hard to document and isn?t always portable is to use the return/linefeed as a part of a quoted string.



63. How can you call a PL/SQL procedure from SQL


By use of the EXECUTE (short form EXEC) command.