Oracle Database Administration FAQ

Published on June 2016 | Categories: Documents | Downloads: 104 | Comments: 0 | Views: 1134
of 7
Download PDF   Embed   Report

Comments

Content

Oracle Database Administration FAQ
One can also create databases manually using scripts. This option, however, is falling out of fashion as it is quite involved and error prone. Look at this example for creating and Oracle 9i or higer database: CONNECT SYS AS SYSDBA ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u01/oradata/'; ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_1='/u02/oradata/'; ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_2='/u03/oradata/'; CREATE DATABASE;  Back to top of file

How does one rename a database?
Follow these steps to rename a database: 1. Start by making a full database backup of your database (in case you need to restore if this procedure is not working). 2. Execute this command from sqlplus while connected to 'SYS AS SYSDBA':
ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;

2. Locate the latest dump file in your USER_DUMP_DEST directory (show parameter USER_DUMP_DEST) - rename it to something like dbrename.sql. 3. Edit dbrename.sql, remove all headers and comments, and change the database's name. Also change "CREATE CONTROLFILE REUSE ..." to "CREATE CONTROLFILE SET ...". 4. Shutdown the database (use SHUTDOWN NORMAL or IMMEDIATE, don't ABORT!) and run dbrename.sql. 5. Rename the database's global name:
ALTER DATABASE RENAME GLOBAL_NAME TO new_db_name;

 Back to top of file

What database block size should I use?
Oracle recommends that your database block size match, or be multiples of your operating system block size. One can use smaller block sizes, but the performance cost is significant. Your choice should depend on the type of application you are running. If you have many small transactions as with OLTP, use a smaller block size. With fewer but larger transactions, as with a DSS application, use a larger block size. If you are using a volume manager, consider your "operating system block size" to be 8K. This is because volume manager products use 8K blocks (and this is not configurable).  Back to top of file

How does one coalesce free space?

SMON coalesces free space (extents) into larger, contiguous extents every 2 hours and even then, only for a short period of time. SMON will not coalesce free space if a tablespace's default storage parameter "pctincrease" is set to 0. With Oracle 7.3 one can manually coalesce a tablespace using the ALTER TABLESPACE ... COALESCE; command, until then use: SQL> alter session set events 'immediate trace name coalesce level n'; where 'n' is the tablespace number you get from SELECT TS#, NAME FROM SYS.TS$; You can get status information about this process by selecting from the SYS.DBA_FREE_SPACE_COALESCED dictionary view.  Back to top of file

How does one prevent tablespace fragmentation?
Always set PCTINCREASE to 0 or 100. Bizarre values for PCTINCREASE will contribute to fragmentation. For example if you set PCTINCREASE to 1 you will see that your extents are going to have weird and wacky sizes: 100K, 100K, 101K, 102K, etc. Such extents of bizarre size are rarely re-used in their entirety. PCTINCREASE of 0 or 100 gives you nice round extent sizes that can easily be reused. Eg. 100K, 100K, 200K, 400K, etc. Thiru Vadivelu contributed the following: Use the same extent size for all the segments in a given tablespace. Locally Managed tablespaces (available from 8i onwards) with uniform extent sizes virtually eliminates any tablespace fragmentation. Note that the number of extents per segment does not cause any performance issue anymore, unless they run into thousands and thousands where additional I/O may be required to fetch the additional blocks where extent maps of the segment are stored.  Back to top of file

Where can one find the high water mark for a table?
There is no single system table which contains the high water mark (HWM) for a table. A table's HWM can be calculated using the results from the following SQL statements:
SELECT BLOCKS FROM DBA_SEGMENTS WHERE OWNER=UPPER(owner) AND SEGMENT_NAME = UPPER(table);

ANALYZE TABLE owner.table ESTIMATE STATISTICS;

SELECT EMPTY_BLOCKS FROM DBA_TABLES WHERE OWNER=UPPER(owner) AND TABLE_NAME = UPPER(table);

Thus, the tables' HWM = (query result 1) - (query result 2) - 1 NOTE: You can also use the DBMS_SPACE package and calculate the HWM = TOTAL_BLOCKS - UNUSED_BLOCKS - 1.  Back to top of file

How are extents allocated to a segment?
Oracle8 and above rounds off extents to a multiple of 5 blocks when more than 5 blocks are requested. If one requests 16K or 2 blocks (assuming a 8K block size), Oracle doesn't round it up to 5 blocks, but it allocates 2 blocks or 16K as requested. If one asks for 8 blocks, Oracle will round it up to 10 blocks. Space allocation also depends upon the size of contiguous free space available. If one asks for 8 blocks and Oracle finds a contiguous free space that is exactly 8 blocks, it would give it you. If it is 9 blocks, Oracle would also give it to you. Clearly Oracle doesn't always round extents to a multiple of 5 blocks. The exception to this rule is locally managed tablespaces. If a tablespace is created with local extent management and the extent size is 64K, then Oracle allocates 64K or 8 blocks assuming 8K block size. Oracle doesn't round it up to the multiple of 5 when a tablespace is locally managed.  Back to top of file

Can one rename a database user (schema)?
No, this is listed as Enhancement Request 158508. Workaround:
Do a user-level export of user A create new user B import system/manager fromuser=A touser=B drop user A

 Back to top of file

Can one rename a tablespace?
No, this is listed as Enhancement Request 148742. Workaround:
Export all of the objects from the tablespace Drop the tablespace including contents Recreate the tablespace Import the objects

 Back to top of file

Can one resize tablespaces and data files?
One can manually increase or decrease the size of a datafile from Oracle 7.2 using the
ALTER DATABASE DATAFILE 'filename2' RESIZE 100M;

command. Because you can change the sizes of datafiles, you can add more space to your database without adding more datafiles. This is beneficial if you are concerned about reaching the maximum number of datafiles allowed in your database.

Manually reducing the sizes of datafiles allows you to reclaim unused space in the database. This is useful for correcting errors in estimations of space requirements. Also, datafiles can be allowed to automatically extend if more space is required. Look at the following command:
CREATE TABLESPACE pcs_data_ts DATAFILE 'c:\ora_apps\pcs\pcsdata1.dbf' SIZE 3M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED DEFAULT STORAGE ( INITIAL 10240 NEXT 10240 MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0) ONLINE PERMANENT;

 Back to top of file

How does one create a standby database?
While your production database is running, take an (image copy) backup and restore it on duplicate hardware. Note that an export will not work!!! On your standby database, issue the following commands:
ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'file_name'; ALTER DATABASE MOUNT STANDBY DATABASE; RECOVER STANDBY DATABASE;

On systems prior to Oracle 8i, write a job to copy archived redo log files from the primary database to the standby system, and apply the redo log files to the standby database (pipe it). Remember the database is recovering and will prompt you for the next log file to apply. Oracle 8i onwards provide an "Automated Standby Database" feature which will send archived log files to the remote site via NET8, and apply then to the standby database. When one needs to activate the standby database, stop the recovery process and activate it:
ALTER DATABASE ACTIVATE STANDBY DATABASE;

 Back to top of file

How does one give developers access to trace files (required as input to tkprof)?

The "alter session set sql_trace=true" command generates trace files in USER_DUMP_DEST that can be used by developers as input to tkprof. On Unix the default file mask for these files are "rwx r-- ---". There is an undocumented INIT.ORA parameter that will allow everyone to read (rwx r-- r--) these trace files:
_trace_files_public = true

Include this in your INIT.ORA file and bounce your database for it to take effect.  Back to top of file
Thanks to Erlie

Flynn

How does one see the uptime for a database?
Look at the following SQL query:
SELECT to_char(startup_time,'DD-MON-YYYY HH24:MI:SS') "DB Startup Time" FROM sys.v_$instance; Marco Bergman provided the following alternative solution: SELECT to_char(logon_time,'Dy dd Mon HH24:MI:SS') "DB Startup Time" FROM sys.v_$session WHERE sid=1 /* this is pmon */ /

Users still running on Oracle 7 can try one of the following queries:
column STARTED format a18 head 'STARTUP TIME' select C.INSTANCE, to_date(JUL.VALUE, 'J') || to_char(floor(SEC.VALUE/3600), || ':' -- || substr (to_char(mod(SEC.VALUE/60, 60), '09'), 2, 2) || substr (to_char(floor(mod(SEC.VALUE/60, 60)), '09'), 2, 2) || '.' || substr (to_char(mod(SEC.VALUE, from SYS.V_$INSTANCE JUL, SYS.V_$INSTANCE SEC, SYS.V_$THREAD C where JUL.KEY like '%JULIAN%' and SEC.KEY like '%SECOND%'; 60), '09'), 2, 2) STARTED '09' )

select to_date(JUL.VALUE, 'J') || to_char(to_date(SEC.VALUE, 'SSSSS'), ' HH24:MI:SS') STARTED from SYS.V_$INSTANCE JUL, SYS.V_$INSTANCE SEC where JUL.KEY like '%JULIAN%' and SEC.KEY like '%SECOND%';

select to_char(to_date(JUL.VALUE, 'J') + (SEC.VALUE/86400), -- Return a DATE 'DD-MON-YY HH24:MI:SS') STARTED from V$INSTANCE JUL, V$INSTANCE SEC where JUL.KEY like '%JULIAN%' and SEC.KEY like '%SECOND%';

(Last 2 queries contributed by Carl Lindberg)  Back to top of file

Where are my TEMPFILES, I dont see them in V$DATAFILE or DBA_DATA_FILE?
Tempfiles, unlike normal datafiles, are not listed in v$datafile or dba_data_files. Instead query v$tempfile or dba_temp_files:
SELECT * FROM v$tempfile; SELECT * FROM dba_temp_files;

 Back to top of file

How do I find used/free space in a TEMPORARY tablespace?
Unlike normal tablespaces, true temporary tablespace information is not listed in DBA_FREE_SPACE. Instead use the V$TEMP_SPACE_HEADER view:
SELECT tablespace_name, SUM(bytes_used), SUM(bytes_free) FROM V$temp_space_header GROUP BY tablespace_name;

 Back to top of file

How can one see who is using a temporary segment?

For every user using temporary space, there is an entry in SYS.V$_LOCK with type 'TS'. All temporary segments are named 'ffff.bbbb' where 'ffff' is the file it is in and 'bbbb' is first block of the segment. If your temporary tablespace is set to TEMPORARY, all sorts are done in one large temporary segment. For usage stats, see SYS.V_$SORT_SEGMENT From Oracle 8.0, one can just query SYS.v$sort_usage. Look at these examples:
select s.username, u."USER", u.tablespace, u.contents, u.extents, u.blocks from sys.v_$session s, sys.v_$sort_usage u where s.saddr = u.session_addr /

select s.osuser, s.process, s.username, s.serial#, sum(u.blocks)*vp.value/1024 sort_size from sys.v_$session s, sys.v_$sort_usage u, sys.v_$parameter vp where s.saddr = u.session_addr and vp.name = 'db_block_size' and s.osuser like '&1' group by s.osuser, s.process, s.username, s.serial#, vp.value /

 Back to top of file

How does one get the view definition of fixed views/tables?
Query v$fixed_view_definition. Example:
SELECT * FROM v$fixed_view_definition WHERE view_name='V$SESSION';

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close