레이블이 오라클 뷰생성인 게시물을 표시합니다. 모든 게시물 표시
레이블이 오라클 뷰생성인 게시물을 표시합니다. 모든 게시물 표시

2013년 11월 2일 토요일

[ORACLE UNIX]유닉스에서 오라클 환경변수 설정(UNIX 오라클 환경변수 설정)

[ORACLE UNIX]유닉스에서 오라클 환경변수 설정(UNIX 오라클 환경변수 설정)


설정된 환경 변수를 확인 하기 위해서는 다음과 같이 합니다.
 
env | grep e ORA e TNS
 
 
--------------------------
Oracle Environment Variables
--------------------------
 
LD_LISRARY_PATH : library file에 대한 경로(예를 들면 /usr/lib:/use/openwin/lib:$ORACLE_HOME/lib:use/games/lib)
 
ORACLE_BASE : 모든 ORACLE Products에 대한 BASE DIRECTORY에 대한 FULL PATH
 
ORACLE_HOME : 현재 사용중인 오라클 버전에 대한 FULL PATH, 오라클이 인스톨되어 있는 기본 디렉토리,  데이터베이스 이름은 ORACLE_SID로 사용 됩니다. ORACLE_HOME은 모든 오라클 Products에서 사용 되어 지며 coraenv 또는 oraenv 스크립트에 위해 setting 됩니다.
 
ORACLE_PATH : files location에 대한 경로만약 값이 setting 되어 있으면 응용 프로그램은 $ORACLE_PATH 부터 먼저 검색그다음 현재 디렉토리를 하게 됩니다만약 setting 되어 있지 않으면 현재 디렉토리를 먼저 검색 합니다.
 
ORACLE_TERM : 터미널 정의에 대한 것값이 setting 되어 있지 않으면 기본적으로 TERM environment 값이 사용됩니다.
 
ORAENV_ASK : 이 값이 YES이면 ORACLE_SID에 대해 묻지 않습니다이 변수는 oraenv가 스크립트로 불리어 지기 전까지는 NO setting 합니다즉 oraenv를 실행했을 때 ORACLE_SID,ORACLE_HOME을 물어볼 지를 지정하며, NO 이외의 경우는 모두 물어 봅니다.
 
TNS_ADMIN : tnsnames.ora, sqlnet.ora 파일과 같은 TNS 파일에 대한 경로 이름
 
ORACLE_TRACE 인스톨 시에 Verification/Trace(shell 에 의한 작업이 모두 화면출력)를 작동시킬지 않을지를 지정, T 이면 작동하고 그 외의 경우는 작동 하지 않습니다.
 
TWO_TASK :  원격의 DB에 대한 접속 시 사용하는 SQL*Net Connect String에 대한 정의,  SQL*Net TWO_TASK 변수를 체크하여 자동으로 그 값을 connect string의 뒤에 add 합니다.
 
아래의 예를 참고 하세요~
 
sqlplus scott/tiger@wink
 
and
 

export TWO_TASK=wink; sqlplus scott/tiger

 [개강임박강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)


[주간]
  [11/13]SQL초보에서실전전문가까지

  [11/13]안드로이드개발자과정

  [11/18]Spring3.X, MyBatis, Hibernate실무과정
  [11/18]iPhone 하이브리드 앱 개발 실무과정

[평일야간]
  [11/08]C#,ASP.NET마스터
  [11/08]Spring3.X, MyBatis, Hibernate실무과정

  [11/12]iPhone 하이브리드 앱 개발 실무과정
  [11/14]JAVA&WEB프레임워크실무과정
[주말]
  [11/09]C#,ASP.NET마스터
  [11/09]JAVA&WEB프레임워크실무과정
  [11/09]Spring3.X, MyBatis, Hibernate실무과정
  [11/09]웹퍼블리싱 마스터
  [11/16]PL/SQL,오라클힌트,SQL튜닝,사례연구
  [11/16]ASP.NET4.0 MVC 프로그래밍


2013년 10월 23일 수요일

오라클 테이블 단편화(행이행, 행연쇄) 체크 (Oracle Table chain )

오라클 테이블 단편화(행이행, 행연쇄) 체크 (Oracle Table chain )



블록사이즈가 4K인데 레코드의 한행이 4K이상이라면 여러 블럭에 나누어 저장되게 되는데 이를
행연쇄 라고 하구요, 처음 insert문에서 입력되는 데이터는 작았는데 추후 많은 량의 데이터로 update
하게되어 해당 불록에 다 기록할 수 없어 다른 블록에 기록할 수 있는 데 이를 행이동 이라고 합니다.

행이행의 경우 원래의 블록에 새로운 블록을 가리키는 포인터를 두며 갱신전 데이터가 있는 영역은 사용하지 못하게 됩니다. 이 처럼 재이용되지 못하는 영역이 생기는 것을 단편화라고 하며 이를 확인하는 방법은 다음과 같습니다.

먼저 Analyze를 이용하여 통계 데이터를 추출 합니다.

SQL>analyze table emp compute statistics


행이행과 행연쇄가 있는지 조사 합니다. 아래에서 chain_cnt 값은 행이행이나 행연쇄로 인해
여러 블록으로 쪼개져 있는 행의 수를 의미합니다.

SQL> SELECT table_name, num_rows, blocks, empty_blocks, avg_space, chain_cnt
        FROM    dba_table
        WHERE chain_cnt > 0; 

[닷넷4.0, ADO.NET]OleDB Oracle을 이용한 grid select, insert예제 OleDB 공급자를 이용하여 오라클 데이터베이스에 접속했으며 EMP 테이블의 데이터를 읽어 그리드에 채우는 간단한 예제다.

[닷넷4.0, ADO.NET]OleDB Oracle을 이용한 grid select, insert예제
 
OleDB 공급자를 이용하여 오라클 데이터베이스에 접속했으며 EMP 테이블의 데이터를 읽어 그리드에 채우는 간단한 예제다.
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        OleDbConnection conn = null;
        OleDbDataAdapter adapter = null;
        DataSet ds = null;
        
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                ds = new DataSet("emp");
//아래 onj는 $ORACLE_HOME/network/admin에 있는 tnsnames.ora 파일에 정의된 이름!
   string conStr = "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger";
   conn = new OleDbConnection(conStr);
                conn.Open();
                adapter = new OleDbDataAdapter("select * from emp", conn);
                adapter.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "emp Table Loading Error");
            }
            finally        {
                conn.Close();
            }
        }
    }
}
new라는 클래스 Constructor 키워드를 사용하여, .NET Framework에서 제공하는 클래스 중의 'OleDbConnection'의 인스턴스를 만들면서 string타입의 파라미터(Parameter)를 취다. 그 stirng(접속 문자열)은 바로 윗줄에서 선언 되고 값이 주어졌다. 마지막에는 인스턴스인 Connection의 원래클래스, 즉 OleDbConnection이 멤버로 포함하고 있는 메쏘드 중의 대표적인 Open()을 호출하여 DataBase와 연결을 설정하고 연결을 얻음. 그런다음 어댑터를 하나 만들어 "select" 명령을 실행 시킨 결과 DataSet으로 fill 시키고  DataGrid의 Datasource로 ds.Tables[0]을 지정했다.
 
 
[간단한 입력 예제, 오라클 scott계정의 EMP Table에 한건의 데이터를 간단히 입력]
 
public partial class Form1 : Form
    {
        OleDbConnection conn = null;
        OleDbDataAdapter adapter = null;
        DataSet ds = null;
        
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                ds = new DataSet("emp");
                //아래 onj는 $ORACLE_HOME/network/admin에 있는 tnsnames.ora 파일에 정의된 이름!
                string conStr = "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger";
                conn = new OleDbConnection(conStr);
                conn.Open();
                OleDbCommand command = new OleDbCommand("insert into emp(empno, ename) values(777, '오라클자바')", conn);
                command.ExecuteNonQuery();
                adapter = new OleDbDataAdapter("select * from emp where ename='오라클자바'", conn);
                adapter.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "emp Table Loading Error");
            }
            finally
            {
                conn.Close();
            }

        }
    }

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  



[개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)




[해당 카테고리로 이동합니다]

2013년 10월 17일 목요일

오라클 동의어(Oracle Synonym) - 테이블, 뷰, 시쿼스에 대한 별칭

오라클 동의어(Oracle Synonym)
- 테이블, 뷰, 시쿼스에 대한 별칭, 동의어
- public, private로 생성 가능
- Public synonym은 생성할 수 있는 권한이 있는 user만이 만들 수 있으며, 모든 user들이 사용할 수 있다.

[문법]
CREATE [PUBLIC] SYNONYM
 synonym명 FOR object;
DROP [PUBLIC] SYNONYM synonym명; 
[예]
CREATE SYNONYM emp FOR scott.emp;
DROP SYNONYM emp;
 

SQL> conn system/onj
 
SQL> SELECT * FROM s_emp;
(* Error 발생)
 
SQL> SELECT * FROM scott.s_emp;
(* system user는 SELECT ANY TABLE 권한을 가지고 있으므로 성공)
 
SQL> CREATE SYNONYM s_emp FOR scott.s_emp;
 
SQL> SELECT * FROM s_emp;
 
SQL> CREATE TABLE s_emp (a number);
(* Error 발생)
 
Base table의 이름이 바뀌면 Synonym은 더 이상 사용할 수 없게 된다.

SQL> conn scott/tiger

SQL> RENAME s_emp TO e;

SQL> conn system/manager

SQL> SELECT * FROM s_emp;
(* 에러 발생)

SQL> conn scott/tiger

SQL> RENAME e TO s_emp;

2013년 10월 3일 목요일

오라클 사용자의 비밀번호 변경하기

오라클에서 사용자 비밀번호 변경하기...

사용자의 비밀번호를 변경하는 방법은 alter user를 통해 하는 방법과  SQL*Plus로 로그온 한 상태에서 password 를 입력 함으로서 (Unib/Linux에서 사용자 비밀번호 변경과 비슷하게) 변경이 가능 합니다. 

아래의 실습을 보고 이해 하도록 하죠... 


SQL> connect scott/tiger
연결되었습니다.

SQL> password
SCOTT에 대한 암호를 변경합니다
이전 암호: *****                  <-- tiger
새로운 암호: **                    <-- t1
새 암호 다시 입력: **            <-- t1
암호가 변경되었습니다

SQL> connect scott/tiger
ERROR:
ORA-01017: invalid username/password; logon denied


경고: 이제는 ORACLE에 연결되어 있지 않습니다.
SQL> connect scott/t1
연결되었습니다.
SQL> alter user scott identified by tiger;

사용자가 변경되었습니다.

SQL> connect scott/t1;
ERROR:
ORA-01017: invalid username/password; logon denied


경고: 이제는 ORACLE에 연결되어 있지 않습니다.
SQL> connect scott/tiger
연결되었습니다. 

라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터
(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  





2013년 8월 4일 일요일

Oracle View...(오라클 뷰)

A. . 정의
- View는 하나 이상의 Table또는 다른 View에 포함된 데이터를 원하는대로 나타낸 것
- View는 내장질의또는 가상 Table등으로 표현할수 있다.
- View는 Table에서 파생되므로 둘사이에는 많은 유사성이 있다. 예를들어 Table과 같이 최대
254개의 Column이 있는 View를 정의할수 있고 뷰를 질의하고 몇가지 제한 사항을 사용하여 뷰를
갱신,삽입,삭제를 할수있다.  뷰에대해 수행되는 모든 작업은 뷰의 기본 Table에 있는 Data에
실제 영향을 주며 기본 Table의 무결성 제약조건과 트리거를 따른다.
- 뷰에는 저장영역이 할당되지 않으며 실제로 Data를 포함하지도 않는다.
B. 처리방법
- Oracle은 View를 정의하는 질의 Text를 Data Dictionary(user_views)에 저장한다,
- Oracle은 기존공유 SQL영역에 동일한 멸령이 들어있지 않을때만 새로운 공유 SQL영역에 뷰를
참조하는 명령문을 Parsing합니다. 따라서 뷰를 사용시 공유 SQL영역과 관련하여 메모리 사용이
감소하는 이익이 있다.
- Oracle은 원래 질의를 뷰정의 질의와 병합할 때 원래 뷰를 변형하여 뷰에 대한 질의에 인덱스를
사용할지를 결정한다.

Create view emp_view as
    Select emp_no, ename, sal, loc
    From emp
    Where emp.deptno = dept.deptno
    And dept.deptno = 10;

<사용자 Query>
select ename from emp_view
where empno = 9876;


select ename
from emp, dept
where emp.deptno = dept.deptno
and  dept.deptno = 10
and  emp.empno = 9876;

Oracle은 가능한 모든 경우에 뷰에대한 질의를 뷰정의 질의 및 기본뷰 질의와 병합한다. 또한 뷰를
참조하지않고 질의를 발생하는 것 처럼 병합된 질의를 최적화한다.
따라서 Column이 뷰 정의 또는 뷰에대한 사용자정의에서 참조되는지의 여부에 관계없이 모든 참조된
기본 Table의 Column에 대한 Index를 사용한다.
만약 뷰에대한 정의와 사용자 질의를 병합할수 없다면 Index를 사용하지 않을수 있다.

C. 갱신가능한 Join View
- Join View란 From절에 하나이상의 Table또는 View를 가지며, Distinct, group by, start with,
connect by, rownum, union all, intersect, for update등의 절에서는 사용하지 않는다.

- 갱신가능한 Join View는 둘이상의 기본 Table 및 View를 포함하며 Update/Insert/Delete등의
작업이 가능하다.

- Dictionary View인 all_updatable_columns,윰_updatable_columns, user_updatable_colums
에는 갱신가능한 View의 Column을 나타낸다.

- Join View에 대한 Insert/Update/Delete등의 작업은 한번에 하나의 기본 Table에서만 가능하며,
With Check Option을 사용하여 View를 정의하는 경우에는 반복된 Table의 모든 Join Column과 모
든 Column은 갱신할수 없으며, Insert명령문은 허용되지 않는다.또한 with Check Option을
사용하여 뷰를 정의하고 키예약 Table이 반복되는 경우에는 뷰에서 행을 삭제할수 없다.

D. View생성
 - Create View명령을 사용한다.
예] create view sales_staff as
      select empno, ename, deptno
      from emp
      where deptno =10
      with check option constraint sales_staff_cnst;

    위에서 check option은 뷰가 선택할수 없는 행에 대해서는 Insert와 Update명령문이
    실행되지 않는다는 제약 조건을 갖는다.
    만약 위의 View에 deptno가 30인 행을 Insert하려고 하면 RollBack되고 오류가 발
    생한다.
E. View수정하기
위에서 만든 staff View를 재정의 하는경우
create or replace view sales_staff_view as
      select empno, ename, deptno
      from emp
      where deptno =30
      with check option constraint sales_staff_cnst;
F. View의 삭제
 - drop view sales_staff_view; 

[출처] 오라클자바커뮤니티, 오엔제이프로그래밍