Sunday, February 16, 2014

10g/11g


10g/11g


VIEWS WE QUERY IN DATABASE

 

1} V$CONTROLFILE > Lists the names and status of the control files.

 

2} V$DATABASE        > Contains database information from the control files.

 

3} V$DATAFILE          >Contains data file information from control file.

 

4} V$INSTANCE          >Displays the state of the current instance.

 

5} V$PARAMETER     > Lists parameters and values currently in effect for the                                         Session also status and location of all parameters.

 

6} V$SESSION              >Lists session information for each current session.

 

7} V$SGA                     >Contains summary information on SGA.

 

8} V$SPPARAMETER  > Lists the contents of SPFILE.

 

9} V$TABLESPACE     > Displays tablespace information from the control file.

 

10} V$THREAD           >Contains thread information from control file.

 

11} V$VERSION          > Version numbers of core library components in oracle server.

 

12} V$FIXED_TABLE >To find list of data dictionary views.

 

13} V$CONTROLFILE_RECORD_SECTION > Provides information about the Control file record section.

 

14}SHOW PARAMETER CONTROL_FILES > Lists the name, status and location of Control files.

 

15}V$THREAD  >To display the current redo log group, the no. of online redo log groups and current sequence number.

 

16} V$LOGFILE    >Displays each redo log group, member and status of each Member.

 

17} V$LOG             > Same as above.

 

18} V$DATABASE_PROPERTIES >Name of default tablespaces.

 

19}V$DBA_TABLESPACES  >Complete information about tablespaces.

 

20}V$DBA_DATA_FILES  >Complete information of the files present in the Tablespaces.                                         

 

21} V$DBA_TEMP_FILES  >File’s information of temporary tablespace.

 

22} V$DBA_EXTENTS      >To check the extents for a given segment.

 

23} V$DBA_SEGMENTS    >View to get number of  extents and blocks allocated to a Segment.                                                    

 

24} V$DBA_FREE_SPACE  >Displays free extents in tablespace.

 

25} V$DBA_ROLLBACK_SEGS  >To obtain information about all the undo segments  In the database.                                                               

 

{IMP*:-Information about undo segments that are offline can be seen only in this view.}

 

26}V$ROLLSTAT & V$ROLLNAME  >Views to obtain the statistics of the undo Segments currently used by the instance.

 

27} V$TRANSACTION & V$SESSION >To check the use of a undo segment by Currently active transactions.                                                                                           

 

28} V$DBA_TABLES          à All the information about tables can be obtained here.

 

29} V$DBA_OBJECTS  >All the information about objects in table can be                                                  Obtained here.

 

30} V$DBA_UNUSED_COL_TABS >To identify tables with unused columns.

 

31} V$DBA_PARTIAL_DROP_TABS >To identify tables that have partially Completed DROP columns operations. 

                                                                                  

32}V$DBA_INDEXES     >Provides information on the indexes.

 

33}V$DBA_IND_COLUMNS >Provides information on the columns indexed.

 

34}V$OBJECT _USAGE         >Provides information on the usage of an index.

 

35}V$DBA_CONSTRAINTS  >To obtain name, type and status of  all constraints.

 

36}V$DBA_CONS_COLUMNS >To obtain the columns in the constraints on table.

 

37}V$DBA_USERS    >To obtain information about account status, default Tablespace for users.

 

38}V$DBA_PROPERTIES      >View to display passwd profile information.

 

39}V$DBA_TS_QUOTAS     >Amount of space a user can use in tablespaces.

 

40}V$DBA_SYS_PRIVS       > Lists system privileges granted to users and roles.

 

41} V$SESSION_PRIVS       > Lists the privileges that are currently available to user.

 

42} V$DBA_TAB_PRIVS    > Lists all grants on all objects in the database.

 

43}V$DBA_COL_PRIVS     >Describes all object grants in the database.

 

44}V$DBA_ROLES             >All roles that exist in the database.

 

45}V$DBA_ROLES_PRIVS  >Roles granted to users and roles.

 

46}V$ROLE_ROL_PRIVS   > Roles that are granted to roles.

 

47}V$DBA_SYS_PRIVS      >System privileges granted to users and roles.

 

48}V$ROLE_SYS_PRIVS   > System privileges granted to roles.

 

49}V$ROLE_TAB_PRIVS  >Object privileges granted to roles.

 

50}V$SESSION_ROLES    >Roles that the user currently has enabled.

creating a synonym


Database links are notoriously slow, not an optimal solution for applications needing real-time response.
Expect the database link to cause a delay in accessing the remote data.

Here is an example of creating a synonym for scott's database link.

SQL> create synonym rem_emp for emp@remotedb;

Synonym created.

SQL> select count(*) from rem_emp;

COUNT(*)
----------
14


The other method is to create a view on your remote database's data.


SQL> create view v_emp as select * from emp@remotedb;

View created.

SQL> select count(*) from v_emp;

COUNT(*)
----------
14

 

 

How to drop a database link




Dropping a database link from your Oracle database is as easy as doing the following:
drop database link remotedb;
or
drop public database link remotedb;

You will need no other system privilege other than the 'create database link' privilege granted directly
to your username or granted via a role to drop your own database link.

It is not possible to drop a database link belonging to another user.

If you try to specify another schema's database link by qualifying it with a name,
Oracle will just look for a private database link in your schema with a name
which includes the other schema's name and will not find it.

To drop a public database link, you will need the system privilege 'drop public database link'.
For example:

SQL> connect / as sysdba
Connected.

SQL> drop database link scott.remotedb;
drop database link scott.remotedb
*
ERROR at line 1:
ORA-02024: database link not found


SQL> connect scott/tiger
Connected.
SQL> drop database link scott.remotedb;
drop database link scott.remotedb
*
ERROR at line 1:
ORA-02024: database link not found


SQL> drop database link remotedb;

Database link dropped.

 


 how to create a db link 


Once a database link has been created
you are now ready to select your data from the remote database referenced by the db link.
The syntax is :

select from @;

For example:
SQL> select * from dept@remotedb;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON



The database link is opened during the select (or other DML transaction) and remains open for the duration of the session.
After you close a session, the links that were active in the session are automatically closed.

Close a db link

To explicitly close the database link , use the command below:

SQL> alter session close database link remotedb;

Session altered.


Using db links in other DML statements

You can use insert/update/delete statements just as easily with database links


SQL> select * from dept@remotedb;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

SQL> insert into dept@remotedb (deptno,dname,loc)
2 values (50,'MARKETING','BOISE');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from dept@remotedb;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 MARKETING BOISE



SQL> update dept@remotedb set loc = 'LONDON'
where deptno = 50;

1 row updated.

SQL> commit;

Commit complete.

SQL> select * from dept@remotedb;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 MARKETING LONDON


SQL> delete from dept@remotedb
where dname = 'MARKETING';

1 row deleted.

SQL> commit;

Commit complete.

SQL> select * from dept@remotedb;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON



Note that DDL operations are not allowed through a database link:

SQL> alter table dept@remotedb
add column (manager varchar2(30));

alter table dept@remotedb add column
(manager varchar2(30))
*
ERROR at line 1:
ORA-02021: DDL operations are not allowed
on a remote database


******************************************************************************




Oracle Tablespace:-

 create, add a file, remove a file, drop, rename




Tablespaces & Datafiles: Overview
Data for Oracle tables, indexes, etc is stored in data files, but never when an object is defined, the object is associated with a file directly. All the time the Oracle objects are “located” in the tablespaces. The “tablespaces” are logical concepts and each tablespace is in relation with one or more physical file. So, when an object is created in a tablespace, the data will be stored automatically in the file(s) associated with this tablespace.  Tablespace creation
=> Data tablespace
 (created for data objects like tables, materialized view, indexes)           CREATE TABLESPACE DATA_1_TBS
          DATAFILE ‘C:\oradata\data_1.dbf’
          SIZE 20M AUTOEXTEND ON;
 
This tablespace named DATA_1_TBS has allocated 20M space on the file data_1.dbf and the size of the file will increase if the tablespace will need more space on the disk.
 => Temporary tablespace (keep temporary data for sort, join operations)
          CREATE TEMPORARY TABLESPACE temp_1
          TEMPFILE ‘c:\temp01.dbf’ SIZE 5M AUTOEXTEND ON;
This tablespace named “temp_1″ has allocated 5M space on the file temp01.dbf and the size of the file will increase if the tablespace will need more space on the disk. However, in general, the temporary tablespaces are not set to be “autoextend off”, but have enough room for the database needs. 
=> UNDO tablespace (keep the old values for the transactions which are not commited)  
      CREATE UNDO TABLESPACE undo1
       DATAFILE ‘c:\oradata\undo1.dbf’ SIZE 10M AUTOEXTEND ON
       RETENTION GUARANTEE;
If you use the “RETENTION GUARANTEE” clause Oracle guarantees that whatever retention period you have set will be honored.
NOTES:
§  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;  –> creates a locally managed tablespace in which every extent is 128K
§  EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; –> creates a tablespace with automatic segment-space management (ASSM)
Add a file to the tablespace
             ALTER TABLESPACE DATA_1_TBS
             ADD DATAFILE ‘c:\oradata\data_file2.dbf’ SIZE 30M AUTOEXTEND OFF;
 To get more information on the files which are associated with a tablespace the following query could be  used:  SELECT TABLESPACE_NAME, FILE_NAME, FILE_ID, AUTOEXTENSIBLE, ONLINE_STATUS
FROM DBA_DATA_FILES ORDER BY 1;
Remove a file from a tablespace (Resizing a tablespace)
Removing a file from a tablespace cannot be done directly. First, the objects must be moved in another tablespace, the initial tablespace will be dropped and recreated. After that the objects could be moved again in the tablespace which was resized. If the reason you wanted to drop the file is because you mistakenly created the file of the wrong size, then consider using the RESIZE command.
Add more space to a tablespace without adding a new file
ALTER DATABASE DATAFILE ‘C:\oradata\data_1.dbf’ RESIZE 25M;


Dropping a tablespace
DROP TABLESPACE DATA_1_TBS; 
 (if the tablespace is empty)
DROP TABLESPACE DATA_1_TBS INCLUDING CONTENTS;   (if the objects in the tablespace are no longer needed)
However the files must be deleted from the OS level 

Rename a tablespace
 (in 10g)
ALTER TABLESPACE DATA_1_TBS RENAME TO DATA_10_TBS;    
 (in 9i)
1.  Create a new tablespace NEW_TBLS. 2.  Copy all objects from OLD_TBLS to NEW_TBLS.
3.  Drop tablespace OLD_TBLS.
Moving the tablespace files 
=> for Data files, Log files:
1) Shutdown the database.
2) Rename the physical file on the OS. ==> Win: SQL> HOST MOVE file1.dbf file2.dbf
3) Start the database in MOUNT mode. 

ALTER DATABASE RENAME FILE ‘C:\OHOME_9I\ORADATA\DB9\REDO01.LOG’ TO ‘C:\ORACLE\data\REDO01.LOG’;
ALTER DATABASE RENAME FILE ‘C:\OHOME_9I\ORADATA\DB9\REDO02.LOG’ TO ‘C:\ORACLE\data\REDO02.LOG’;
ALTER DATABASE RENAME FILE ‘C:\OHOME_9I\ORADATA\DB9\REDO03.LOG’ TO ‘C:\ORACLE\data\REDO03.LOG’;
ALTER DATABASE OPEN;
=> for Control File (SPFILE is used)
1) Alter control_files initialisation parameter in SPFILE
  ALTER SYSTEM SET control_files = ‘C:\NEW_PATH\RENAME_CONTROL01.CTL’,
   ‘C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL02.CTL’,    ‘C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL03.CTL’                    SCOPE = SPFILE;   2) Shutdown the database.
  3) Rename the physical Controle file on the OS. ==> Win: SQL> HOST MOVE file1.ctl file2.ctl
  4) Start the database. 

=> for TEMP files
1)  CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE ‘…\temp_temp1.dbf’ SIZE 2M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
2)  ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP1;
3)   DROP TABLESPACE TEMP INCLUDING CONTENTS; – TEMP = 1st temporary tablespace
4)  CREATE TEMPORARY TABLESPACE TEMP TEMPFILE ‘…\temp01.dbf’ SIZE 2G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 100M;
5)  ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
6)  DROP TABLESPACE TEMP1 INCLUDING CONTENTS;

                            Manage Oracle Database Jobs
 
What a database job is?
All the time we need some PL/SQL scripts to run at a specific period of time regularly. This is done by scheduling the database jobs to run following some rules. A job define what we have to run, when and at which interval. When a job is created (submitted), the job is put in a queue. The queue is monitored by a coordinator job queue (CJQ0) background process. The coordinator (CJQ0) periodically selects jobs that are ready to run from the jobs shown in the DBA_JOBS view. The time interval the coordinator looks for new jobs to start is establish by JOB_QUEUE_INTERVAL initialization parameter. JOB_QUEUE_INTERVAL set to 60 means that the CJQ0 will look at every minutes to see if is any job scheduled to run at this time. When CJQ0 find a job which must start, CJQ0 spawns a Jnnn processes to run the selected jobs. Each Jnnn process executes one of the selected jobs. The number of jobs which can run simultaneously is fixed by JOB_QUEUE_PROCESSES initialization parameter. If the JOB_QUEUE_PROCESSES parameter is equal to 10, only 10 Jnnn processes could run simultaneously, so only 10 jobs could run in the same time.
If JOB_QUEUE_PROCESSES = 0 no jobs could be scheduled for that database.
How to create a job?
To create a job we have to use the DBMS_JOB.SUBMIT procedure.
declare
vnu_job NUMBER;
begin
DBMS_JOB.SUBMIT (vnu_job,’scott.Procedure_A;’, sysdate,’sysdate+3/(24*60)’);
end;
In this example, the procedure Procedure_A is scheduled to run at every 3 minutes starting from “sysdate”.
How to run a job?
begin
DBMS_JOB.RUN(vnu_job);
end;
/
This PL/SQL block run the previous job at this moment.
How to change the execution time for a job?
begin
DBMS_JOB.INTERVAL(vnu_job, ‘NULL’);
end;
/
In this example, the job will not run again after it successfully executes and it will be deleted from the job queue.
How to remove a job from the database ?
begin
DBMS_JOB.REMOVE(vnu_job);
end;
/
View the status of the running jobs
select * from DBA_JOBS_RUNNING;
View more information about the database jobs 
select * from DBA_JOBS;

                              Managing Data Security in Oracle

How to change the password for an user?
SQL> ALTER USER scott identified by scott;


How to enforce strict password control? 
By default, Oracle will allow users to choose single character passwords and passwords that match their names and userids. Also, by default the password will not expire. However, Oracle manage passwords through profiles. Some of the things that we can restrict:
FAILED_LOGIN_ATTEMPTS – failed login attempts before the account is locked
PASSWORD_LIFE_TIME – limits the number of days the same password can be used for authentication            
PASSWORD_GRACE_TIME – number of days after the grace period begins during which a warning is issued and login is allowed
PASSWORD_LOCK_TIME – number of days an account will be locked after maximum failed login attempts            
PASSWORD_REUSE_TIME – number of days before a password can be reused
PASSWORD_REUSE_MAX – number of password changes required before the current password can be reused   
PASSWORD_VERIFY_FUNCTION – password complexity verification script
Example:
Create the Profile

SQL> CREATE PROFILE profile_A LIMIT FAILED_LOGIN_ATTEMPTS 3;
Associate the profile with an user:        
SQL> ALTER USER scott PROFILE profile_A;
How to connect as sys without knowing his password?
If an administrative OS users belongs to the “dba” group on Unix or to the “ORA_DBA” (ORA_sid_DBA) group on NT, we can connect to oracle like this:
SQL> connect / as sysdba
SQL> show user
We can use show user  command to verify that we are connected as SYS.
How to connect as a regular user without knowing his password
1) Select the encrypted password value
SQL> SELECT password FROM dba_users WHERE username=’SCOTT’;
PASSWORD
————————–
D794344J35502S67
2) Change Scott’s password (temporarily)
SQL> ALTER USER scott identified by new_pass;
3) Connect using this new password
SQL> connect scott/new_pass;
4) Connect as SYS (or SYSTEM)
SQL> connect / as sysdba
5) re-enable the first Scott’s password
SQL> ALTER USER scott identified by values ‘D794344J35502S67′;
Allowing/ Removing SELECT, DELETE, UPDATE, INSERT privileges on tables
SQL>   GRANT select, update, delete, insert on SCOTT.EMP to  sonu ;
SQL>      REVOKE select, update, delete, insert on SCOTT.EMP FROM  sonu ;
sonu ” could be a user (schema) or a role.
Allowing/ Removing EXECUTE privileges on procedures, functions, packages
grant EXECUTE on SCOTT.F1 to  sonu ;               ( sonu  will be able to run (execute) scott.F1 function )
revoke EXECUTE on SCOTT.F1 from  sonu ;
Using Roles
Sometimes, the same object, system privileges must be granted to many users. For this purpose we can create a ROLE, grant all the privileges we want to this role and after that we can grant the role to a user or many users. 
1) Create the role (named “ROLE1″ in this example)
SQL> CREATE ROLE role1;
2) Grant privileges to this role
SQL> GRANT select, update, delete, insert on SCOTT.EMP to ROLE1;
grant EXECUTE on SCOTT.F1 to ROLE1;  
3) Grant the Role to an user
SQL> GRANT role1 TO sonu;
REMOTE_LOGIN_PASSWORDFILE parameter 
This parameter is used for managing the SYS authentication.
If REMOTE_LOGIN_PASSWORDFILE='NONE', Oracle will not check for a password file (we can input any user name, any password, we will be connected as SYS).
If REMOTE_LOGIN_PASSWORDFILE='SHARED' (or ‘EXCLUSIVE’ in 9i), Oracle will check for a password file and we can connect as SYS only if the password is the good one. (RECOMMENDED)
REMOTE_OS_AUTHENT parameter
The REMOTE_OS_AUTHENT parameter lets the Oracle database decide if the authentication can be performed by the remote operating system or if it must be performed by the database. 
REMOTE_OS_AUTHENT = TRUE  => Authentication just on the remote OS and no authentication on the database side.
REMOTE_OS_AUTHEN = FALSE =>  Only database authentication is available from these remote systems. (RECOMMENDED)

       Kill an Oracle process / jobs from OS (Linux, AIX,UNIX)

1.  Find the job we what to kill and the session associated with the job
             SQL>  select j.sid,
                       s.spid,
                       s.serial#,
                       j.log_user,
                       j.job,
                       j.broken,
                       j.failures,
                       j.last_date||’:'||j.last_sec last_date,
                       j.this_date||’:'||j.this_sec this_date,
                       j.next_date||’:'||j.next_sec next_date,
                       j.next_date – j.last_date interval,
                       j.what
              from ( select djr.SID, dj.LOG_USER, dj.JOB, dj.BROKEN, dj.FAILURES, dj.LAST_DATE, dj.LAST_SEC, dj.THIS_DATE, dj.THIS_SEC, dj.NEXT_DATE, dj.NEXT_SEC, dj.INTERVAL, dj.WHAT
              from dba_jobs dj, dba_jobs_running djr
              where dj.job = djr.job ) j,
              (select p.spid, s.sid, s.serial#
              from v$process p, v$session s
              where p.addr = s.paddr ) s
             where j.sid = s.sid;

2.  Mark the job as Broken
                  SQL> begin
                     DBMS_JOB.BROKEN(job#,TRUE);
                     commit;
                  end;
  3.  Kill the Oracle Session
 SQL> ALTER SYSTEM KILL SESSION ‘sid, serial#’;
 NOTE: In many situations the session is marked ‘KILLED’ but is not killed.  
 4.  Kill the O/S Process
 For UNIX:
kill -9 spid
For Windows at the DOS Prompt: 
orakill sid spid

                   Oracle Database ARCHIVELOG mode
 
Database ARCHIVELOG mode: Overview
An Oracle database could be in ARCHIVELOG or NON ARCHIVELOG mode. When the database is in ARCHIVELOG mode one or more ARC process(es) are taking backups of the redo log files when the redo logs are full or switched. That assures that all the database operations are kept in 2 places (in data files and in archive log files). Having the database in ARCHIVELOG mode assure us that the data will not be lost even if the original data (from datafiles) will become inaccessible or will be deleted accidentally.
Is my database in ARCHIVELOG mode ?
To see if the database is in archivelog mode the following command could be used:
SQL> select NAME, LOG_MODE, ARCHIVELOG_CHANGE# from v$database;
How could I enable the ARCHIVELOG mode ?
 In Oracle 9i
3) assure that we have the following parameters in init.ora:
log_archive_dest_1=’location=C:\Ohome_9i\ARC’
obsolete for 10g and higher.
àlog_archive_start=TRUE
2) startup mount
3) alter database archivelog; (enable automatic archiving)
alter database archivelog MANUAL; (ALTER SYSTEM ARCHIVE LOG ALL; must be run to archive the log files)
In Oracle 10g
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
SQL> select NAME, LOG_MODE, ARCHIVELOG_CHANGE# from v$database;
How could I disable the ARCHIVELOG mode ?
SQL> shutdown immediate
SQL> startup mount
SQL> alter database noarchivelog;
SQL> alter database open;
SQL> select NAME, LOG_MODE, ARCHIVELOG_CHANGE# from v$database;
Automatic/ Manual Archiving
ARCHIVE LOG LIST; -> Show the Status of Automatic Archiving.
ARCHIVE LOG START; -> Start Automatic Archiving.
ARCHIVE LOG STOP; -> Stop Automatic Archiving.
Views used in managing database ARCHIVELOG mode
V$ARCHIVE_DEST -> Show the places where the archive logs are shipped.
V$ARCHIVED_LOG -> Show the history of archived log files
V$ARCHIVE_PROCESSES -> Show information about the current archiving process


No comments:

Post a Comment