'Database/Oracle'에 해당하는 글 16건

Remote connection

Database/Oracle 2013. 4. 26. 19:31

리스너만 가동되고 있다면, 오라클 데이터베이스에 원격으로 접속하는 것도 가능합니다.
Toad 로 연결을 시도해 봤는데 오라클 클라이언트를 설치하지 않으면 접속조차 안되더군요.
구글링 결과 클라이언트 설치 없이도 가능하다는 분이 간혹 있는데 저는 안되는 걸로 결론 내렸습니다.^^;

 

오라클 클라이언트 설치 후에 Toad 에서 direct 로 접속을 했고, sqlplus 로도 접속이 됐습니다.
sqlplus 접속 시 username 은 다음의 형식을 참조하여 접속할 수 있습니다.

 

user@"host[:port][/service_name][:server][/instance_name]"

 

- host : 호스트 이름이나 IP 주소를 입력
- port : 생략하면 표준 포트인 1521 할당
- service_name : DB_NAME.DB_DOMAIN 으로 구성
- server : 서비스 핸들러 타입 (dedicated, shared, pooled)
- instance_name : 접속할 인스턴스

 

 

sql*plus 외부 접속 예제)

 

// 데이터베이스에 접속하지 않고 일단 SQL*Plus 시작
$ sqlplus /nolog

// system 사용자로 로컬 데이터베이스 접속
SQL> conn system

// sysdba 권한으로 sys 사용자 접속
SQL> conn sys as sysdba

// 로컬에서 sysdba 권한으로 접속
SQL> conn / as sysdba

// dbhost.example.com 이란 호스트에서 가동중인 orcl.example.com 데이터베이스에 nick 사용자로 접속
SQL> conn nick@"dbhost.example.com/orcl.example.com"

// 호스트 이름 대신 ip 사용
SQL> conn nick@"192.0.2.1/orcl.example.com"

// 기본 포트 이외의 포트 지정
SQL> conn nick@"dbhost.example.com:1522/orcl.example.com"

// 서비스 이름을 생략하고 인스턴스 지정
SQL> conn nick@"dbhost.example.com//orcl"

// 클라이언트에서 sales1으로 지정된 net 서비스로 로그인
SQL> conn nick@sales1


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

 

Oracle Enterprise Manager(EM) 는 오라클 데이터베이스의 관리를 위한 툴이며 데이터베이스와 함께 설치됩니다.
웹사이트에서 스키마 객체 생성, 사용자 보안, 메모리, 스토리지, 백업, 복구, 상태 등을 쉽게 관리할 수 있습니다.

 

 

dbconsole

 

브라우저에서 EM 에 접근하기 위해서는 Database Control 콘솔 프로세스인 dbconsole 이 실행되고 있어야 합니다.
dbconsole 은 설치 후에 자동 시작되며, 수동으로 중단(stop), 시작(start)하거나 상태(status)를 볼 수 있습니다.

 

$ emctl stop dbconsole
$ emctl start dbconsole
$ emctl status dbconsole

 

 

Database Control Login

 

EM url - https://hostname:port/em
dbconsole 이 실행되고 있다면 위 주소로 Database Control 에 접속할 수 있습니다.(기본포트: 1158)
로그인 화면에서는 사용자 항목에 SYS 또는 SYSTEM, 패스워드 항목에는 설치시 지정한 패스워드를 입력합니다.
슈퍼 유저(sys, system, sysman) 계정 대신에 다른 계정을 생성하고, 그에 맞는 최소한의 권한을 부여하여 사용하는 것이 안전합니다.
백업, 복구 및 데이터베이스를 업그레이드하기 위해서는 SYSDBA 사용자로 로그인 해야 합니다.

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

Oracle 삭제

Database/Oracle 2013. 4. 20. 00:31

이느므거 깔아놓고 사용 안한지 오래되서 패스워드가 기억이 안나네;
이 패스워드 찾는 시간에 재설치 ㄱㄱ~

 

oracle 관련 파일 모두 삭제
# rm -rf $ORACLE_HOME
# rm -rf /etc/ora*
# rm -rf /usr/local/bin/*

 

oracle 계정 그룹 모두 삭제
# userdel oracle
# groupdel dba
# groupdel oinstall
# rm -rf /home/oracle

 

삭제란 참말로 무서운 것...


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Displaying Data From Multiple Tables

여러 테이블에서 데이터를 출력하기 위해 SELECT 를 사용할 수 있다.
테이블을 결합하는 것은 여러 테이블에 저장된 데이터를 보려고 할 때 유용하다.
예를 들어, employees 테이블은 부서 name이 아닌 department IDs 열의 고용자 정보를 포함하고, departments 테이블은 department IDs 와 name 열을 포함한다. department ID에 테이블을 결합함으로써, 해당하는 부서 이름에서 고용자들의 정보를 볼 수 있다.

결합 방법에는 self, inner, outer 등의 방법이 있다.

  • self-join
    : 스스로 테이블을 조합
  • inner join(simple join)
    : 결합 조건에 부합하는 행을 반환하는 두 개나 그 이상의 테이블의 결합
  • outer join
    simple join의 결과를 확장. outer join은 결합 조건에 부합하는 모든 행을 반환하고, 또한 결합 조건에 부합하지 않은 다른 한 개의 테이블에서 일부나 모든 행을 반환

outer join은 LEFT OUTER, RIGHT OUTER, FULL OUTER 세가지 타입이 있다.
여러 테이블로부터 데이터를 검색할 때, 열을 포함하는 테이블을 명백하게 명시할 수 있다.
이것은 테이블들이 같은 이름으로 열을 포함할 때 중요하다.
명백하게 열을 인증하기 위해 테이블 별명이나 employees.employee_id 처럼 완벽한 테이블 이름을 사용할 수 있다.
테이블 별명은 단순하고 SQL 코드의 크기를 줄이기 위해 사용한다.

NATURAL JOIN 문법을 사용하여 일치하는 이름과 데이터타입을 가진 모든 열에서 자동적으로 두 테이블을 결합할 수 있다.
이것은 일치된 열에서 동등한 값들을 가진 두 개의 테이블로부터 선택된 행을 결합한다.

SELECT employee_id, last_name, first_name, department_id, department_name, manager_id 
FROM employees
NATURAL JOIN departments;
-- department_id, manager_id 열이 일치하는 employees와 department에서 동일한 값을 가진 열들을 가진 두 개의 테이블에서 데이터를 검색한다.

SELECT e.employee_id, e.last_name, e.first_name, e.manager_id, department_id, d.department_name, d.manager_id
FROM employees e
JOIN departments d USING (department_id);
-- department_id 열을 가진 두 개의 테이블에서 데이터를 검색한다.
-- employees 테이블이 e, departments 테이블은 d로 별명지은 것에 주의하라.

SELECT e.employee_id, e.last_name, e.first_name, e.manager_id, department_id,
d.department_name, d.manager_id, location_id, l.country_id
FROM employees e
JOIN departments d USING (department_id)
JOIN locations l USING (location_id);
-- 세 개의 테이블에서 데이터를 검색한다.
-- 두 개의 테이블은 department_id 를 가지고, 두 개의 테이블은 location_id 를 가진다.

SELECT e.employee_id, e.last_name, e.first_name, e.department_id, d.department_name, d.manager_id
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.manager_id = 122;
-- department_id 열을 가진 두 개의 테이블에서 manager_id 의 값이 122 인 데이터를 검색한다.

SELECT e.employee_id, e.last_name, e.first_name, e.department_id, d.department_name, d.manager_id, d.location_id, l.country_id
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations l ON d.location_id = l.location_id
WHERE l.location_id = 1700;
-- 세 개의 테이블에서 데이터를 검색한다.
-- 두 개의 테이블은 department_id 를 가지고, 두 개의 테이블은 location_id 를 가진다.

SELECT e.employee_id, e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
-- right 테이블(departments)에 부합되지 않더라도 left 테이블(employees)로부터 모든 행이 검색된다.

SELECT e.employee_id, e.last_name, d.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
-- left 테이블(employees)에 부합되지 않더라도 right 테이블(departments)로부터 모든 행이 검색된다.

SELECT e.employee_id, e.last_name, d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
-- departments 테이블에 부합되지 않아도 employees 테이블로부터 모든 행이 검색되고 left 테이블(employees)에 부합되지 않아도 departments 테이블로부터 모든 행이 검색된다.


Using Bind Variables With the SQL Commands Page

SQL 명령문이 실행될 때 값을 받기 위해 SQL Commands 페이지에서 바인드 변수를 사용할 수 있다.
바인드 변수는 접두사로 콜론(:)을 사용한다.
바인드 변수 이름으로는 :b, :bind_variable, :employee_id 등 무엇이든 사용할 수 있다.

SELECT * FROM employees WHERE employee_id = :employee_id

SQL Commands 페이지에서 바인드 변수로 명령문이 실행될 때, 바인드 변수에 대한 값을 위해 새 창이 열린다.
값을 입력 후에 Submit 버튼을 클릭한다. (윈도우 팝업 창 설정이 허용되어 있어야 한다.)

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Using Character Literals in SQL Statements

  • 많은 SQL 구문은 조건, 식, 문자 값의 지정을 요구하는 함수등을 포함한다.
  • 기본적으로 문자열에는 'ST_CLERK' 나 'mar%' 처럼 작은 따옴표를 사용해야 한다.
  • 이 때 문자열 안에 작은 따옴표가 포함되는 경우에는 인용 구분자 기법을 사용할 수 있다.
  • 인용 구분자 기법은 qQ 를 기입 후에 작은 따옴표를 사용하고 또 다른 문자를 따옴표 구분자로 사용한다.
  • 따옴표 구분자는 공백, 탭, 리턴을 제외한 어떤 싱글 바이트(single-byte) 또는 더블 바이트(double-byte)도 될 수 있다.
  • 시작 따옴표 구분자가 [, {, <, ( 문자이면 끝 따옴표 구분자는 ], }, > ) 문자가 되어야 한다.
  • 앞 인용 구분자와 뒤 인용 구분자는 동일해야 한다.

q'(name LIKE '%DBMS_%%')'
q'#it's the "final" deadline#'
q'<'Data,' he said, 'Make it so.'>'
q'"name like '['
"'


Using Regular Expressions When Selecting Data

  • 정규 표현식은 표준 문법 규칙을 사용한 문자열 데이터에서 패턴을 검색할 수 있게 한다.
  • 정규 표현식은 문자 순서의 복잡한 패턴을 지정할 수 있다.
  • 메타문자와 상수로 정규 표현식을 지정할 수 있다.
  • 메타문자는 검색 알고리즘을 지정하는 연산자이다.
  • 정규 표현식 함수와 조건은 REGEXP_INSTR, REGEXP_REPLACE, REGEXP_SUBSTR 을 포함한다.

SELECT employee_id, job_id FROM employees WHERE REGEXP_LIKE (job_id, '[ac|fi|mk|st]_m[an|gr]', 'i');

-- 예제에서 REGEXP_LIKE 는 ac, fi, mk, st 로 시작하고 다음에 _m 가 오고, an, gr 로 끝나는 job_id 값을 가진 열을 선택하는데 사용된다.
-- 메타문자 'I' 는 OR 를 'i' 는 대소문자를 구별하지 않음을 뜻한다.

SELECT phone_number, REGEXP_REPLACE( phone_number, '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})', '(\1) \2-\3') "Phone Number" FROM employees;

-- 예제에서 REGEXP_REPLACE 는 "nnn.nnn.nnnn" 형식에 괄호, 공백, 대쉬를 대신하여 "(nnn) nnn-nnnn" 형식을 산출하는데 사용된다.
-- 숫자(0-9)는 메타문자 [:digit:] 로 나타낸다.
-- 메타문자 {n} 은 고정된 자리 수를 지정한다.
-- '\.' 처럼 표현식에서 상수로 다루는 '\' 은 다음 문자의 이스케이프 문자로 사용된다.
-- 그렇지 않으면 메타문자 '.' 는 표현식에서 어떠한 문자를 표현한다.

SELECT phone_number, REGEXP_REPLACE( phone_number, '([[:digit:]]{3})\.([[:digit:]]{2})\.([[:digit:]]{4})\.([[:digit:]]{6})', '+\1-\2-\3-\4') "Phone Number" FROM employees;

-- 예제에서 REGEXP_REPLACE 는 "nnn.nnn.nnnn.nnnnn" 형식의 전화번호를 "+nnn-nn-nnnn-nnnnn" 형식으로 대신하는데 사용한다.

SELECT street_address, REGEXP_SUBSTR(street_address, '[[:digit:]-]+', 1, 1)
  "Street numbers" FROM locations;


-- 예제에서 REGEXP_SUBSTR 는 하나 또는 그 이상의 숫자와 대시를 구성하는 첫번째 아랫문자열을 반환한다.
-- [[:digit:]-]+ 에서 메타문자 '+' 는 여러 산출을 나타낸다.

SELECT street_address, REGEXP_INSTR(street_address, '[^ ]+', 1, 1)
  "Position of 2nd block" FROM locations;


-- 예제에서 REGEXP_INSTR 는 문자열에서 첫번째 문자로 검색을 시작하고, 하나 또는 그 이상의 공백이 아닌 문자의 두번째 시작 위치(default)를 반환한다.
-- REGEXP_INSTR 는 검색 결과가 없을 때 0 을 반환한다.
-- 메타문자 '^' 는 NOT(부정) 을 나타낸다.


Sorting Data Using the ORDER BY Clause

  • 테이블에서 지정된 열로부터 정렬된 테이블 행을 검색하고 출력하기 위해 ORDER BY 절의 SELECT 구문을 사용할 수 있다.
  • ORDER BY 절에서 지정된 열은 출력하기 원하는 SELECT 목록의 열이 되지 않아야 한다.
  • 오름차순인 ASC 또는 내림차순인 DESC 로써 정렬순서을 지정할 수 있다.(기본 정렬순서는 오름차순이다.)
  • 숫자 값 정렬순서는 1~999 처럼, 문자 값 정렬순서는 A~Z 처럼, 날짜 값은 01-JUN-93 부터 01-JUN-95 처럼 나타낸다.
  • NULL 값은 오름차순의 마지막에, 내림차순의 처음에 나타난다.

SELECT * FROM employees WHERE manager_id = 122 ORDER BY employee_id;
-- employee_id 로 정렬된 manager_id 가 122 인 열을 검색한다.
-- 순서는 employee_id 의 가장 낮은 수로 시작하는 기본 오름차순이다.

SELECT employee_id, last_name, first_name, manager_id FROM employees ORDER BY manager_id DESC;
-- manager_id 로 정렬된 행을 검색한다.
-- 순서는 employee_id 의 가장 높은 수로 시작하는 내림차순으로 지정됐다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret