Vous êtes sur la page 1sur 6

Oracle Cheat Sheet

1 of 6

http://software.clapper.org/cheat-sheets/oracle.html#if-database-is-hung-...

Oracle Cheat Sheet


Getting a list of indexes
The query

SELECT INDEX_NAME FROM DBA_INDEXES

will list the names of all non-system indexes. Also, from


http://technet.oracle.com/docs/products/oracle8i/doc_index.htm
System index views USER_INDEXES, ALL_INDEXES, and
DBA_INDEXES indicate
bitmap indexes by the word BITMAP appearing in the TYPE
column. A bitmap
index cannot be declared as UNIQUE.
Must have system privileges to issue the query.

Getting a cross-reference of tables and


their indexes

Table of Contents
Getting a list of indexes
Getting a cross-reference of
tables and their indexes
Determining the indexes on a
table
Getting the names of indexes
for a table
Determining the columns on
which an index is based:
Other useful metadata queries
Creating a user
Changing users password
Sharing tables between two users
Creating a public synonym for a
table
Granting DBA privileges to a user
Creating a rollback segment:
If database is hung shutting down
or starting up
Dumping and Restoring an Oracle
Database
Dump:
Restore
Oracle 9.2.0 Intermedia
Problems:
CTX_DDL must be declared
Error during stored procedure
definition
Insufficient privilege error
EXPLAIN PLAN and Autotrace
Managing statistics for the
cost-based optimizer
After bringing up database, cant
connect via SQL*Plus.

SELECT table_name, index_name FROM dba_indexes WHERE table_name = 'TABLENAME'

Must have system privileges to issue the query.

Determining the indexes on a table


Getting the names of indexes for a table
SELECT INDEX_NAME name FROM USER_INDEXES
WHERE TABLE_NAME = 'table_name' AND GENERATED = 'N';

Determining the columns on which an index is based:

5/14/2015 9:20 PM

Oracle Cheat Sheet

2 of 6

http://software.clapper.org/cheat-sheets/oracle.html#if-database-is-hung-...

SELECT aic.index_name,
aic.column_name,
aic.column_position,
aic.descend,
aic.table_owner,
CASE alc.constraint_type
WHEN 'U' THEN 'UNIQUE'
WHEN 'P' THEN 'PRIMARY KEY'
ELSE ''
END AS index_type
FROM all_ind_columns aic
LEFT JOIN all_constraints alc
ON aic.index_name = alc.constraint_name
AND aic.table_name = alc.table_name
AND aic.table_owner = alc.owner
WHERE aic.table_name = 'TEST2'
-- table name
--AND aic.table_owner = 'HR'
-- table owner
--AND aic.index_name = 'TEST2_FIELD5_IDX' -- index name
ORDER BY column_position;

Other useful metadata queries


See http://www.alberton.info/oracle_meta_info.html

Creating a user
In SQL*Plus, connect as SYSTEM/MANAGER@dbname. Then, issue the following
SQL:

CREATE USER user IDENTIFIED BY password


DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;

For example:

CREATE USER user1 IDENTIFIED BY mypassword


DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;

Next, grant appropriate privileges to the new user:

GRANT connect, resource TO user1;

In SQL*Plus, connect as user1/mypassword@dbname. Create tables, indexes,


etc Theyll be owned by the new user.

Changing users password


ALTER USER user IDENTIFIED BY password

Sharing tables between two users

5/14/2015 9:20 PM

Oracle Cheat Sheet

http://software.clapper.org/cheat-sheets/oracle.html#if-database-is-hung-...

Create a second user, user2. (See above) Then, connect as user1, and
issue this command:

GRANT insert, update, delete, select on user1.table1 TO user2;

Do this for all appropriate tables/indexes.


Now, if user2 logs in, he can access user1.table1, but he must
refer to it as user1.table1. You can create a public synonym for
the table to make this easier. See below.

Creating a public synonym for a table


Log in as the tables owner (user1, in this example), and issue this SQL:

CREATE PUBLIC SYNONYM table1 FOR user1.table1

Granting DBA privileges to a user


In a word: Dont. Instead, grant the appropriate privileges on the
appropriate tables to an unprivileged user.

Creating a rollback segment:


Connect as SYSTEM/MANAGER, then:

CREATE ROLLBACK SEGMENT segname TABLESPACE USERS;

Then, add the rollback segment name to the initXXX.ora file for the
instance.

If database is hung shutting down or starting up


As Oracle user:

$ svrmgrl
Oracle8i Enterprise Edition Release 8.1.5.0.2 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production
SVRMGR>
SVRMGR>
SVRMGR>
SVRMGR>

connect internal
shutdown
startup force
^D

If that fails, try killing the Oracle processes. Then, since Oracle uses
two of the three evil sisters, semaphores and shared memory, ipcrm the
Oracle-owned one after the kill -9 and it should restart.

Dumping and Restoring an Oracle Database


Dump:

3 of 6

5/14/2015 9:20 PM

Oracle Cheat Sheet

4 of 6

http://software.clapper.org/cheat-sheets/oracle.html#if-database-is-hung-...

sqlplus system/manager <<EOF


grant dba to user1;
EOF
exp user1/password@instance # accept defaults, except for "Export entire
# database". Choose "1" for that.

When prompted with

(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U >

accept the default (U), and enter the appropriate user name (i.e., the
owner of the tables) when prompted.

sqlplus system/manager <<EOF


revoke dba from user1;
EOF

Restore
Drop all existing tables and indexes in same db first.

sqlplus system/manager <<EOF


grant dba to user1;
EOF
imp user1/password@instance
sqlplus system/manager <<EOF
revoke dba from user1;
EOF

May have to restore SYSTEM accounts password afterwards.

Oracle 9.2.0 Intermedia Problems:


CTX_DDL must be declared
If this error occurs:

PLS-00201: identifier 'CTX_DDL' must be declared

then the user doesnt have appropriate privileges. This seems to cure the
problem:

sqlplus system/manager@instance <<EOF


grant ctxapp to user1
EOF

5/14/2015 9:20 PM

Oracle Cheat Sheet

5 of 6

http://software.clapper.org/cheat-sheets/oracle.html#if-database-is-hung-...

Error during stored procedure definition


If the above error occurs during definition of a stored procedure, then:

sqlplus system/manager@instance <<EOF


grant create any procedure to user1
EOF

Insufficient privilege error


If you THEN get:

PLS-00904: insufficient privilege to access object CTXSYS.CTX_DDL

try:

sqlplus system/manager@instance <<EOF


grant execute on CTXSYS.CTX_DDL to user1;
EOF

EXPLAIN PLAN and Autotrace


Create the relevant tables in the schema, e.g.:

sqlplus user1/password@instance @$ORACLE_HOME/rdbms/admin/utlxplan.sql

Create the PLUSTRACE role, etc.:

sqlplus /nolog <<EOF


connect / as sysdba
@$ORACLE_HOME/sqlplus/admin/plustrce.sql
EOF

Grant the PLUSTRACE role to the user who owns the DB:

sqlplus system/manager@instance <<EOF


grant plustrace to user1;
EOF

Can now run EXPLAIN PLAN (see Oracle docs) or autotrace.

sqlplus user1/password@instance
SQL> set autotrace trace|on|off
SQL> <statement(s)>

5/14/2015 9:20 PM

Oracle Cheat Sheet

http://software.clapper.org/cheat-sheets/oracle.html#if-database-is-hung-...

trace says to run the statement(s) and print the plan(s), but avoid
displaying any results.
on prints the plan(s) and the results.

Managing statistics for the cost-based optimizer


Creating statistics for the cost-based optimizer

sqlplus system/manager@instance <<EOF


EXEC DBMS_UTILITY.analyze_schema('IACCEL', 'COMPUTE')
EOF

Deleting those statistics:

sqlplus system/manager@instance <<EOF


EXEC DBMS_UTILITY.analyze_schema('IACCEL', 'DELETE')
EOF

After bringing up database, cant connect via SQL*Plus.


Try waiting a minute or two.
Generated by Jekyll.

6 of 6

5/14/2015 9:20 PM

Vous aimerez peut-être aussi