ORACLE2009. 11. 21. 13:11
 

-데이터 베이스에서 데이터 검색 중에 표시되는 데이터 행을 제한 하거나 행 표시 순서를 지정.

 

1. 데이터 제한

-WHERE 절을 사용하여 질의에서 반환되는 행을 제한함.

-WHERE 절은 만족해야 할 조건을 포함함.

-WHERE 절은 FROM 절 다음에 위치함.

-조건이 참일 경우 조건을 만족하는 행이 반환됨.

 

2. 데이터 정렬

-ORDER BY 절을 사용하여 행을 정렬함.

-ORDER BY 절은 SELECT 문의 가장 마지막에 위치함.

-정렬 조건으로 표현식, 별칭, 열 위치를 지정할 수 있음.

-ORDER BY 절을 사용하지 않을 경우 동일한 질의를 두 번 이상 수행하더라도 동일한 순서로 질의되지 않음.

 

3. WHERE 절에 사용되는 단일 비교 연산자.

     =     :  a = b(a는 b와 같다)

     >     :  a > b(a는 b 보다 크다)

    >=     :  a >= b(a는 b 보다 크거나 같다)

     <     :  a < b(a는 b보다 작다)

    <=     :  a <= b(a는 b 보다 작거나 같다)

    <>    :   a <> b(a와 b 는 같지 않다)

 

4. BETWEEN 연산자

-값의 범위에 따라 행을 표시할 수 있음.

-지정 범위에는 하한 값과 상한값이 포함되고, 하한값을 먼저 지정해야 함.

ex) SQL> SELECT pname, duty, dsal

               FROM prof

               WHERE dsal BETWEEN 200 AND 250;

5. IN 연산자

-값이 특정 집합에 있는 값의 행을 표시할 수 있음.

-모든 데이터 유형에 사용할 수 있음.

ex) SQL> SELECT pname, duty, dsal

               FROM prof

                WHERE dsal IN (150, 180, 200, 230, 250);

 

6. LIKE 연산자

-검색할 값을 정확하게 알지 못하는 경우 패턴(pattern)이 일치하는 행을 표시할 수 있음.

-ESCAPE 옵션을 사용하여 검색할 문자에 '%' 또는 '_' 문자가 포함된 경우에도 검색할 수 있음.

-%  : 0개 이상의 일련의 문자를 나타냄.

-_   : 문자 하나를 나타냄.

ex) SQL> SELECT *

               FROM course

               WHERE cname LIKE '_D%';

 

5. NULL 연산자

- NULL 연산자에는 IS NULL 연산자와 IS NOT NULL 연산자가 있음.

-널(NULL) 여부를 검사

-어떤 값과도 동일성 여부를 판별할 수 없으므로 동등 연산자(=)를 사용하여 조회할 수는 없음.

ex) SQL> SELECT pname, duty, deptno, mgr

               FROM prof

               WHERE mgr IS NULL;

6. 논리 연산자

-AND 연산자 : 구성 요소 조건이 모두 TRUE이면 TRUE 를 반환.

-OR 연산자 : 구성 요소 조건 중 하나라도 TRUE이면 TRUE 를 반환.

-NOT 연산자 : 조건이 TRUE이면 FALS를 반환하고, FALSE이면 TRUE를 반환

*IN 연산자 외에 BETWEEN, LIKE, NULL 연산자 등 다른 SQL 연산자와 함께 사용할 수 있음.

 

7. 연산자 우선 순위

-산술연산자

-연결연산자

-비교 조건

-IS [NOT] NULL, LIKE, [NOT] IN

-[NOT] BETWEEN

-NOT 논리 조건

-AND 논리 조건

-OR 논리 조건

*괄호()를 사용하여 우선순위 규칙을 무시하고 우선 순위를 변경할 수 있음.


'ORACLE' 카테고리의 다른 글

SQL, SQL*PLUS, iSQL*PLUS의 차이  (0) 2009.11.21
ORDER BY  (0) 2009.11.21
열 별칭, 연결연산자, 리터럴(Literal), 중복행  (0) 2009.11.21
산술식, 연산자, 널(Null)  (0) 2009.11.21
SELECT  (0) 2009.11.21
Posted by Tiwaz
ORACLE2009. 11. 21. 13:10
열 별칭, 연결연산자, 리터럴(Literal), 중복행 ORACLE

2009/01/08 15:12

작성자: 베레(lsj403)

1. 열 별칭 고려사항

-열 머리글의 이름을 변경 함.

-계산식에 대한 열머리를 지정할 때 유용함.

-열 이름 바로 뒤에 사용함. 열 이름과 별칭 사이에 선택적으로 AS 키워드를 사용할 수 있음.

-공백 또는 특수 문자가 있거나 대소문자를 구분할 경우큰 따옴표("")를 사용함.

 

2. 연결 연산자의 특징

-열 또는 문자열을 다른 열에 연결함.

-두 개의 세로선(||)으로 표시함.

-문자식에 해당하는 결과 열을 생성.

 

3. 리터럴(Literral:문자식표현) 의 특징

-열 이름이나 열 별칭이 아니면서 SELECT 목록에 포함된 문자, 숫자 또는 날짜.

-각 행이 반환될 때마다 출력

-텍스트인 리터럴은 질의 결과에 포함되어 SELECT 목록의 열과 동일하게 취급됨.

-날짜 및 문자 리터럴은 반드시 작은 따옴표('')로 묶어야 함.하지만 숫자 리터럴은 묶지 않아도 됨.

 

4. 중복 행

-질의는 기본적으로 중복 행을 포함한 모든 행을 표시함.

-SELECT 절에서 DISTINCT 키워드를 사용하여 중복 행을 제거함.

-DISTINCT 다음에 여러 열을 지정할 수 있음.


'ORACLE' 카테고리의 다른 글

ORDER BY  (0) 2009.11.21
WHERE 데이터 제한 및 정렬, 연산자  (0) 2009.11.21
산술식, 연산자, 널(Null)  (0) 2009.11.21
SELECT  (0) 2009.11.21
SQL(Structured Query Language)  (0) 2009.11.21
Posted by Tiwaz
ORACLE2009. 11. 21. 13:09
산술식, 연산자, 널(Null) ORACLE

2009/01/07 22:37

작성자: 베레(lsj403)

1. 산술식 사용시 고려사항

-산술 연산자를 사용하여 숫자 및 날짜 데이터에 대한 표현식을 작성.

-데이터 표시 방식을 수정 또는 계산을 수행할 때 산술식을 사용할 수 있다.

-산술식은 열 이름, 상수 값 및 산술 연산자가 포함될 수 있음.

-SQL에서 사용가능한 산술 연산자는 +,-,*,/ 임

-FROM 절을 제외한 SQL 문의 모든 절에서 산술 연산자를 사용 할 수 있음.

 

2. 연산자 우선순위

-곱셈과 나눗셈은 덧셈과 뺄셈보다 우선순위가 높음.

-우선순위가 동일한 연산자는 왼쪽에서 오른쪽으로 계산됨.

-괄호는 우선적으로 계산되며 명령문을 명확히 나타내는 역할을 함.

 

3. 널(NULL)의 특징

-한 행의 특정 열에 데이터 값이 없으면 그 값을 널(NULL)이라 함

-널은 알 수 없는 값, 사용할 수 없는 값, 할당할 수 없는 값, 적용할 수 없는 값을 의미하며 0이나 공백과는 다름.

-모든 데이터 유형의 열에는 널이 포함될 수 있음. 하지만 Not NULL 및 PRIMARY KEY 등의 제약 조건이 지정된 열에는 널을 사용할 수 없음.


'ORACLE' 카테고리의 다른 글

WHERE 데이터 제한 및 정렬, 연산자  (0) 2009.11.21
열 별칭, 연결연산자, 리터럴(Literal), 중복행  (0) 2009.11.21
SELECT  (0) 2009.11.21
SQL(Structured Query Language)  (0) 2009.11.21
데이터베이스 정규화  (0) 2009.11.21
Posted by Tiwaz
ORACLE2009. 11. 21. 13:05
SELECT ORACLE

2009/01/07 22:22

작성자: 베레(lsj403)

1. SELECT문은 데이터베이스에서 정보를 검색.

2. SQL> SELECT *|{[DISTINCT] column | expression [alias], ...}

         FROM table;

 

3. SELECT 문의 기능

- 프로젝션(Projection)

- 선택(Select)

- 조인(Join)

 

4. SQL문 작성시 고려사항

- 대소문자를 구별하지 않는다.

- 하나 이상의 줄에 입력할 수 있다.

- 키워드(keyword)는 여러 줄에 쓰거나 약어로 쓸 수 없다.

- 절은 일반적으로 서로 다른 줄에 쓴다.

- 들여쓰기를 하면 SQL문을 좀더 쉽게 작성할 수 있다.

- 일반적으로 키워드는 대문자를 입력하고, 테이블 이름, 열 등 다른 단어는 일반적으로 소문자로 입력함.

 

*SELECT 뒤에 별표(*)를 사용하면 테이블에 있는 데이터의 모든 열을 볼 수 있다.

*해당 열(column) 이름을 쉼표(,)로 구분하여 테이블의 특정 열을 볼 수 있다.

*SELECT 절에 출력 결과에 표시할 순서대로 열을 지정한다.

 

5. 열 머리글 기본값

-iSQL*Plus 열 머르글

  기본 머리글 정렬 : 가운데

  기본 머리글 표시 : 대문자

-SQL*Plus 열 머리글

  문자 및 날짜 열 머리글 : 왼쪽 정렬

  숫자 열 머리글 : 오른쪽 정렬

  기본 머리글 표시 : 대문자


Posted by Tiwaz
ORACLE2009. 11. 21. 13:04
 

1.SQL(Strucuted Query Language)

-비절차적(Non-procedural) 데이터 접근 언어.

-응용 프로그램에서 손쉽게 데이터에 접근할 수 있다록 함.

-배우기 쉽고 사용이 용이함.

 

4.데이터 조작어(DML:Data Manipulation Language)

- SELECT : DB 객체로 부터 데이터 검색

ex) SQL> SELECT * FROM table;

- INSERT : DB 객체에 데이터 입력

ex) SQL> INSERT INTO table VALUES(data, data, ....);

- UPDATE : 기존 DB 객체안의 데이터 수정

ex) SQL> UPDATE table SET column=value;

- DELETE : DB 객체에 데이터 삭제

ex) SQL> DELETE FROM table

 

5.데이터 정의어(DDL:Data Definition Language)

- CREATE : DB 객체 생성

- ALTER : 기존의 DB 객체를 다시 정의.

- DROP : DB 객체 삭제

- RENAME

- TRUNCATE

 

6.트랜잭션(Transaction) 제어어

- COMMIT

- ROLLBACK

- SAVEPOINT

 

7.데이트 제어어(DCL:Data Control Language)

- GRANT : DB 객체에 권환 부여

- REVOKE : 이미 부여된 DB 객체의 권환 회수


'ORACLE' 카테고리의 다른 글

산술식, 연산자, 널(Null)  (0) 2009.11.21
SELECT  (0) 2009.11.21
데이터베이스 정규화  (0) 2009.11.21
DataBase의 구성 요소 및 관계형 데이터베이스의 개념  (0) 2009.11.21
File System과 DataBase System과의 차이  (0) 2009.11.21
Posted by Tiwaz
ORACLE2009. 11. 21. 13:03
데이터베이스 정규화 ORACLE

2009/01/07 20:46

작성자: 베레(lsj403)

1. 정규화

-정규화(Normalization)란 한 테이블에서 불필요하게 중복되는 데이터를 분리하여 새로운 단순한 형태를 가지는 여러 개의 테이블로 나누는 것.

-정규화를 통해 분리된 테이블은 조인(Join) 연산을 통해 손실없이 모든 데이터를 표현할 수 있어야함.

 

2. 제1정규형(1NF : First Normal Form)

-릴레이션(테이블)에 포함되는 속성의 값이 다중값을 지원하지 않고 원자값만을 지원함.

 

3. 제2정규형(2NF : Second Normal Form)

-릴레이션(테이블)이 제1정규형의 조건을 만족, 릴레이션의 기본키가 아닌 속성들이 기본키에 완전히 종속적이어야 함.

 

4.제3정규형(3NF : Third Normal Form)

-릴레이션(테이블)이 제2정규형의 조건을 만족, 기본키가 아닌 모든 속성들이 기본키에 대하여 이행적 함수 종속이 아니어야 함.

*이행적 함수 종속 : A->B, B->C이면 A->C 관계가 이루어짐.


Posted by Tiwaz
ORACLE2009. 11. 21. 13:02

DataBase의 구성 요소 및 관계형 데이터베이스의 개념 ORACLE

2009/01/07 20:28

작성자: 베레(lsj403)

1.개체(Entity)

-데이터로 표현하려는 현실세계의 대상(Object)를 의미.

-하나의 개체는 한개 이상의 속성(attribute)으로 구성, 각 속성은 개체의 특성 또는 상태값을 가짐.

 

2.관계(Relationship)

-개체집합과 개체집합 사이에는 여러 유형의 관게가 존재함.

 

3.관계형 데이터베이스의 개념

-관계형 데이터 모델을 기반으로 설계된 데이터베이스 관리시스템.

-관계형 데이터베이스 관리 시스템에서 사용되는 데이터베이스.

-2차원 테이블의 모음.

 

4. 관계형 데이터베이스 용어

-행(Rows) : 특정 객체에 대한 데이터, 튜플(tuple)이라고도 함.

-기본키(Primary key) : 유일한 값만 저장, 널(null) 값을 허용하지 않음.

-외래키(Foreign key) : 자신 또는 다른 테이블의 기본키 또는 유일키(unique)를 참조 함.

-일반 열(Column) : 열의 이름은 테이블 내에서 유일해야 함. 열에 저장될수 있는 값은 원자값이며 허용되는 값의 범위를 도메인이라 함.

-널(null) : 특정 열에 값이 입력되지 않은 상태.

'ORACLE' 카테고리의 다른 글

SQL(Structured Query Language)  (0) 2009.11.21
데이터베이스 정규화  (0) 2009.11.21
File System과 DataBase System과의 차이  (0) 2009.11.21
데이터베이스의 개념(DB/DBMS/DBS)  (0) 2009.11.21
iSQL*PLUS Web으로 실행시키기  (0) 2009.11.21
Posted by Tiwaz
ORACLE2009. 11. 21. 13:01
File System과 DataBase System과의 차이 ORACLE

2009/01/07 20:06

작성자: 베레(lsj403)

1.File System 의 단점

-사용이 어렵다.

-응용 프로그래머가 파일의 물리적 데이터 구조를 잘 알아야 함.

-데이터 독립성을 지원 못함.

-데이터의 중복 발생.

-다수 사용자 환경을 지원하지 못함.

-세부적인 사용자 접근 제어 구현이 불가능.

 

2.DataBase의 장점

-데이터 공유 가능.

-데이터 중복 감소

-데이터 불일치 감소

-데이터 보안을 구현

-데이터 표현 및 저장에 있어 일관된 표준 체계를 적용 가능.


Posted by Tiwaz
ORACLE2009. 11. 21. 12:59
데이터베이스의 개념(DB/DBMS/DBS) ORACLE

2009/01/07 19:59

작성자: 베레(lsj403)

1. 데이터베이스(DB:DataBase)

-데이터베이스(DB:Database)는 특정 조직 내에서 다수의 사용자들이 공유(share)할 수 있도록 통합(integrate) 시키고 컴퓨터 저장 장치에 저장(Store)시킨 운영 데이터의 집합.

 

2. 데이터베이스 관리 시스템(DBMS:DataBase Management System)

-데이터베이스를 관리 운영하는 소프트웨어로서 데이터베이스 시스템에서 핵심적인 역할 수행

-데이터베이스와 사용자 응용 프로그램 사이의 중개자로서 모든 응용 프로그램들의 데이터베이스 접근을 대행하여 데이터베이스를 관리해주는 소프트웨어 시스템.

 

3. 데이터베이스 시스템(DBS:DataBase System)

-데이터베이스 시스템은 응용프로그램, 데이터 베이스 관리 시스템, 데이터베이스 등이 통합된 것.

 

4. 데이터베이스 구성 요소

-개체(Entity)

-관계(Relationship)

 

5. 데이터베이스 정규화

-정규화(Normalization)란 한 테이블에서 불필요하게 중복도는 데이터를 분리하여 새로운 단순한 형태를 가지는 여러 개의 테이블로 나누는 것.


Posted by Tiwaz
ORACLE2009. 11. 21. 12:58
 

The following J2EE Applications have been deployed and are accessible at the URLs listed below.

iSQL*Plus URL:
http://localhost.localdomain:5560/isqlplus

iSQL*Plus DBA URL:
http://localhost.localdomain:5560/isqlplus/dba


Posted by Tiwaz
ORACLE2009. 11. 21. 12:53

Installation of Oracle 9i on fedora Core Linux 2,3,4,5 and 6 ORACLE

2008/08/11 00:18

작성자: 베레(lsj403)

복사 http://blog.naver.com/lsj403/memo/77722095

Installation of Oracle 9i (R2) on Fedora Core Linux 2, 3, 4, 5 and 6


This paper (HOWTO) describes step-by-step installation of Oracle 9i database software on Fedora Core 2, 3, 4, 5 and 6.

This paper covers following steps:

Pre-Instalation Tasks

1. Create oracle User Account

Login as root and create te user oracle which belongs to dba group.
su -
# groupadd dba
# useradd -g dba oracle

2. Setting System parameters
Edit the /etc/sysctl.conf and add following lines:
kernel.sem = 250 32000 100 128
kernel.shmmax = 2147483648
kernel.shmmni = 128
kernel.shmall = 2097152
kernel.msgmnb = 65536
kernel.msgmni = 2878
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
Note: You need execute "sysctl -p" or reboot system to apply above settings.

Edit the /etc/security/limits.conf file and add following lines:
* - nproc 16384
* - nofile 16384

3. Setting Oracle Enviroment
Edit the /home/oracle/.bash_profile file and add following lines:

Settings for Fedora Core 2,3,4 only. For Fedora Core 5 and 6 use the next settings.
ORACLE_BASE=/opt/oracle
ORACLE_HOME=$ORACLE_BASE/920
ORACLE_SID=MY_ORACLE
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_ASSUME_KERNEL=2.4.1
THREADS_FLAG=native
ORACLE_OEM_JAVARUNTIME=/opt/jre1.3.1_15
PATH=$PATH:$ORACLE_HOME/bin

export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH LD_ASSUME_KERNEL THREADS_FLAG ORACLE_OEM_JAVARUNTIME PATH

Settings for Fedora Core 5 and 6 only. For Fedora Core 2,3,4 use the above settings. Note setting of LD_ASSUME_KERNEL will cause incorrect functionality of FC5 and FC6.
ORACLE_BASE=/opt/oracle
ORACLE_HOME=$ORACLE_BASE/920
ORACLE_SID=MY_ORACLE
LD_LIBRARY_PATH=$ORACLE_HOME/lib
ORACLE_OEM_JAVARUNTIME=/opt/jre1.3.1_15
PATH=$PATH:$ORACLE_HOME/bin

export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH ORACLE_OEM_JAVARUNTIME PATH

Save the .bash_profile and execute following commands for load new enviroment:
cd /home/oracle
. .bash_profile

4. Create base directory for Oracle

Login as root and create base directory for Oracle ($ORACLE_BASE).
su -
# cd /opt
# mkdir oracle
# chown oracle:dba oracle

Download & Install

1. Download and install required .rpm packages

Some additional packages are required for succesful instalation of Oracle software. To check whether required packages are installed on your operating system use following command:
rpm -q gcc glibc-headers glibc-kernheaders glibc-devel compat-libstdc++ cpp compat-gcc
Note: You don't need glibc-kernheaders installed on FC6 as this package is not shipped with FC6.
If some package is not installed download it from Fedora project website or direct from Core 2, Core 3, Core 4, Core 5, Core 6 locations.

This step is required for Fedora Core 3 and 4 only. Fedora Core 3 is shipped with compat-gcc-8.3.3.4. Fedora Core 4 is shipped with compat-gcc-32-3.2.3. These package are GCC 3.x compiler which are not useful for succesful inatallation. Check whether compat-gcc-8.3.3.4 or compat-gcc-32-3.2.3 is installed. If so then uninstall it using folowing command:
rpm -e compat-gcc
Download the compat-gcc-7.3-2.96.126.i386.rpm package from Core 2 location or from here.


Install the required packages using the rpm command (Note version of packages may change in newer release, so versions for all packages (except compat-gcc package) used in next command are just for example.):
# rpm -ivh gcc-3.4.2-6.fc3.i386.rpm \
glibc-headers-2.3.3-74.i386.rpm \
glibc-kernheaders-2.4-9.1.87.i386.rpm \
glibc-devel-2.3.3-74.i386.rpm \
compat-libstdc++-3.4.2-6.fc3.i386.rpm \
cpp-3.4.2-6.fc3.i386.rpm \
compat-gcc-7.3-2.96.126.i386.rpm


For Fedora Core 4, 5 and 6 only:Install the required additional packages using the rpm command:
# rpm -ivh compat-libgcc-296-2.96-___.rpm \
compat-libstdc++-33-3.2.3-___.rpm \
compat-libstdc++-296-2.96-___.rpm

If all required packages were installed succesfuly then login as root and switch the GCC3 compiler binary with GCC2 compiler binary as following:
su -
# cd /usr/bin
# mv ./gcc ./gcc3
# mv ./gcc296 ./gcc

2. Download the Java Runtime Enviroment (j2re-1_3_1_15-linux-i586.bin) from the Sun website. Keep in mind you need to download j2re1.3.1_11 or higher (Note: Install JRE 1.3.1_1x version only).

Login as root and make the the file executable and then execute it. When the JRE is exracted move the "jre1.3.1_15" di rectory to "/opt" directory.
# chmod +x j2re-1_3_1_15-linux-i586.bin
# ./j2re-1_3_1_15-linux-i586.bin

# mv jre1.3.1_15 /opt/

3. Download the Oracle 9i (9.2.0.4) software from Oracle website.
Extract the files using following command:
gunzip ship_9204_linux_disk1.cpio.gz
gunzip ship_9204_linux_disk2.cpio.gz
gunzip ship_9204_linux_disk3.cpio.gz

cpio -idmv < ship_9204_linux_disk1.cpio
cpio -idmv < ship_9204_linux_disk2.cpio
cpio -idmv < ship_9204_linux_disk3.cpio

When all archives were extracted you've got three directories Disk1, Disk2 and Disk3.
Edit the Disk1/install/linux/oraparam.ini and modify JRE_LOCATION variable and set path to our JRE installation from Step 2.

JRE_LOCATION=/opt/jre1.3.1_15

4. Start the Oracle software installation process.

Now the system is prepared for Oracle software installation. To start the installation process execute the following commands:
cd Disk1
./runInstaller

When network configuration assistant and database configuration assistant has failed during st artup then do following steps:
cd /opt/oracle/920
rm JRE
ln -s /opt/jre1.3.1_15 JRE
su -
# cd /opt/oracle/920/JRE/bin
# ln -s java jre
# cd i386/native_threads
# ln -s java jre

Post-Instalation Tasks

1. Switch back the GCC binaries
su -
# cd /usr/bin
# mv ./gcc ./gcc296
# mv ./gcc3 ./gcc

2. Change of JRE path in Oracle Universal Installer

Edit the $ORACLE_BASE/oui/oraparam.ini file and modify the value of JRE_LOCATION to /opt/jre1.3.1_15

3. (Optional) You may consider to use rlwrap for comfortable work with sqlplus. RPM package for Fedora Core (x86) distribution you can download here.
su -
# rpm -ivh rlwrap-0.24.fedora.i386.rpm
# exit
echo "alias sqlplus='rlwrap sqlplus'" >> /home/oracle/.bash_profile
. /home/oracle/.bash_profile


Common Installation Errors

Unable to load native library: /tmp/OraInstall2005-01-08_11-11-34AM/jre/lib/i386/libjava.so: symbol __libc_wait, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
Solution: Install new JRE 1.3.1 version. Edit the Disk1/install/linux/oraparam.ini and set path to new JRE for JRE_LOCATION variable. For more information see Download & Install section.

/tmp/OraInstall2005-04-26_11-38-19AM/jre/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory
Solution: Install the xorg-x11-deprecated-libs package (for >=FC4 versions). For FC5 and later install libXp package.

/tmp/OraInstall2005-06-14_03-46-25PM/jre/bin/i386/native_threads/java: error while loading shared libraries: /tmp/OraInstall2005-06-14_03-46-25PM/jre/lib/i386/native_threads/libhpi.so: cannot restore segment prot after reloc: Permission denied
Solution: Modify /etc/selinux/config and change value of SELINUX to "disabled" and reboot computer.

Starting Oracle Intelligent Agent.../opt/oracle/920/bin/dbsnmpwd: line 156: 1393 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1
/opt/oracle/920/bin/dbsnmpwd: line 156: 1405 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1
/opt/oracle/920/bin/dbsnmpwd: line 156: 1416 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1
/opt/oracle/920/bin/dbsnmpwd: line 156: 1427 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1

Solution: Download and apply patch nr.: 3238244 from http://metalink.oracle.com.

Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using 'localhost:0.0' as the value of the DISPLAY variable.
Solution: Execute "export DISPLAY=:0.0" (as oracle user) and "xhost +" as user who has opened X session (for example logged in KDE, GNOME, etc.). If the value is other than 127.0.0.1 or localhost you should "xhost +" on client machine.

Error in invoking target install of makefile /opt/oracle/920/ctx/lib/ins_ctx.mk
Error in invoking target install of makefile /opt/oracle/920/precomp/lib/ins_precomp.mk
Error in invoking target install of makefile /opt/oracle/920/plsql/lib/ins_plsql.mk
Error in invoking ntcontab.o of makfile /opt/oracle/920/network/lib/ins_net_client.mk

Solution: Install the compat-gcc-7.3-2.96.126.i386.rpm (gcc 2.96) package and change the GCC binaries. For more information see Download & Install section. In case of Fedora Core 5 take look at next error message.

sed: -e expression #1, char 7: unterminated `s' command error in $ORACLE_HOME/install/make.log
Solution: There is probably bug in bash (FC5 only). Download and install bash package from FC4. I have prepared this package (builded from FC4 src.rpm) for FC5 - Download.
Install it using "rpm -ivh bash-3.0-31.i386.rpm --force".

Initializing Java Virtual Machine from /tmp/OraInstall2006-10-25_01-43-30PM/jre/bin/java. Please wait... /tmp/OraInstall2006-10-25_01-43-30PM/jre/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory - after ./runInstaller execution.
Solution:
su -
# cd /usr/lib
# ln -s libstdc++-3-libc6.2-2-2.10.0.so libstdc++-libc6.1-1.so.2

Start ./runInstaller again.


Last update: 25-10-2006. Comments, suggestions, questions, errors (also grammatical :) )? Feel

'ORACLE' 카테고리의 다른 글

데이터베이스의 개념(DB/DBMS/DBS)  (0) 2009.11.21
iSQL*PLUS Web으로 실행시키기  (0) 2009.11.21
오라클 설치 정리  (0) 2009.11.21
The Index_DESC Hint  (0) 2009.11.11
Installation of Oracle 10g on Centos Linux 5  (0) 2009.11.11
Posted by Tiwaz
ORACLE2009. 11. 21. 12:51

본문스크랩 오라클 설치 정리 ORACLE

2008/08/07 18:34

작성자: 베레(lsj403)

복사 http://blog.naver.com/lsj403/memo/77722012

출처 IT | 인스피런
원문 http://blog.naver.com/503s/60083321411

INSTALL oracle9i on redhat 9.0 

1. 설치전 필요한 페키지
X-Window 필수
gcc-3.2.2-5
cpp-3.2.2-5
glibc-devel-2.3.2-11.9
binutils-2.13.90.0.18-9
compat-gcc-7.3-2.96.118.i386.rpm
compat-libgcj-7.3-2.96.118.i386.rpm
compat-libgcj-devel-7.3-2.96.118.i386.rpm
nss_db-compat-2.2-20.i386.rpm
pdksh-5.2.14-21
libncursers

2. 다운로드 소스
http://otn.oracle.com/software/products/oracle9i/htdocs/linuxsoft.html

 

# gunzip ship_Disk1.cpio.gz                            모든 파일을 압축을 푼다.
# cpio -idmv < Linux9i_Disk1.cpio           이렇게 순서대로 하면 각각 Disk1, DIsk2, DIsk3 라는 디렉터리가 생기면 압축이 풀린다. 

3. 계정 및 그룹생성 시스템 설정
# groupadd dba
# adduser -g dba oracle

# passwd oracle

# chown -R oracle.dba /home/oracle           디렉토리를 오라클이 access 하게 해준다

# chmod  755 /home/oracle


# vi /etc/sysctl.conf
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

# vi /etc/security/limits.conf
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

만약 리붓팅하지 않을려면 다음과 같이한다.
# echo 250 32000 100 128 > /proc/sys/kernel/sem
# echo 536870912 > /proc/sys/kernel/shmmax
# echo 4096 > /proc/sys/kernel/shmmni
# echo 2097152 > /proc/sys/kernel/shmall
# echo 65536 > /proc/sys/fs/file-max
# echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range


3. 환경변수 설정(여기서 부터 oracle 계정으로 바꾼다.)


$ vi .bash_profile
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2.0.1
export ORACLE_OWNER=oracle
export ORACLE_SID=oracle
export ORACLE_TERM=xterm
#export TMPDIR=$ORACLE_BASE/tmp
#export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG='AMERICAN_AMERICA.KO16KSC5601'
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORAClE_HOME/oracm/lib:/lib:/usr/lib:/usr/local/lib
export LANG=C
export LD_ASSUME_KERNEL=2.4.1
export THREADS_FLAG=native
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/oracm/bin

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib


4. 3번의 과정이 성공적으로 끝났다면 설치창이 뜬다. 

$ su -             

# xhost +          root 계정에서 실행

xhost +   엔터로 모든 계정에서 X window 를 사용할 수 있게 해 준 후에
오라클 홈페이지에서 다운로드 받은 설치파일 위치로 간다.
본인은  /home/oracle 위치에 다운 받았다. 압축푼 위치의 Disk1 로 이동하면
runInstaller   라는 파일이 있다.  이걸 실행시킨다.

# su - oracle

$ cd /home/oracle/Disk1

$ ./runInstaller                       <- 오라클 소스압축푼 디렉터리

Oracle Universal Installer 가 뜨면서 여러가지를 물어본다
/home/oracle/oraInventory  을 oracle_base directory 로 한다
UNIX Group Name 은 dba 로 한다

Full path name for Oracle Home:  는
  /home/oracle/product/9.2.0  로 한다

root 권한으로 특정 파일(/tmp/orainstRoot.sh)을 실행해야 하라고 하면 다른 터미널 창에서
다음과 간이 하면 아래에 다음 메시지가 전시된다.

# /tmp/orainstRoot.sh

 

“Oracle9i Database 9.2.0.1.0”을 선택하여 데이터베이스를 구성합니다.
“제품 언어...”를 클릭합니다.

Oracle DB에서 사용할 문자 셋을 설정합니다. 이곳 설정은 $HOME/.bash_profile 의
NLS_LANG의 값과 일치해야 합니다. Default character set 이 KO16KSC5601이므로
Database Character Set을 default로 놓고 “다음” 버튼을 물러 계속 설치를 진행합니다.

설치 유형을 묻는 화면입니다. 여기서는 Enterprise Edition을 선택하여 설치합니다.
Enterprise Edition은 모든 컴포넌트가 설치 됩니다. “다음” 버튼을 클릭합니다.


“설치 유형”에서 “Database Configuration”으로 넘어가는 중간 화면 입니다.


Database Suite에서 General Purpose를 선택합니다. “다음”버튼을 클릭하여 계속 설치를 진행합니다.

Global Database 이름, SID 등을 정해 줍니다.


다음을 계속 누르면 설치가 시작됩니다.

 

root 권한으로 특정 파일(/home/oracle/product/9.2.0.1/root.sh )을 실행해야 하라고 하면 다른 터미널 창에서
다음과 간이 하면 아래에 다음 메시지가 전시된다.

# /home/oracle/product/9.2.0.1/root.sh 

 

설치 진행 ~~~

 

password 설정 창 뜨면 설정하고

설치 계속~~

error 창 하나뜸 그냥 확인 하고 next

설치 계속~~

 

완료

Posted by Tiwaz
.Net Framework/.NET2009. 11. 16. 09:42
 
  1. 시작->프로그램->VS2005-> VS Tools -> 명령 프롬프트 실행
  2. 역어셈블리 툴인 ildasm.exe 실행
  3. 아래와 같이 프로그램 실행
  4. 파일 -> 열기 클릭
  5. 역어셈블 하고자 하는 *.dll 선택 열기
  6. 아래와 같이 *.dll 파일이 열림.
  7. 파일->덤프 메뉴 클릭
  8. 아래와 같은 덤프 옵션창에서 원하는 형식으로 설정 확인
  9. 확인 버튼을 눌리면 *.dll 파일이 위치한 경로에 *.txt / *.res 파일 생성
  10. *.txt 파일의 경우 원래의 코드 형태는 아니지만 클래스, 메소드, 프라퍼티 정보가 아래와 같이 생성.
  11. *.res 파일의 경우 열기 하였을 경우 아래와 같은 결과를 보여줌
  12. 파일->트리 덤프 클릭 *.dll 파일을 열면
  13. 아래와 같이 *.txt 파일 생성
  14. 파일을 열어 보면 아래와 같이 트리형태로 클래스, 메소드, 프라퍼티 등을 볼수 있음.
  15. ILDASM.exe 실행시 심볼 형태로, 덤프한 결과일 경우 축약형으로 참고하여 보면 도움이 될듯..
  16. ( 인포북 C# .NET플랫폼 참고)

    ILDASM.EXE 심볼

    축약형

    설명

    .(DOT)

    아이콘은 주어진 타입에서 많은 세부 정보를 찾아 있음을 의미한다.

    더블클릭할 경우에는 아이템은 트리에서 관련된 노드로 점프하게 된다.

    [NSP]

    네임스페이스를 의미한다.

    [CLS]

    클래스를 의미한다. 중첩된 클래스의 경우에는 <outer 클래스>

    $<inner 클래스> 방식으로 표현한다.

    [VCL]

    구조체를 의미한다.

    [INT]

    인터페이스 타입을 의미한다.

    [FLD]

    주어진 타입에서 정의된 필드를 의미한다.(public 데이터).

    [STF]

    주어진 타입에서 정의된 정적(static) 필드를 의미한다.(클래스 차원에서).

    [MET]

    주어진 타입의 메소드를 의미한다.

    [STM]

    주어진 타입의 정적메소드를 의미한다.

    [PTY]

    주어진 타입의 프로퍼티를 의미한다.

    []

     


Posted by Tiwaz
ORACLE2009. 11. 11. 23:37

The Index_DESC Hint
The INDEX_DESC hint causes indexs to be scanned in descending order (of their indexed value or order), which is the opposite of the INDEX and INDEX_ASC hints. This hint is overridden when the query has multiple tables, because the index needs to be used in the normal ascending order to be joined to the other table in the query. Some restrictions for this include that it does not work for bitmap indexes or for descending indexes, that it causes the index to be scanned in ascending order, and that it does not work across partitioned index boundaries but performs a descending index scan of each partition.

Syntax
select /*+ INDEX_DESC (table index1, index2...) * column1, ...

Example
select /*+ INDEX_DESC(emp deptno_idx) */ empno, ename, deptno
from emp
where deptno = 1;

The INDEX_DESC processes an index in descending order of how it was built. This hint will not be used if more than one table exists in the query.

 

-----------------------------------------------------------------------------------------

출처는 잘모르겠습니다~

문제시 삭제처리하겠습니다^^


개발을 하다보면 SQL문을 자주 사용하게 되는데...
최소한 Toad등에서 Query에 대해 Plan한번만 떠 보세요... 그러면 그 쿼리가 어느 정도의 성능을 내는지는 대충 짐작하실 수 있습니다. 그런 다음 테이블의 인덱스를 적절히 사용하는지 확인만 하면 최소한 나쁜 쿼리는 작성하지 않게 됩니다. (인덱스를 사용하는 경우가 최선의 성능을 보장 하지는 않습니다)

아래 내용을 참고하시고 사용하는 DB가 오라클이라면 반드시 힌트에 대해 관심을 가지시기 바라구요 옵티마이저 수행 경로가 정상적인 경우와 비정상인 경우 성능 차이는 장난 아닙니다. 심지어 10배 이상 나는 경우도 있구요,,,
(힌트는 Oracle Optiomizer의 수행경로를 변경 시키는 역할을 합니다.)

인덱스 힌트를 사용하게 되면 오라클 옵티마이저는 기술된 인덱스를 써야 한다는 것을 알게되며 이 경우 Table Full Scan을 하지 않게 되죠... 물론 사용되는 인덱스에 대해 COST는 계산하지 않고 존재하는 인덱스라면 사용을 한다는 이야깁니다...

만약 인덱스 힌트가 사용되지 않았지만 인덱스를 사용할 수 있는 경우라면 여러 인덱스중 COST가 적게 드는 인덱스를 하나 선택하여 사용하게 되구요...


사용 형식은 아래와 같구요...

/*+ INDEX ( table [index [index]...] ) */

table은 테이블 명이나 Alias 명 입니다.
index에는 사용되는 인덱스명을 쓰시면 되구요,

예)
select /*+ INDEX(idx_emp_job) */
       ename,
       job
from emp
where job= '프로그래머';

DELETE /*+ INDEX(idx_emp_status)*/
FROM emp_status
WHERE status = '휴직';

*** INDEX_ASC : INDEX 힌트와 거의 유사하며 단지 다른 부분이라면 인덱스 영역의 검색되는 데이터가 오름차순으로 Scan 되는 것이죠...

INDEX_ASC
/*+ INDEX_ASC(table index[index .. index]) */


*** INDEX_DESC : 이 힌트 역시 INDEX힌트와 유사하며 단지 인덱스 영역의 검색되는 데이터가 내림차순으로 Scan 되는 것이죠...

/*+ INDEX_DESC (table index[index .. index]) */

위 INDEX_ASC나 INDEX_DESC를 적절히 사용하시면 ORDER BY 구문을 사용하지 않아도 되는 경우가 대부분 입니다.(ORDER BY를 많은 건의 데이터에 대해 사용하시면 성능에 악 영향을 줍니다)

emp 테이블에 ename으로 인덱스가 있다면...

select ename, sal
from emp
order by ename

==>

select /*+ index_asc(emp) */
         ename, sal
from emp
where ename > '가'  -- 한글 이름을 사용한다고 했을 때
(이 경우 order by를 사용하지 않았지만 데이터는 ename으로 오름차순 정렬되어 나옵니다)


*** FULL : 인덱스 사용하지 않고 Table을 FULL Scan하라는 힌트
만약 성별처럼 "M" 아니면 "F"만 가지는 경우 분포도가 50%이므로 인덱스를 사용하는 것보다 인덱스를 사용하지 않는 경우가 성능에 효율적일 수 있습니다. 이러한 경우 사용하는 힌트죠...

사용 형식
/*+ FULL (table) */

select /*+ FULL(emp) */ ename, sal
from emp
where sex = 'M'

*** NO_INDEX : 기술된 테이블에 대해서는 인덱스를 사용하지 말라는 의미

select /*+ NO_INDEX(emp) */ ename, sal
from emp where sex = 'M';


Posted by Tiwaz
ORACLE2009. 11. 11. 23:34

//root 로 로그인
#su - 

 /*커널 매개변수 확인 및 설정(변수 값이 클경우 안바꿔도 상관없음)
 #/sbin/sysctl -p
 #/sbin/sysctl -a | grep shm
 #/sbin/sysctl -a | grep sem
 #/sbin/sysctl -a | grep file-max
 #/sbin/sysctl -a | grep ip_local_port_range
 */


 //매개변수 설정
#vi /etc/sysctl.conf 

 #kernel.shmall = 2097152
 #kernel.shmmax = 2147483648
 kernel.shmmni = 4096
 # semaphores: semmsl, semmns, semopm, semmni
 kernel.sem = 250 32000 100 128
 #fs.file-max = 65536
 net.ipv4.ip_local_port_range = 1024 65000
 net.core.rmem_default=262144
 net.core.rmem_max=262144
 net.core.wmem_default=262144
 net.core.wmem_max=262144


//매개변수 적용
#/sbin/sysctl -p 


//제한값 설정
#vi /etc/security/limits.conf  

 *               soft    nproc   2047
 *               hard    nproc   16384
 *               soft    nofile  1024
 *               hard    nofile  65536


//설정
#vi /etc/pam.d/login 

 session    required     /lib/security/pam_limits.so


#SELINUX=disabled
 

//필수 패키지 설치
#yum install setarch-2* make-3* glibc-2* libaio-0* compat-libstdc++-33-3* compat-gcc-34-3*
compat-gcc-34-c++-3* gcc-4* libXp-1* openmotif-2* compat-db-4*


//오라클 그룹 생성
#groupadd dba


//오라클 유저 생성
#useradd -g dba oracle
#passwd oracle  <--패스워드는 각자알아서


//설치디렉토리 생성
#mkdir -p /u01/app/oracle/product/10.2.0/db_1


//권한 설정
#chown -R oracle:dba /u01


//네트워크 확인
#xhost +127.0.0.1


//release 명 변경
#vi /etc/redhat-release
 centOS 삭제후 -> redhat-4 추가


//login to ORACLE


//oracle 환경 변수 설정
$vi /home/oracle/.bash_profile

 # Oracle Settings
 TMP=/tmp; export TMP
 TMPDIR=$TMP; export TMPDIR

 ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
 ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
 ORACLE_SID=orcl; export ORACLE_SID
 ORACLE_TERM=xterm; export ORACLE_TERM
 PATH=/usr/sbin:$PATH; export PATH
 PATH=$ORACLE_HOME/bin:$PATH; export PATH
 NLS_LANG=American_America.AL32UTF8; export NLS_LANG 

 LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
 CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

 if [ $USER = "oracle" ]; then
   if [ $SHELL = "/bin/ksh" ]; then
     ulimit -p 16384
     ulimit -n 65536
   else
     ulimit -u 16384 -n 65536
   fi
 fi

//oracle 설치파일 download

http://www.oracle.com/technology/software/products/database/index.html

10201_database_linux32.zip

압축풀고 압축푼 폴더에가서
 

//oracle 설치 시작
$./runInstaller


'ORACLE' 카테고리의 다른 글

오라클 설치 정리  (0) 2009.11.21
The Index_DESC Hint  (0) 2009.11.11
Oracle 10g 의 휴지통 기능  (0) 2009.11.11
프로시져, 트리거의 이해-2009/02/20  (0) 2009.11.11
PL/SQL의 이해-2009/02/19  (0) 2009.11.11
Posted by Tiwaz
ORACLE2009. 11. 11. 23:32

Oracle10g 에서 테이블을 삭제하면 9i 이전 버전의 경우 바로 삭제 된다.
하지만 Oracle 10g의 경우 윈도우의 휴지통과 같은 기능을  제공한다.

테이블을 DROP 하면 BIN$xxxxxxx 과 같이 테이블이 생성된다.
이 테이블은 언제든지 되살릴 수 있으며 쿼리도 모두 된다.
DESC "BIN$xxxxxxx";
SELECT * FROM "BIN$xxxxxxx";

이 BIN 테이블을 완전히 삭제하기 위해서

SQL> purge recyclebin;



다시 복구하려면

SQL> flashback table [TABLE_NAME] to before drop;


무조건 DROP 하고 싶다면

SQL> drop table [TABLE_NAME] purge;
명령으로 완전히 삭제 할 수 있다.

 


'ORACLE' 카테고리의 다른 글

The Index_DESC Hint  (0) 2009.11.11
Installation of Oracle 10g on Centos Linux 5  (0) 2009.11.11
프로시져, 트리거의 이해-2009/02/20  (0) 2009.11.11
PL/SQL의 이해-2009/02/19  (0) 2009.11.11
내장함수의 이해-2009/02/18  (0) 2009.11.11
Posted by Tiwaz
ORACLE2009. 11. 11. 21:30

--emp_process 프로시져 만들고
--SQL> set serveroutput on
--SQL> exec emp_process

--emp_process2 프로시져 만들고 (부서별 조회)
--SQL> exec emp_process2

--emp_process3 프로시져를 만들고 (업데이트)
--SQL> exec emp_process3

--test4,test5,
--페키지 emp_comm

--dbms_job 패키지
--일정 시간 간격으로 DB작업을 수행
--1. submit : 새로운 job를 등록하는 프로시져
--2. run : 등록된 job을 실행하는 프로시져
--3. remove : 등록된 job을 제거하는 프로시져

create table job_table(
seq number(5),
job_date date
);
--프로시저 만들기 JOB_TEST
--SQL> var job number;
--SQL> exec dbms_job.submit(:job,'job_test;' , sysdate, 'sysdate+10/36000';
--SQL> exec dbms_job.run(:job);
--SQL> exec dbms_job.remove(:job);

--트리거(Trigger)
--테이블의 변경을 자동 감지해서 다른 테이블을 작업을 수행
--예를 들어 게시물이 등록되면 게시물테이블에 데이터가 입력되고,
--게시물카운트테이블에도 데이터가 입력되게 하겠다.
--로깅, 보안, 감사에 많이 쓰임

--트리거의 구성요소
--1.트리거의 유형
--1)문장레벨의 트리거 : 테이블에 update, insert, delete가 일어나면
--   단한번만 트리거를 발생시킴(트리거의 수 = 1)
--2)행레벨의 트리거 : 테이블에 update,insert,delete가 일어나면
--   모든행에 대해 트리거를 발생시킴(트리거의 수 = 행의 수)
--2. 트리거의 타이밍
--1) before : 테이블에 update, insert, delete 가 일어나기 전
--2) after : 테이블에 update, insert, delete 가 일어난 후
--3. 트리거의 이벤트
--1) update
--2) insert
--3) delete
--test1_trigger
--sql)update emp set sal = sal * 1.0;

create table dept_same (
deptno number(2),
dname varchar2(14),
loc varchar2(10),
o_deptno number(2),
o_dname varchar2(14),
o_loc varchar2(10),
gubun varchar2(10),
chk date
);

--test2_trigger 생성
--SQL> insert into dept values(99,'CCC','SEOUL');
--update dept set loc = 'busan' where deptno=99;
--delete from dept where deptno=99;

--트리거의 상태 변경
--1. 트리거 활성화/비활성화
--alter tirgger 트리거 이름 enable
--alter tirgger 트리거 이름 disable
--2. 테이블에 관련된 모든 트리들을 활성화/비활성화
--alter table 테이블명 enable all triggers;
--alter table 테이블명 disable all triggers;
--3. 트리거 재컴파일
--all trigger 트리거명 compile;
--4. 트리거 제거
--drop trigger 트리거명;

--데이터 사전
--사용자의 객체 정보 : user_objects
select object_name, object_id, object_type, created, timestamp, status
from user_objects;
select object_name from user_objects where object_type='PROCEDURE';

-- 소스코드 : user_source
select name, type, line, text
from user_source where name='TAX';
select name, type, line, text
from  user_source where name='TEST5';

-- 사용자의 에러 정보 : user_errors
select * from user_errors;

--사용자의 트리거 정보 : user_triggers
select trigger_name, trigger_type, triggering_event, table_name, status from

user_triggers;

--사용자 객체들의 상호참조 정보 : user_dependencies
select * from user_dependencies where referenced_name = 'EMP';
--사용자의 테이블 정보
select * from user_tables;

--사용자의 뷰 정보
select * from user_views;

--사용자 인덱스 정보
select * from user_indexes;

--사용자의 제약조건 정보
select * from user_constraints;

--바인드 관련 자료
--http://blog.naver.com/nkmin80?Redirect=Log&logNo=140032147


Posted by Tiwaz
ORACLE2009. 11. 11. 21:27

-- PL/SQL의 종류
-- 1. Anonymous Procedure (이름없는 프로시져)
-- 수행할때마다 컴파일해서 연산/결과를 출력
-- 2. Stored Procedure (이름있는 프로시져)
-- 컴파일하면 오라클에 PCODE(컴파일된코드) 형태로 저장되었다가
-- 호출하면 연산/결과를 출력
-- 3. Stored Function (이름있는 함수)
-- 오라클에 내장되어 있는 내장함수들과 사용자가 만든 사용자정의함수로 분류
-- 오라클에 PCODE(컴파일된코드) 형태로 저장되었다가 호출하면 연산하고
-- 결과를 반환
-- 4. Package
-- 비슷한 기능을 하는 함수/프로시져를 묶음
-- 선언부와 구현부로 나누어서 작성
-- 5. Trigger
-- 테이블에 데이터의 입출력을 감지해서 다른 테이블에 입출력하는 기능

-- Stored Procedure
create table log_table (
userid varchar2(10),
log_date date
);

select * from log_table;

-- 매개변수의 모드(mode)
-- in : 값을 프로시져 외부에서 받아오는 매개변수 (기본값)
-- out : 프로시져의 연산결과를 외부로 보내는 매개변수
-- in out : 값을 받아와서 외부르 보내는 매개변수

create sequence s_emp_id
start with 25;

create table top_dogs (
name varchar2(10),
salary number(7,2)
);


-- Stored Function (저장함수)
-- 1. 오라클 내장함수 : 오라클에 내장되어 있는 함수
-- 2. 사용자 정의함수 : 사용자가 생성한 함수

-- 실습
-- 1. 핸드폰번호를 입력하면 010-1234-1234 형식으로 출력해주는 프로시져 hp_proc
-- 실행 : exec hp_proc('01012341234');
-- 결과 : 010-1234-1234
-- 2. 문자열을 입력하면 문자열의 길이를 리턴하는 함수 str_func
-- 실행 : select str_func('안녕하세요!') from dual;
-- 결과 : 6
-- 3. 학생정보 입력/삭제
create table student(stdno number, stdname varchar2(10));
-- * record타입으로 학생정보 저장
-- 입력 : 프로시져 registStudent - 학생번호(number), 학생명(varchar2)
--   실행 : exec registStudent(10, '홍길동')
--   결과 : 홍길동 학생이 등록되었습니다. or 10번 학생이 있습니다.
-- 삭제 : 프로시져 deleteStudent - 학생번호(number)
--   실행 : exec deleteStudent(10)
--   결과 : 10번 학생이 삭제되었습니다. or 10번 학생은 없습니다.
-- 수정 : 프로시져 updateStudent - 학생번호(number), 학생명(varchar2)
--        (학생명 수정되도록)
--   실행 : exec updateStudent(10, '강감찬')
--   결과 : 10번 학생이 수정되었습니다. or 10번 학생은 없습니다.
-- 목록 : 프로시져 listStudent (커서 이용)
--   실행 : exec listStudent
--   결과 : 학생리스트가 보여진다.

Posted by Tiwaz
ORACLE2009. 11. 11. 21:23

select employee_id, first_name, last_name
from employees
where employee_id = :emp;

create table score(
score number);

insert into score values(100);
insert into score values(0);
insert into score values(null);

select avg(score), count(*) from score;
select avg(nvl(score, 0)), count(*) from score;

select department_id, sum(salary) from employees
group by department_id
order by department_id;

--------------------------------------------------
--scott
-------------------------------------------------
--built-in function (오라클 내장함수)
---------------------------문자함수
--ascii 코드값에 해당하는 문자
select chr(75) from dual;

-- 문자열 접합
select concat(concat(ename, ' is a '), job) from emp;

-- 첫글자들을 대문자로
select initcap('i am a boy') from dual;

-- 소문자로
select lower('Mr, Smith') from dual;

--대문자로
select upper('Mr, Smith') from dual;

--왼쪽채우기 (전체 15자리 왼쪽 나머지 공간은 *)
select lpad('Page 1', 15, '*') from dual;

--오른쪽채우기 (전체 15자리 오른쪽 나머지 공간은 *)
select rpad('Page 1', 15, '*') from dual;

--왼쪽 지우기 (왼쪽에 x나 y가 나오면 제거-안나올때까지)
select ltrim('xyxXxyLast Word', 'xy') from dual;

--문자열 대체
select replace ('JACK and JUE', 'J', 'BL') from dual;

--부분 문자열 추출 (인덱스 3에서 2개-인덱스는 1부터 시작)
select substr('abcdefg',3,2) from dual;
select substr('abcdefg',3) from dual;
select substr('abcdefg',-3,2) from dual;

--문자의 유니코드값
select ascii('뷁') from dual;

--첫번째인자문자열에서 두번째 문자열이
--세번째인자문자열에서 네번째인자번째나온 곳의 인덱스
select instr('CORPORATE FLOOR','OR',3,2) from dual;
select instr('CORPORATE FLOOR','OR',-3,2) from dual;

--문자열의 길이
select length('안녕하세요!') from dual;
select lengthb('안녕하세요!') from dual;

--가장큰것(각각의 문자를 비교하여 각각 큰거 & 작은거 비교)
select greatest('HARRY', 'HARIOT', 'HALORD') from dual;

--가장 작은것
select least('HARRY', 'HARIOT', 'HALORD') from dual;

-- null 대체
--nvl : 첫번째 인자가 null이면 두번째 인자, 아니면 첫번째 인자.
select nvl(sal,0), nvl(ename,'*'), nvl(hiredate, '02/11/11') from emp;

----------------------------------시스템 함수
select sysdate from dual;
select systimestamp from dual;
select user from dual;

----------------------수학함수
--절대값
select abs(-15) from dual;

--올림값
select ceil(15.7) from dual;

--내림값
select floor (15.7) from dual;

--버림값
select trunc(15.7) from dual;

--cosine
select cos(180*3.14/180) from dual;

--e의 몇 승
select exp(4) from dual;

--log
select log(10, 100) from dual;

--나머지
select mod(11,4) from dual;

--승
select power(3,2) from dual;

--반올림
select round(15.193, 1) from dual;
select round (15.193, -1) from dual;

-------------------------------날짜함수
--월더하기
select hiredate, add_months(hiredate, 1)
from emp where empno=7782;

--해당 월의 마지막날
select hiredate, last_day(hiredate) from emp;

--시간대 변경
select hiredate, new_time(hiredate, 'GMT', 'PDT') from emp;

--개월의 차
select hiredate, months_between(sysdate, hiredate) from emp;

------------------------------변환 함수

--MM:월
--MON:세글자 영문 월
--MONTH:전체글자 영문 월
--D:그주의 일 수(1:일요일)
--DD:날짜
--DY:요일을 세글자 영문
--DAY:요일의 전체 이름
--YYYY:네자리 표현한 연도
--YY:두자리로 표현한 연도
--HH:12시간으로 표시, HH24:24시간으로 표시
--MI:분
--SS:초
select sysdate, to_char(sysdate, 'D') from dual;
--2009/02/18 12:10
select sysdate, to_char(sysdate, 'YYYY/MM/DD HH24:MI') from dual;
--02일 ==> 2일 (앞에 0제거)
select ename, to_char(hiredate, 'fmDD-MM-YY') from emp;

--문자열을 숫자로 변환
select to_number('100')+200 from dual;
select '100'+200 from dual;

--숫자를 형식에 맞게 문자로 변환
--숫자혀익요소 9(숫자하나), 0(자리가비면 0으로), $(달러).(소수점),(콤마)
select to_char(12506, '$9099,99') from dual;
select '\'||to_char(1234567, '90999,99') from dual;

--날짜의 형식을 변경
select sysdate, to_date('09/07/01', 'DD-MM-YY') from dual;

-- 9i버젼에서 추가된 함수
--nvl2(첫번째인자가 null이면 세번째 인자 null이 아니면 두번째 인자)
select empno, ename, nvl2(comm, comm*1.1, 0) from emp;
--nullif(같으면 null, 다르면 첫번째 인자)
select empno, ename, nullif(comm,0) from emp;
--coalesce(null이 아닌 첫번째 인자)
select coalesce(comm, sal) from emp;
select coalesce(null,null,null,3,null) from dual;
--trim (8i에 추가)
select ename, trim(LEADING 'A' FROM ename) as trim
from emp
where ename like 'A%';

select ename, trim(TRAILING 'N' FROM ename) as trim
from emp
where ename like '%N';

select ename, trim(BOTH 'A' FROM ename) as trim
from emp
where ename like '%';

--------------------------------------복수행 함수
select count(*) from emp;
select count(empno) from emp;
select sum(sal) from emp;

select avg(sal) from emp;
select avg(nvl(sal,0)) from emp;

select max(sal), min(sal) from emp;

--입사일이 가장 늦은 사람과 이른 사람의 일수 차
select max(hiredate)-min(hiredate) from emp;

--부서별 평균 급여
select avg(nvl(sal,0)), deptno
from emp
group by deptno;

--그룹에 조건을 줄때는 having
--그룹에 속하는 사원수가 2보다 크다라는 조건
select deptno, count(*), sum(sal)
from emp
group by deptno
having count(*)>2;

--decode
--decode(expr, a, r1,b,r2,default)
--expr을 평가해서 a이면 r1, b이면 r2, 나머지 모든 경우 default 반환
select job, sal, decode(job, 'ANALYST', sal*1.10,  'CLERK', sal*1.15,
  'MANAGER',sal*1.20, sal) "인상된 급여"
from emp;

--1월 부터 6월 까지 월별로 입사한 사원의 수와 1~6월 전체 입사한 사원의 수
select
count(decode(extract(month from hiredate), '1', 1)) "1월",
count(decode(to_char(hiredate, 'MM'), '02', 1)) "2월",
count(decode(to_char(hiredate, 'MM'), '03', 1)) "3월",
count(decode(to_char(hiredate, 'MM'), '04', 1)) "4월",
count(decode(to_char(hiredate, 'MM'), '05', 1)) "5월",
count(decode(to_char(hiredate, 'MM'), '06', 1)) "6월", count(*) "1월~6월"
from emp
where to_char(hiredate,'MM')>='01' and to_char(hiredate,'MM')<='06';

--case
select job, sal,
  case
    when job='ANALYST' then sal*.10
    when job='CLERK' then sal*1.15
    when job='MANAGER' then sal*1.20
    else sal
  end
from emp;

--사원들의 입사일의 요일을 한자로
select ename, hiredate,
  case
    when to_char(hiredate,'DY')='월' then '月'
    when to_char(hiredate,'DY')='화' then '火'
    when to_char(hiredate,'DY')='수' then '水'
    when to_char(hiredate,'DY')='목' then '木'
    when to_char(hiredate,'DY')='금' then '金'
    when to_char(hiredate,'DY')='토' then '土'
    when to_char(hiredate,'DY')='일' then '日'
  end
from emp;


Posted by Tiwaz
ORACLE2009. 11. 11. 21:21

-- 오라클 객체
-- 1. table
-- 데이터를 저장하는 객체
-- 2. index
-- 데이터 검색속도 증가를 위한 객체
-- 3. view
-- 테이블(들)의 데이터를 보호할 목적으로 사용되는 객체
-- 4. sequence
-- 연속적인 일련번호 생성을 위한 객체
-- 5. synonym
-- 객체의 이름을 간략하게 하기위한 객체

-- Data Dictionary (데이터사전)
-- 데이터에 대한 데이터(MetaData)를 조회할 목적의 뷰들
-- dictionary 조회
select * from dictionary;
-- 사용자의 테이블들
select * from user_tables;
-- 사용자의 인덱스들
select * from user_indexes;
-- 사용자의 뷰들
select * from user_views;
-- 사용자의 제약조건들
select * from user_constraints;

-- 테이블 생성 기본문법
create table dept1 (
deptno number(2),
dname varchar2(13),
loc varchar2(14)
);
-- 테이블 복사
create table dept2
as
select * from dept1;
-- 테이블 목록
select * from tab;
-- 테이블의 컬럼 추가
alter table dept1 add (bigo varchar2(15));
desc dept1;
-- 테이블의 컬럼 변경
alter table dept1 modify (bigo varchar2(30));
-- 테이블의 데이터 삭제 (delete + commit)
truncate table dept1;
-- 테이블명 변경
rename dept2 to dept3;
select * from tab;
-- 테이블 제거
drop table dept3;
-- 주석 달기
comment on table dept1 is '부서정보 테이블입니다!';
select * from user_tab_comments where table_name='DEPT1';
comment on column dept1.deptno is '부서코드';
select * from user_col_comments where table_name='DEPT1';

-- 제약조건 (constraints)
-- 데이터 무결성(integrity)을 지킬 목적으로 컬럼레벨이나 테이블레벨에
-- 부여하는 제약 사항

-- 제약조건들
-- 1. primary key : not null + unique
-- 2. foreign key : 다른테이블의 primary key컬럼의 값을 참조하는 컬럼
-- 3. unique : 컬럼의 값이 유일, 단 null은 여러개 입력될 수 있음
select 1 from dual where null=null;
select 1 from dual where null is null;
-- 4. not null : 컬럼에 값이 null이 입력될 수 없음
-- 5. check : 컬럼에 입력되는 값에 대해 체크
-- 6. default : 컬럼에 입력되는 기본값

-- 제약조건의 특징
-- 사용자에 의해 발생한 잘못된 DML문을 수행되지 않도록 할 목적
-- 제약조건에 대한 모든 정보는 dictionary에 저장된다.
-- 제약조건을 활성화(enable), 비활성화(disable)할 수 있다.
-- 하나의 컬럼에 여러 제약조건을 부여할 수 있다.
-- 여러개의 컬럼에 하나의 제약조건을 부여할 수 있다.
-- 제약조건은 오라클 서버가 관리한다.

-- 제약조건의 유형
-- 1. column level constraints (컬럼레벨제약)
-- 하나의 컬럼에 제약 조건을 정의할 때 사용
-- create, alter 문장으로 컬럼을 정의할 때 데이터 타입 뒤에 정의
-- 위에 있는 모든 제약조건을 컬럼레벨로 모두 부여할 수 있음
-- 2. table level constraints (테이블레벨제약)
-- 하나의 컬럼에 여러개의 제약조건을 부여할때 주로 사용
-- not null제약조건은 table level로 부여할 수 없음

create table dept9 (
deptno number(2) constraint dept9_deptno_pk primary key,
dname varchar2(15),
loc varchar2(1));

drop table dept9;

-- 제약조건명 검색
select constraint_name from user_constraints;
-- 제약조건 추가
alter table dept9 add (constraint dept9_deptno_nn primary key(deptno));

create table dept10 (
deptno number(2) constraint dept10_deptno_pk primary key,
dname varchar2(15),
loc varchar2(1));

create table emp10 (
empno number(4) constraint emp10_empno_pk primary key,
ename varchar2(15),
deptno number(2) constraint emp10_deptno_fk references dept10(deptno));

create table emp11 (
empno number(4) constraint emp11_empno_pk primary key,
ename varchar2(15) constraint emp11_ename_uq unique,
deptno number(2)
);

alter table emp11 add (constraint emp11_deptno_fk foreign key(deptno)
references dept10(deptno));

alter table emp11 add (constraint emp11_deptno_uq unique(deptno));

create table dept12 (
deptno number(2),
dname varchar2(15),
loc char(1) constraint dept12_loc_ck check (loc in ('1','2'))
);

alter table dept12 add (constraint dept12_loc_ck2 check (loc in ('1','2')));

create table dept13 (
deptno number(2),
dname varchar2(15) not null,
loc char(1)
);

select * from user_constraints;

-- 제약조건 삭제
alter table dept12 drop constraint dept12_loc_ck2;
-- 제약조건 비활성화
alter table dept12 modify constraint dept12_loc_ck disable;
-- 제약조건 활성화
alter table dept12 modify constraint dept12_loc_ck enable;


---------------------------------------------------------
-- index
---------------------------------------------------------
--인덱스는 테이블 검색속도를 향상시키기 위한 객체
--주로 B*Tree인덱스를 사용
--- 인덱스를 사용해야 할 때
--1. where절에 자주 등장하는 컬럼
--2. 검색결과가 전체 행의 10%미만인 경우
--- 인덱스를 사용하지 말아야 할 때
--1. 데이터가 적은 (보통 행이 몇천개 이하) 경우
--2. where절에 자주 등장하지 않는 컬럼
--3. 테이블이 자주 수정,삽입,삭제될때
--- 인덱스의 종류
--1. single index : 단일컬럼으로 만들어지는 인덱스
--create index i_emp_ename on emp(ename)
--2. concanated index : 복합컬럼(두개 이상의 컬럼)으로 만들어지는 인덱스
--create index i_emp_empno_ename on emp(empno, ename)
--3. unique index : 인덱스를 생성할 컬럼의 값이 중복되지 않는 경우
--create unique index i_emp_empno on emp(empno)
--4. non-unique index : 인덱스를 생성할 컬럼의 값이 중복되는 경우
--create index i_emp_ename on emp(ename)
--5. function-based index : 컬럼들의 연산결과를 토대로 만든 인덱스
--create index i_emp_sal_comm on emp(sal-comm)

-- 인덱스 생성
create index i_emp_ename on emp(ename);
create unique index i_emp_empno on emp(empno);

-- 인덱스 확인
select * from user_indexes;

-- 인덱스 제거
drop index i_emp_ename;

---------------------------------------------------
-- view
---------------------------------------------------
-- 테이블 데이터를 보호할 목적으로 테이블(들)의 일부데이터를
-- 추출해서 만든 가상 테이블
-- materialized view를 제외하면 view는 물리적으로 데이터를
-- 저장하지 않음. 간단히 말해서 view는 테이블(들)의 select문
select e.empno, e.ename, d.dname
from emp e, dept d
where e.deptno = d.deptno;

-- 뷰 생성
create or replace view view_emp
as
select e.empno, e.ename, d.dname, d.deptno
from emp e, dept d
where e.deptno = d.deptno;

-- 사용자 뷰 확인
select * from user_views;

-- view를 통한 테이블 select
select * from view_emp;

-- force : 테이블이 없어도 뷰를 생성 가능
create or replace force view emp_chk
as
select * from employees
where deptno=10;

-- with check option : 뷰를 생성할때 제약조건을 부여
-- 뷰 생성시 부여된 조건을 뷰의 결과가 계속 유지되도록 하겠다.
create or replace view emp_chk1
as
select e.empno, e.ename, d.dname, d.deptno
from emp e, dept d
where e.deptno = d.deptno and e.deptno=30
with check option constraint emp_v_chk1;

select * from user_constraints;
select * from emp_chk1;

-- with check option을 가진 뷰에 변경이 일어나게 되므로 수행 안됨
--update emp_chk1 set deptno=20 where deptno=30;
--update emp_chk1 set deptno=30 where deptno=20;

-- 읽기 전용 뷰
create or replace view emp_chk2
as
select e.empno, e.ename, d.dname, d.deptno
from emp e, dept d
where e.deptno = d.deptno and e.deptno=30
with read only;

-- update emp_chk2 set deptno=20 where deptno=30;
-- delete from emp_chk2;

-- 뷰 변경 : 없음 => create or replace를 통해 재생성

-- 뷰 제거
drop view emp_chk2;

-- inline view (인라인뷰:from절내에 있는 서브쿼리)
select a.empno, a.ename, a.sal, a.hiredate
from emp a,  (select deptno, max(hiredate) maxdate
              from emp
              group by deptno) b
where a.deptno = b.deptno;

-- top-n query
select rownum, a.empno, a.ename, a.sal, a.hiredate
from emp a,  (select rownum rn, deptno, hiredate from emp) b
where a.deptno = b.deptno and b.rn<5;

--------------------------------------------
-- sequence
--------------------------------------------
-- 연속적인 일련번호 생성
create table seq_test (
seq number,
name varchar2(20)
);
-- 시퀀스 생성
create sequence seq_test_seq
increment by 1
start with 1000
maxvalue 10000
nocache
nocycle;
-- 시퀀스 확인
select * from user_sequences;
-- 시퀀스 사용
insert into seq_test(seq,name)
values (seq_test_seq.nextval,'홍길동');
select * from seq_test;
-- 시퀀스 현재값
select seq_test_seq.currval from dual;
-- 시퀀스 제거
drop sequence seq_test_seq;

-------------------------------------
-- synonym
-------------------------------------
-- 객체의 이름이 길때 줄여쓰기 위해서
rename emp to employees;
select * from tab;
-- 시노님 생성
create public synonym emp for employees;
-- 시노님 확인

-- 시노님 제거
drop public synonym emp;

------------------------------------------
-- 사용자 관리
------------------------------------------
-- 사용자 생성
create user hong identified by pass;
-- 권한 부여
-- 접속, 자원사용 role(권한의 모음)을 hong에게 부여
grant connect,resource to hong;
-- dba롤 부여
grant dba to hong;
-- 전체사용자에게 권한 부여
grant connect,resource,dba to public;
-- 권한 제거
revoke dba from hong;
-- with admin option : 부여받은 권한을 부여할 수 있는 옵션
-- sys
grant create session to scott with admin option;
-- scott
grant create session to hong;
-- 객체 권한
rename employees to emp;
grant select,insert,update,delete on emp to hong;
revoke insert,update,delete on emp from hong;
-- role(롤)
create role conn;

---------------------------------------
-- join
---------------------------------------

-- 1. cross join (cartesion product)
-- 두 테이블에서 가능한 모든 행의 조합을 생성
select count(*) from emp;
select count(*) from dept;
select empno, ename
from emp cross join dept;

-- 2. inner join (natural join, equi join)
-- cross join의 결과 중 조인조건에 맞는 행들을 추출
select e.empno, e.ename, d.dname
from emp e, dept d
where e.deptno = d.deptno;

-- 3. outter join
-- cross join의 결과 중 조인조건에 맞는 행들을 추출하고
-- 조인조건에 맞지 않는 행들도 추출
create table t1 (no number,name char(3));
create table t2 (no number,name char(3));
insert into t1 values (10,'AAA'); insert into t1 values (20,'BBB');
insert into t2 values (10,'CCC'); insert into t2 values (30,'DDD');
select * from t1; select * from t2;
-- left outer join
select t1.no, t1.name, t2.no, t2.name
from t1 left outer join t2
on t1.no = t2.no;
-- right outer join
select t1.no, t1.name, t2.no, t2.name
from t1 right outer join t2
on t1.no = t2.no;
-- full outer join
select t1.no, t1.name, t2.no, t2.name
from t1 full outer join t2
on t1.no = t2.no;

-- subquery
-- =, >, < 등의 비교연산일 경우는 서브쿼리의 결과가 한 개 나와야 함
select * from emp where job = (select job from emp where empno=7900);
-- 서브쿼리의 where절에는 그룹함수를 사용할 수 없습니다.
--select ename, sal
--from emp
--where sal = (select sal from emp where sal>avg(sal));

select e.ename,e.sal,e.deptno,d.dname
from emp e, dept d
where e.sal in (select max(sal) from emp group by deptno)
and e.deptno = d.deptno;

-- 직업이 MANAGER인 사람들과 같은 봉급을 받는 사원
select empno, ename, job, sal from emp
where sal = any (select sal from emp where job='MANAGER');

-- 직업이 MANAGER인 사람들의 최소봉급보다 작은 봉급을 받는 사원
select empno, ename, job, sal from emp
where sal < all (select sal from emp where job='MANAGER');

-- 서브쿼리의 결과가 존재하는지
select dname, deptno from dept
where exists (select * from emp where emp.deptno=10);


'ORACLE' 카테고리의 다른 글

Oracle 10g 의 휴지통 기능  (0) 2009.11.11
프로시져, 트리거의 이해-2009/02/20  (0) 2009.11.11
PL/SQL의 이해-2009/02/19  (0) 2009.11.11
내장함수의 이해-2009/02/18  (0) 2009.11.11
쿼리 및 집합의 이해-2009/02/16  (0) 2009.11.11
Posted by Tiwaz
ORACLE2009. 11. 11. 21:19

-----------------------------
-- hr
-----------------------------

-- 테이블 생성
create table temp_emp (
id number not null,
name varchar2(12),
primary key (id)
);

-- 테이블 검색
select * from tab where tname='TEMP_EMP';

-- 테이블 구조보기
desc temp_emp;

-- commit/rollback
insert into temp_emp(id, name) values(1,'홍길동');
select name from temp_emp where id=1;
commit;
update temp_emp set name='홍인영' where id=1;
insert into temp_emp(id, name) values(2,'홍판서');
select * from temp_emp;
rollback;
commit;
select name from temp_emp where id=1;
delete temp_emp;
rollback;
select name from temp_emp where id=1;

select * from temp_emp;
update temp_emp set name='홍만석' where id=1;
savepoint a;
insert into temp_emp(id,name) values(3,'강감찬');
savepoint b;
delete from temp_emp;
rollback to savepoint a;


----------------------------
-- sys
----------------------------
-- 예약어
select keyword from v$reserved_words order by keyword;


----------------------------
-- hr
----------------------------
select * from departments;


----------------------------
-- scott
----------------------------

-- *** select

-- scott의 모든 테이블
select * from tab;
-- emp테이블의 모든 컬럼 조회
select * from emp;
-- emp테이블의 구조
desc emp;
-- emp테이블의 empno, ename 컬럼 조회
select empno, ename from emp;
-- emp테이블에 있는 job의 종류 조회
select distinct job from emp;
select job from emp;
-- emp테이블에 있는 모든 job
select all job from emp;
-- sal에 대해 정렬
select * from emp order by sal asc;
select * from emp order by sal;    
select * from emp order by sal desc;
-- 정렬시 null인 값은 마지막에
select * from emp order by comm;
-- 2차 정렬 (1차정렬이 완료된 후 2차정렬함)
select deptno, ename from emp order by deptno, ename;
-- alias (별칭)
select empno, sal 봉급, sal*0.1 보너스, sal+sal*0.1 총수령액 from emp;
-- emp테이블에서 deptno가 10
select empno, ename, deptno from emp
where deptno=10;
-- 현재 오라클이 인식하는 날짜 형식 알아내기
select value from nls_session_parameters
where parameter='NLS_DATE_FORMAT';
-- 사원들의 입사일
select hiredate from emp;
-- 1983년 이전에 입사한 사원들의 데이터
select * from emp where hiredate<'83/01/01';
-- 조건연산
select * from emp where deptno=10 and sal<3000;
-- not in 연산 (job이 SALESMAN이 아닌 데이터)
select * from emp where job not in 'SALESMAN';
-- in 연산 (job이 CLERK, MANAGER인 데이터)
select * from emp where job in ('CLERK','MANAGER');
select * from emp where job='CLERK' or job='MANAGER';
-- like 연산
-- ename에 M이 포함된 모든 데이터
select * from emp where ename like '%M%';
-- ename이 M으로 시작하는 모든 데이터
select * from emp where ename like 'M%';
-- ename이 M으로 끝나는 모든 데이터
select * from emp where ename like '%M';
-- 한글자는 _ (_자체를 표시하려면 \_)
select * from emp where ename like '_____';
-- between a and b (a, b를 포함해서 그 사이)
select empno, deptno from emp where deptno between 10 and 20;
select empno, deptno from emp where deptno>=10 and deptno<=20;
select * from emp where ename between 'A' AND 'K';
select * from emp where hiredate between '81/01/01' and '83/05/01';
-- null : 데이터 없음
select * from emp where comm is null;
select * from emp where comm is not null;
-- (X) select * from emp where comm=null;
-- 문자열 접합
select ename||'의 1년 연봉은'||sal||' 입니다!' as 연봉 from emp;
-- union (합집합)
select empno, ename from emp
union
select deptno, dname from dept;
-- union all (합집합 + 교집합)
select empno, ename from emp
union all
select deptno, dname from dept;
-- intersect (교집합)
select empno, ename from emp
intersect
select deptno, dname from dept;
-- minus (차집합)
select empno, ename from emp
minus
select deptno, dname from dept;
select deptno, dname from dept
minus
select empno, ename from emp;
-- projection : 열(컬럼) 추출
-- selection : 행(로) 추출

-- *** DML (Data Manipulation Language) - insert, update, delete
create table emp_dml(
sid number primary key,
name varchar2(12)
);
create table emp_dml2(
sid number primary key,
name varchar2(12)
);
-- insert
insert into emp_dml values (1111,'홍길동');
select * from emp_dml;
insert into emp_dml(sid, name) values(2222,'이순신');
-- null허용컬럼은 insert하지 않으면 null값 insert됨
insert into emp_dml(sid) values(3333);
-- subquery를 이용한 데이터 insert
insert into emp_dml2(sid, name) values(4444,'장화');
insert into emp_dml2(sid, name) values(5555,'홍련');
insert into emp_dml select * from emp_dml2;
-- update
update emp_dml set name='이순삼' where sid=2222;
-- subquery를 이용한 update
update emp_dml set name='박순삼'
where sid=(select sid from emp_dml2 where name='장화');
-- delete
delete from emp_dml where sid=1111;
delete from emp_dml where sid=(select sid from emp_dml2 where name='장화');
commit;


Posted by Tiwaz
JAVA2009. 11. 6. 00:04

//Java Serializatoin 이란?
자바 객체를 저장 또는 전송하기 위하여 자바 객체의 코드를 다시 복원가능한 형태의 Stream으로 직렬화 시켜주는 것을 말함!! 

 

기존예제 테스트 및 압축만!!

 

 

Java Serialization 알자

이 자료는 자바랜드(www.javaland.co.kr)의 박정기께서 기고하신 내용입니다. 

 

Java Serialization맛보기

Java Serializatoin은 자바 객체를 저장하거나 전송하기 위하여 자바 객체의 코드를 다시 복원가능한 형태의 Stream으로 직렬화 시켜주는 것을 말한다. 

 

가장 간단한 형태부터 시작해서 자바 시리얼라이제이션의 예를 살펴 보도록 하겠다. 

-Swrite.java-

//Java Serializatoin 이란?
//자바 객체를 저장 또는 전송하기 위하여 자바 객체의 코드를
//다시 복원가능한 형태의 Stream으로 직렬화 시켜주는 것을 말함!! 
package serializable;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.Date;

public class swrite {

 public static void main(String args[])

 {

  try {
   //파일이나 데이터를 출력하기위한 출력스트림을 생성한다.
   //tmp라는 파일을 갖는 f라는 객체 생성
   FileOutputStream f = new FileOutputStream("tmp");
   //기본데이터 타입의 데이터를 쓰는 객체 s 생성
   ObjectOutput s = new ObjectOutputStream(f);
   //Object타입의 객체를 쓴다. 인자는 문자열 타입의 "Today"
   s.writeObject("Today");
   //데이터 타입을 객체로 쓴다.
   s.writeObject(new Date());
   //스트림을 보내다. 메모리해제!! 및 tmp 파일로 생성됨
   s.flush();

  }

  catch (IOException e) {
  }
  
  //투데이라는 문자열 출력
  System.out.println("Today");
  //현재의 날짜를 출력
  System.out.println(new Date());

 }
}//class

 

위의 프로그램은 File Stream을 열어서 tmp라는 파일에 2개의 객체("Today"라는 String 객체와 Date 객체)를 저장하고 있다.  

여기서 객체저장을 위해 writeObject라는 메쏘드가 사용되고 있다는 것을 알 수 있다. 

 

위의 프로그램을 실행하면 2 객체가 시리얼라이제이션이 일어나서 다시 복원가능한 형태로되어 직렬화되어

tmp라는 파일로 저장된다. 

 

객체를 파일로 저장하다니? 얼마나 놀라운가? 

(제대로 다시 복원만 된다면...) 

 

자! 그럼 tmp 파일에서 객체를 살려보자!!! 

 

-Sread.java-

package serializable;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.util.Date;

public class sread {

 public static void main(String args[]) {
  try {
   // 파일 입력을 받기위한 파일 입력 스트림 in 객체 생성
   // 인자는 파일 또는 "tmp"문자열 사용 가능
   FileInputStream in = new FileInputStream("tmp");

   // 입력받은 in객체를 입력을 받기위한 객체 s로 만듬
   ObjectInput s = new ObjectInputStream(in);

   // 읽어들인 객체를 문자열 today에 저장
   String today = (String) s.readObject();
   // 읽어들인 객체를 Date 타입의 date객체로 저장
   Date date = (Date) s.readObject();

   System.out.println(today);

   System.out.println(date);

  } catch (IOException e) {
  } catch (ClassNotFoundException e) {
  }
 }
}// class

위의 파일은 아까 저장한 tmp파일에서 객체를 복원하여  

today와 date가 저장 직전의 상태로 복원되었다. 

여기서 readObject라는 메쏘드가 사용되었음을 알 수 있다. 

 

객체를 저장한 tmp 파일은 직렬화되어있으므로  

그냥 내용을 사용자가 알 수 없다. 

하지만 2 객체를 훌륭하게 저장하였다는 것을 알 수 있다.

 

Java Serializatoin의 개념 이해

앞의 예제는 Java Serializatoin의 맛빼기였다. 

그냥 대충 돌아가는 것만 보여준 것이지 개념상  

부족한 내용이 많다. 

 

좀더 심화된 내용으로 Java Serialization을 제대로 이해해 보자! 

 

Java Object Serialization은 자바 객체를 저장 또는 전송을 위하여 자바 코드를 다시 복원 가능한 byte stream 형태로 변환시켜 준다. 이 직렬화 과정을 자세히 말하면 

객체가 다시 원상태로 복원되기 위해서는 객체 내부의 

data들의 reference가 잘 정리되어야 있어야 한다.  

이러한 과정은 직렬화를 통하여 object reference의 tree 

즉, object graph를 형성하므로써 가능하다. 

이 graph 정보를 이용해서 객체를 다시 복원할 수 있는 것이다. 

 

이제 객체를 byte stream으로 변환되는 과정을 marshaling이라 부르고, 반대로 stream에서 객체로 역변환하는 과정을 unmarshaling이라고 한다. 

 

또한 객체가 안전하게 직렬화되기 위해서는 

해당 클래스가 Serializable 인터페이스를 imeplements하고 있어야만 한다. 

 

앞의 강좌 1의 예제에서는... 

알다시피 String 클래스와 Date 클래스 모두 API 레퍼런스를 보면 이미 Serializable 인터페이스를 imeplements하고 있을 확일할 수 있다. 

 

자! 그럼... 

 

이번엔 사용자가 정의한 클래스를 직렬화시켜서 

파일로 저장하고 다시 복원하는 예제를 보도록 하자! 

 

먼저 전송할 사용자가 만든 Test 클래스를 다음과 같이 만든다. 

 

-Test.java-

 

package serializable;

public class Test {

 //전역 문자열 변수 str
 public String str;
 
 //transient
 //나중에 다시 사용하기 위한 저장을 하지 않는,
 //짧고 제한된 수명을 갖는 소프트웨어 객체이다.

 //전력선을 통해 오직 몇 분의 1초 동안 지속되는
 //갑작스러운 여분의 전압 펄스가 들어오는 것으로서,
 //컴퓨터나 파일 등에 손상을 입힐 수 있다.
 public transient int ivalue;

 public Test(String s, int i) {
  this.str = s;
  this.ivalue = i;
 }
}//class

당연히 java.io.Serializable 인터페이스를 implements하고 있어야 한다. 

위에서 Test 클래스에 멤버변수로 String 타입의 str과 int 타입의 ivalue가 있음을 볼 수 있다. 

그런데 이기서 transient 키워드에 주목하자! 

transient 키워드는 앞에 지정하면 지정된 항목 내용은  

자바 시리얼라이제이션에서 제외된다.  

즉, 직렬화가 이루어질때 사용자가 문제의 소지가 있는 변수나 메쏘드를 제외시킬 수 있도록 해주는 것이다. 

 

그럼 Test 클래스를 직렬화하여 파일로 저장해보자! 

 

-Write.java-
package serializable;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class write {
 public static void main(String args[]) {

  try {
   //file.out이란 이름으로 파일 fos 객체 스트림을 생성
   FileOutputStream fos = new FileOutputStream("file.out");
   //출력스트림 객체 생성
   ObjectOutputStream oos = new ObjectOutputStream(fos);
   //태스트클래스를 이용하여 문자열, 숫자 타입의 객체를 인자로 넘겨 객체 생성
   oos.writeObject(new Test("testing", 37));
   //메모리 해제 및 파일 생성
   oos.flush();
   //스트림을 사용하였으므로ㅌ 스트림을 닫는다.
   fos.close();
  }
  catch (Throwable e){
   //출력 결과들 출력
   System.err.println(e);
  }
 }
}//class

위의 소스는 Test 객체를 file.out이라는 이름의 파일로 저장할 것이다. 

역시 writeObject를 사용했고, 초기 값으로 "testing" 이라는 문자열과 37의 값을 지정했다. 

 

자! 그럼 file.out 파일에서 Test 객체로 복원시켜 보자! 

 

-Read.java-

package serializable;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class read {

 public static void main(String args[]) {
  //테스트 클래스 타입의 객체 생성
  Test testobj = null;
  try {
   //file.out이란 파일을 읽어 입력스트림으로 변환
   FileInputStream fis = new FileInputStream("file.out");
   //파입입력스트림을 객체입력스트림 객체로 생성
   ObjectInputStream ois = new ObjectInputStream(fis);
   //읽어들인 객체를 테스트타입크랠스 객체로 저장
   testobj = (Test) ois.readObject();
   //파일 입력이 완료되었으므로 닫는다.
   fis.close();
  }
  catch (Throwable e){
   e.printStackTrace();
   //System.err.println(e);
  }
  //변환된 스트림을 출력하기 위해 만들어진 객체 타입의 필드값을 출력
  System.out.println(testobj.str);
  System.out.println(testobj.ivalue);
 }//method
}//class

위의 소스를 컴파일하여 실행시켜 보면 

file.out 파일에서 readObject 메쏘드를 사용해서 Test 객체를 복원해 낸다. 

 

결과를 출력해보면 다음과 같다!!! 

 

testing 

 

여기서 testobj.str의 값은 저장하기 이전 상태 그대로지만 testobj.ivalue의 값은 처음에 37로 지정했는데 0으로 출력되었다. 

 

이것은 test 클래스에서 transient 키워드가 지정되었기 때문에 시리얼라이제이션에서 제외되었기 때문에 본래 값을 보존할 수 없었던 것이다.

 

Java Object Serializatoin

Java Object Serializatoin의 3회 강좌를 시작한다. 

이번에는 객체를 소켓을 통해서 전송하는 방법에 대해서 다루겠다. 

이때 주의해할 점이 있는데... 이것은 

예제를 통해서 공부해 보도록 하겠다. 

 

먼저 전송할 객체 클래스를 다음과 같이 만들었다고 하자! 

 

-MyObject.java-

 

package serializable;

import java.io.Serializable;

public class MyObject implements Serializable {
 
 //객체 생성
 String name;
 int count;

 //기본 생성자
 MyObject() {
  setName();
 }

 //setter
 public void setName() {
  count++;
  name = "MyObject " + count;
 }

 //이름을 반환하는 toString메소드 재정의
 public String toString() {
  return name;
 }
}

역시... Serializable 인터페이스를 implements하고 있으며... 변수로 name과 count를 가지고 있다. 

컨스트럭터에서 setName() 메쏘드를 호출하여 count를 증가시키고 name의 String에도 숫자가 추가되고 있다. 

 

그러면 위의 객체를 스트림을 통하여 소켓으로 전송하기위하여 먼저 서버를 만들어보자! 

 

-JabberServer.java-

package serializable;

import java.io.DataInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class JabberServer {

 //포트 설정
 static final int port = 8080;

 public static void main(String[] args) {
        try {
         //빈 객체 생성
             MyObject o = new MyObject();
             //서버소켓 생성
             ServerSocket s = new ServerSocket(port);
             //생성된 서버 출력
             System.out.println("Server Started: " + s);
             //서버소켓에 접속이 이루어졌을 때 소켓을 생성
             Socket socket = s.accept();
             //접속한 클라이언트의 상태를 출력
             System.out.println("Connection accepted, socket: " + socket);
             // 접속한 클라이언트의 출력스트림을 갖는 출력 스트림 객체를 생성
             ObjectOutputStream ToClient =
                                  new ObjectOutputStream(
                                        socket.getOutputStream());
             //소켓의 입력스트림을 받는 데이터 입력스트림 객체를 생성
             DataInputStream FromClient =
                                  new DataInputStream(
                                        socket.getInputStream());
             //오브젝트객체의 카운트가 10이될 때까지 반복
             while (o.count<11) { 
              //오브젝트 객체를 사용한 횟수 출력
                  System.out.println("writing " + o);
                  //이름 설정
                  o.setName(); 
                  /**
                    Object reference를 reset한다.
                    (이 부분이 포인트)
                    이것을 안하면 첫번째 전송한 객체의 
                    reference로  계속 전송된다.
                    그래서 갱신된 data가 반영되지 못하는
                    현상이 생긴다.
                  */
                  //서버를 리셋
                  ToClient.reset();
                  //빈객체를 클라이언트객체에 쓴다.
                  ToClient.writeObject(o);
                  System.out.print("trying to received acknowledgement ... ");
                  //클라이언트에서 읽은 인트 값을 출력한다.
                  System.out.println("acknowledgement: " +
                                             FromClient.readInt()); 
                  System.out.println("succeeded");
             }
             System.out.println("closing...");
             //클라이언트의 연결을닫는다.
             ToClient.close();
             //서버 소켓을 닫는다.
             socket.close();
        } 
        catch(Exception e){
             e.printStackTrace();
        } 
    }
}

위 서버 프로그램에서는 서버 소켓을 8080 포트로 열어놓고 클라언트를 기다리다가 클라이언트가 억셉트되면 계속 동작하게 되어있다. 

 

계속 설명하기 전에... 클라이언트 프로그램도 같이 보도록 하자! 

 

-JabberClient.java-

 

package serializable;

import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.ObjectInputStream;
import java.net.InetAddress;
import java.net.Socket;

public class JabberClient {

 static final int port = 8080;

 public static void main(String args[]) {
        MyObject o;

        try 
        {
         //아이피 객체 생성, 이름은 없다~
            InetAddress addr = InetAddress.getByName(null);
            //얻어진 아이피 주소를 출력함.
            System.out.println("addr = " + addr);
            //네트워크를 사용할 소켓 생성, 아이피 주소와 포트번호로 한다
            Socket socket = new Socket(addr, port);
            System.out.println("socket = " + socket);
            //객체를 입력할 입력스트림 생성,
            ObjectInputStream FromServer = new
            ObjectInputStream(socket.getInputStream());
            //서버로 전송할 데이터출력 스트림을 생성
            DataOutputStream ToServer = new
            DataOutputStream(socket.getOutputStream());
 
            //카운트할 변수 선언
            int i=0; 

            while(true){
             //빈 객체에 서버로부터 읽어온 객체를 입력
                o = (MyObject)FromServer.readObject();
                System.out.print("trying to send acknowledgement ... ");
                //스레드 생성, 대기시간은 0.5초
                Thread.sleep(500);
                //출력스트림에 증가된 i값을 증가시켜서 보내줌
                ToServer.writeInt(i++);
                System.out.println("succeeded");
                System.out.println(o);
            }
       } 
       catch (EOFException f){
            System.exit(0);
       } 
       catch(Exception e){
            e.printStackTrace();
       }
   }
}//class

소켓이 맺어진 후에... 

 

서버에서 MyObject 객체를 생성하면 컨스트럭터에의해 카운트가 1이 된다. 

그후 setName() 메쏘드를 호출하고 나면 카운트가 2가 되고  이것을 스트림으로 바꾸어 객체를 전송하게 된다. 

 

클라이언트는 전송된 객체를 받아 ACK 성공 메시지를 뿌리고 카운트 값을 찍는다. 

 

그후 서버에서 setName() 메쏘드를 다시 호출하여 객체의 카운트 상태값을  하나 증가시켜 3으로 만든후 객체를 스트림으로 전송한다. 

 

클라이언트는 두번째 객체를 받아 ACK 성공 메시지를 뿌리고 카운트 값을 찍는다. 

이때 카운트 값이 갱신된 3값으로 찍혀야 하는데... 

여전히 2로 찍혀져 나온다? 

 

왜일까???    

 

이것은 자바의 버그가 아니다. 

 

이것은 자바 시리얼라이제이션에서는 

처음 전송한 객체의 object reference를 인위적으로

reset시켜 주지 않으면 객체의 상태가 바뀌더라도 전송되는 객체의 object reference는  처음 전송한 객체의 object reference로 계속 가지게 되므로  이와 같은 현상이 발생한다. 

 

이문제를 해결하려면... 

객체를 스트림으로 전송하기 전에... 

reset() 메쏘드를 통하여 같은 object reference를 사용하지 않도록 리셋시켜주어야 한다. 

 

즉, 

ToClient.reset(); 부분에 대한 이해가 이번 강좌의 포인트이다. 

이부분이 있고, 없고의 차이를 반드시 이해하기 바란다. 

 

객체를 소켓으로 계속 전송하게 될 경우... 

실수하면 위와같은 버그아닌 오류에 봉착하기 쉽다. 


'JAVA' 카테고리의 다른 글

overriding 실습 (ex:할아버지/아버지/아들)  (0) 2009.11.21
자바 중간고사 정리  (0) 2009.11.21
자바의 기본 타입  (0) 2009.11.06
자바 기초 문법  (0) 2009.11.06
2009/01/05 RealChoky 어록  (0) 2009.11.05
Posted by Tiwaz
JAVA2009. 11. 6. 00:01

Data type --- Primitive type(기본형) 8가지, 1byte~8byte까지있음
           |- Reference type(참조형) 무한대가지
long 8byte정수형을 float 4byte 실수형에 담을 수 있다. 표현 범위가 훨씬 넓기 때문에 float표현가능 범위 내에서 dataloss가 발생하지 않기 때문. bit는 적어도 표현수가 float가훨씬크다.
boolean은 내부적으론 1byte인데 다른 pc에선 2byte로 표현하는 등 정해지지 않아서 알 수 없다.

byte 2 ^ 7
short 2 ^ 15
int 2 ^ 31 bit 인 이유 : 맨 앞은 부호라서 1승을 빼준다.
long2 ^ 63

고정소수점 : 우리가쓰는방법
부동소수점 : 소수 (예 : 12.345) 뒤에 10의 몇승 방식으로 표기하는 방법(1.2345 * 10^3). 지수 표기법.

부동소수점 : 지수 표기법. 가장 근접한 수를 가질 뿐이다. 명확한 수를 뽑을 수는 없음. 표현할 수 있는 수가 한정되어있기때문.
1.xxxx 형식으로 앞에 1자리 수만 쓰는 형식을 쓴다.10.xxx 나 0.10xxx형식으론 쓰지않는다.

실수 기본값 double : 0.0  / boolean : false / int : 0

1000000000 + 2000000000 = 숫자가 표현범위를 넘어가면 숫자는 짤려나가고 나머지 값이 표현된다. -1294967296 으로.

double num; num = 3.14 + 1; 결과 : 4.140000000000001

0.0 은 0이 아니고 0에 가장 가까운 수. 예) 10.0 / 0.0 = Infinity

실수의 연산은 정확하게 나올 수 없기 때문에 소수점 아래에 수는 버리고 원하는 범위내의 수만 취득해야된다.

1byte : 8bit, 맨앞 1bit : +-부호(MSB:Most Significant Bit),  범위 : -2^7 ~(2^7)-1 

long 의 -922경 ~ +922경을 초과하는 수를 표현할 때는 BigDecimal을 사용하면 원하는 모든수를 표현할 수 있다.

10진수와 10진수의 승수(지수)를 2진수로 바꾸기 : 136page참고

double 표기 예 : 4.9e-324; // 4.9 (e-324: 10의 -324승)
double 숫자 4.9e-324; // double타입의 가장미세한 + 값
double 숫자 -4.9e-324; // double타입의 가장미세한 - 값
값이 0이 아니고 수학에서 말하는 0.0에 한없이 가까운 수라서 숫자 / 1억 을 해도 0.0이나-0.0으로나옴

부동소수점 타입의 NaN(Not a Number) : 숫자가 아니다. 표현 방법도있음. 143page참조
NaN은 0.0 등 숫자로 정의할 수 없는 수를 말한다.

유니코드Unicode char type의 내부 표현
예)char의 기본값 : '\u0000' 0000부분을 unicode.org 한글 자리 참조해서 쓴다.
char가C에선 숫자로 써서 표현가능하지만 Java에선 실제로 숫자로 저장되도 내가 숫자로 사용할 순 없다.

리터럴(literal) : 소스 상에 나와있는 데이터. 소스코드 내에 데이터 값 그대로 쓴 상수
int num = 1; 에서 1 : int 타입 리터럴
0.5, 12.0, 12. : 기본적으로 double타입 리터럴 .(점)이 붙으면 .0이 생략된걸로 간주해서 double이 됨.
리터럴 예 : float num;에 num = 12.34; 하면 12.34가 double형이라서 dataloss가 발생.
possible loss of precision 에러가 뜸. 변수를 잃어버릴 가능성이 있습니다.
024 : 8진수 정수. 숫자앞에 0으로 시작하면 8진수로 취급됨.
0x30A1 : 0x나 0X로 시작하면 16진수로 취급됨. 10~15까지의 숫자는 abcde,ABCDE로 표현함.
024L, 0x30A1L, 120L 은 long type으로 취급함. 뒤에 L을 붙이면 long type가 됨.
12e100 : 12*10^100 , e나 E 둘다 지수 표기됨.
p5 : 16의 승수, 16의 5승을 말함. 16^5
12F : float 타입이라서 12.0f의 float타입으로 됨

12.L : 12L은 되지만 12.L은 안된다. 뒤에 숫자대신 L이 와서 오류임. .(점)뒤에 L을 붙이면 12.0L로 해주지않음

''싱글쿼테션마크 안에 있는 것이 문자 1개이다. 글자가 1개라서 ''안에 표기하는것은 아님.
 예)'\n' : 줄바꿈 이라는 한 문자. 소스코드에 직접쓸수없는 문자는 escape sequence를 앞에 둬서 쓴다.
windows : \n / Unix : \n\r 가 줄바꿈 이라는 표기.
escape sequence 목록 : 155page참고
""더블퀘테션 안에 문자는 String type으로 취급한다.
""를 null string이라고 한다. null하고 null string하고 다르다. string이고 메모리에 존재하는데 문자를 가지고 있지 않은것이다.
지갑도 없으면 null(아예없는것), 지갑은 있는데 돈이 없으면 null string.

println 안에 \" 를 써야 따옴표 표시가 가능함.

println 안에 문자 접합할때 쓰는 + 기호는 내부적으로 .concat()라는것을 호출한다. 더하기가 아니다.


'JAVA' 카테고리의 다른 글

overriding 실습 (ex:할아버지/아버지/아들)  (0) 2009.11.21
자바 중간고사 정리  (0) 2009.11.21
Java Serialization 직렬화 예제  (0) 2009.11.06
자바 기초 문법  (0) 2009.11.06
2009/01/05 RealChoky 어록  (0) 2009.11.05
Posted by Tiwaz
JAVA2009. 11. 6. 00:00

1. 자바 프로그램 구성요소 : 키워드, 식별자(identifier), 상수를 표현하는 단어
-키워드 : class, public, static, void
-식별자 : HelloJava, main, String, args, System, out, println

2. 키워드와 식별자의 차이 :
- 키워드 : 자바라는 언어에서 명령으로 정의하는것, 이름으로 정의할 수 없다.
   ex)abstract, for, if, do, try, void, class, while... 등등, 변수의 이름으로 줄 수 없는 것들
- 식별자 : 클래스, method의 이름이라는 뜻 .이름으로 쓰인것들.

3. 상수(constant) : 항상 정해져 있는 수(number라는 의미는 아님.)

 

4. 변수(variable) : 변화되는 값을 저장하는것

 

5. 자바의 NULL :  참조할게 없음, 메모리에 없는상태. 값이 없다는 의미는 아님.

6. 기호 :
- 대괄호[] : 배열
- 중괄호{} : 영역
- 소괄호() : 메소드의 파라미터들, 연산자 우선순위 결정할때, 메소드 호출할때 씀
- 마침표. : 참조연산자
- 세미콜론(;) : 문장의 끝을 나타내는 명령 끝 기호
- 등등

7. 데이터 :
- 문자열(string) : " "
- 문자(character) : ' '
- 정수 : .이없으면 정수
- 소수 : .이있으면 소수
- 리터럴 literal : 소스코드에 나온 데이터, "Hello, Java" : 문자열 리터럴
- 등

 

8. 변수 : 메모리상에 저장된 데이터의 위치를 가지고있는 하나의 메모리, 데이터를 담는 일종의 그릇

9. 변수의 3단계 :
-1) 선언(Declaration) : 변수의 메모리의 크기를 얼마나 할당 받아야 될 지를 컴파일러에게 알려주는 것
-2) 초기화(Initialization) : 선언 후 처음 변수가 값을 가짐을 초기화 과정이라하고 값은 초기값이라 함
-3) 대입, 할당 단계(Assignment) : 값을 할당 받는것, 값을 가짐
-4) 소멸 : 신경안써도 됨. 할당된 메모리를 해제함. JVM이 알아서 해줌.

 

*스크립트 언어들은 선언을 잘 안하고 씀(동적언어) -> 유연하지만 속도느림
*자바에서는 얼마나 쓸 지 정해놓고 써야 됨(정적언어) -> 속도가빠르다

 

- int num;
 -- type : int형type 선언         -- num : 4byte의 num이라는 공간을 할당       -- ; : 명령의 끝
* 자바의 모든 데이터 타입은 signed int 이다. unsigned자료형이 없고 부호가 있다.

 

- 대입문 : 변수에 데이터를 담는 명령문
 ex) num=10+20;
 --num이라는 변수에 10+20을 하라는 의미, 우변을 계산해서 좌변에 더한다.

 

 

**에디트 플러스에서 자바 컴파일을 하기 위한 셋팅 준비!!

에디트플러스 -> 도구 -> 사용자도구구성 -> 추가 -> 그룹이름 : java -> 메뉴제목 : javac->명령 -> 경로 bin\javac.exe선택-> 인수 : $(FileName) ->디렉토리 $(FileDir)-> 출력 내용캡쳐 선택->적용
추가 제목 : java-> 명령 : java.exe ->인수 $(FileNameNoExt)  디렉토리 $(FileDir) 적용

에디트플러스에서 ctrl+1 하면 컴파일, ctrl+2하면 실행. 세팅한거 1, 2번 실행하는것임.
ctrl + j : 한줄복사
ctrl + f : 찾기
ctrl + d : 오늘날짜
ctrl + h : 바꾸기
alt + c : 영역블럭지정(세로로도됨)
ctrl + s : 저장

 

**코딩을 잘하기 위해서는? 에러노트 준비해서 컴파일 과정중 오류 난 것을 모두 저장해서 해결방법 적어놓는다.

 

 

---------조건문, 반복문-----------
프로그램의 실행,흐름을 제어하는 두가지 방법
1. 조건문 : if, switch
2. 반복문 : for, for in(jdk1.5부터됨),while, do ~ while
3. 특이한 애들 : break, continue, lablebreak(goto문형식)

if 키워드를 이용한 조건문 : true 나 false만 된다.

윈도우키 + e 키 누름
C:\Program Files\EditPlus 2\template.java 에디트 해서 수정하면 자바파일 신규생성할떄 그것으로 만들어진다.
도구 -> 기본설정 ->설정및 구문강조->설정 자동 않기 하면 자동으로 안만들어진다.

부명령문(substatement):다른명령문안에포함된 명령문.
반복문(interative statement):주어진 일을 반복하는 명령문
while 안에 값을 false로 되는 값을 주어야 끝나게 된다.
예 : num= num + 1;을 while안에 넣음
while 안에 true를 넣는 등의 무한반복 실수를 하지 말것.

 

4. 블록, 영역(block) : 명령문들을 중괄호로 둘러싼 것. 매우 중요. 변수의 생존범위를 정함.

5. 주석(comment):
-  /* */ 안에 여러문장들은 다 주석이 된다.
-  //는 한줄주석
-  /** */ 아큐먼트 주석. 문서화 주석. API만들때 쓰임.javadoc만들때 쓰임

 

6. 공백문자:스페이스(SP),탭(HT)horizontal tab, ,줄바꿈 문자(CR, LF),Carrige Return, Line ...새페이지문서 (FF)

 

7. 로컬변수 : 메소드 안에 선언한 변수가 아니고  블럭 안에서 선언된 것들을 말함. class블럭만 제외. 종류는 3가지가 있다.
                   

8. Java변수의 종류 3가지:
-1) Static 변수(=class변수) : 정적변수, 클래스로 접근함
-2) Dynamic 변수(=객체변수,=object변수,=member변수 ), object로 접근함.
    멤버변수는 Static 멤버변수와Dynamic 멤버변수(Nonstatic)로 나뉜다.
  예) class 안에, main위에 선언된 변수 : 멤버변수
-3) local변수(지역변수)
  C에는 지역변수, 전역변수가 있지만 java는 전역변수가 없다.

  Static, non-static, local은 사는곳이 다르다.
  static은 class영역에 산다.
  local은 Stack영역에 산다.
  객체는 heap영역에 산다.

실행순서 : static(클래스,static)->heap(객체)->stack(local)

9. local변수 :
-1) 는 클래스 로딩시 메모리에 올라옴
-2), 3) 는 런타임(실행)때 메모리에 올라옴
메모리에 올라오는 순서: 1)->2)->3)

 


static 안에서 non-static은 사용이 안된다.

 static{
  int ssi = 200;
 }
하면 static{}안에 내용은 모두 static변수가 된다.

 

10. 컴파일 타임 : *.java->*.class 변환될때

 

11. 클래스로딩타임 : *.class를 기계어로 바꿀때 (static 자리 만든다, jvm이 실행종료될때까지 메모리에 남아있음)

13. runtime(실행시간) : heap과 stack메모리에 올릴때 (stack과 heap은 가변적으로 생기고 없어짐, static 메모리를 공유함)

 

14. String args[] 도 로컬변수.

선언문 기본형식 1. 타입 식별자;  2. 타입 식별자=초기값;
여러 변수를 한꺼번에 short s1, s2;처럼 사용하지 말고 2줄에 나눠서 사용해야 알아보기 쉽다.

 

15. 자바는 100% 순수한 객체지향 언어가 아니다.
--그 이유로 프리미티브 타입의 byte, short, int, char.... 등 기본형의 8가지 데이터 형이 있는데 이것은 객체가 아니다.
--자바의 자료형은 기본형과 참조형의 2가지가있다.

16. 기본형(primitive type) : 8가지,
- byte : 1byte,
- short : 2byte,
- int : 4byte,
- long : 8byte ,
- float : 4byte , 숫자뒤에f넣으면 4byte float
- double : 8byte , 숫자뒤에d를넣거나 안넣으면 8byte double
- char : 2byte양의정수,
- boolean : true/false
**객체형으로 만들지 않은 이유: 속도가 빠르기 때문. 객체로 만들면 속도가 느리다.


-자바는 2byte unicode체계이다.그러므로 char는 2byte이다.
-참조형(reference type) : 무제한, 만들면된다.

-변수를 넣을땐 항상 type를 생각해야된다. type가 다르면 오류가 난다.

 

17. 식별자 명명 규칙
- $date나 _date는 된다. da ta 같이 공백이나 _와$외에 특수문자는 사용하지 못 한다. true,false,null도 안됨
- 상수값은 대문자로 넣는 관례가 있다. 예 : MAX_NUM

 

18. final변수의 3가지 용법
- final변수가 class에 쓰일때 : 상속불가
- final변수가 method에 쓰일때 : overriding불가
- final변수가 variable(변수)에 쓰일때 : 초기화 한 후에는 값 변경 불가

 

- 컴파일시 오류는 error
- 실행시 오류는 exception

 

-ComplexAssing연산자(복합연산자) : +=등등 계열

 

-증가연산자 num++감소연산자num--가 num=num+1보다 빠르다. 임시로 저장할 공간이 필요 없기 때문.
-전치증가연산자 ++num /후치 증가 연산자num++

-num2 = num++;  // num의 값이 저장 된 후 num++이 수행된다.
-num3 = --num;  // --num이 연산이 된 후 num3에 저장된다. OpTest1.java 참조


자바의 배열
1. 정적배열 : 크기가 고정되어있다. 선언 후에 크기를 지정한 후에 사용가능하다. 크기가 할당되면 절대로 바꿀 수 없다. 속도가 빠른대신 유연하지 못하다.
   동적배열 : 스크립트언어 등이 된다. 자바는 안된다.
2. 배열내에 기본형/참조형 한가지 타입만 담을 수 있다. int면 int, String이면 String만 배열에 담을 수 있다.

예: 스크립트언어의 ECMA배열은 동적 배열이라 아무거나 다 담고 크기도 맘대로 변할 수 있다.
 - 동적 배열 : [문자'c'][숫자1][객체][][][크기새로증가][][][]... 속도가 느리다.
 - 정적 배열 : 1000번지[1]1004번지[2]1008번지[3]  속도가 빠르다.

 

**배열은 왜 필요한가? : 변수를 많이 만들어야 될 경우 많은 이름들을 만들어야되는데 배열을 사용하면 하나의 이름으로 사용할 수 있다.
main배열 예 : main(String[] args)   혹은 main(String args[]) 으로 사용할 수 있는데
**main(String[] args)로 사용하는 이유가 String[] 스트링 배열인지 한눈에 확인 할 수 있기 때문이다.

int[] i = new int[크기]; // i : int형 배열을 담을 수 있는 type. i는 int형이 아니다. 반드시 크기를 할당해야 쓸 수 있다.

- new : 참조생성연산자
i.length : 배열의 크기를 알려준다. 위의 i.length == 5
일반화를 시키면 index의 크기는 0 =< index =< length-1
 
int[] i = new int[3]; // 하면 int[] type의 기본값인 0으로 배열 안에 자동으로 채워진다. i[0]=10;하면 i[0]만 10, 나머진 0으로 채워진다.
배열 참조형의 기본값은 null으로 채워진다.

new연산자의 의미
int[]i = new int[3]; // 하면 heap영역에 4*3 byte, 총 12byte공간의 메모리가 생긴다.
예)  FFEE:003C의 물리적 주소가 있다면 이 주소의 참조값은 Array타입@해쉬코드16진수 형식으로 생긴다.
1. 배열 객체를 메모리에 생성한다.
2.물리 주소에 대한 참조(reference)연산이 일어난다.
3. i에 참조값을 리턴한다.
기본형은 값을 값으로 받지만 참조형은 참조값을 값으로 갖는다.

char[] charAaary=new char[5]; 하고 System.out.println(charArray);하면 String형태로 바뀐다. 실제로 쳐보면 참조값이 보인다. 잘 모르겠음.
char[]는 String 형태이다.

http://unicode.org/ 가면 전세계에 알려진 문자는 모두 나옴.

배열은 메모리에 연속적으로 잡힌다.
예) 연속적 : [][][][][][] 형태로 주소가 동일 간격으로 떨어져서 붙어있다.

int table[3][4];
table.length : 3
table[0].length : 4

System.out.println(안에 나오는 + : 문자열 접합 연산자


switch (식) : 식에는 정수나 char 타입의 값이 들어간다.

switch에 break문을 사용하지 않으면 아래것들이 모두 실행되니 주의할것.(break를 사용해서 의도된 프로그래밍을 하자)

do - while   은 조건식이 true일 동안 do를 무조건 한번 실행. do - while(); <-반드시 세미콜론;를 쓸 것.

for(초기화식;조건식;업데이트식)
for문의 실행순서
1. 초기식
2. 조건식
3. 실행
4. 증감식
5. 조건식
6. 실행
int cnt= 0;
for ( ; cnt < 10; ){
System.out.println(cnt);
cnt++;
} 이런 형식으로도 선언을 미리하고 조건도 블럭안에 두어서 사용할 수 있다.
for 위에 int cnt하게되면 cnt를 for문 밖에서도 쓸 수있는것이장점.

for(int i = 0; i < a.length ; i++) 형식으로 사용하면 매번 a.length를 계산해야 되므로 프로세스가 더 느려진다. 메모리를 더 잡더라도 int temp = a.length 한 다음에 for(int i = 0; i < temp; i++) 형식으로 하는게 속도면에서 좋은 코드가 된다.
반복문 안에서 연산을 수행하는것은 주의를 해야된다(없도록하는게 좋다. 자바에선 배열 length가 변하지 않기 때문). 5만번이면 시간이 많이 달라지게 된다.

향상된 for반복문(java 1.5이상부터 지원)
for(변수타입 변수이름:배열이름) 반복수행
-변수타입 : 배열항목과 동일한 타입
-변수이름:프로그래머가 나름대로 정할 수 있음.
예) for (int num : arr) System.out.println(num);
arr의 길이만큼 자동으로 반복함.
단점 : 낮은 버젼에서는 컴파일이 안되서 하위버전과 호환성이 떨어진다.

break문 : while,do,for,switch문 안에서 빠져나가는 기능, 가장 가까운 반복문을 빠져나간다. if문 안에서 break를 사용해도 if를빠져나가는게 아니고 가까운 while,do,for,switch문을 빠져나간다.

loop:    <- for문에 붙여진 라벨, lable break는 절대 쓰지말것. goto문 처럼 흐름에 안좋은 코드이다. 100page참고

for문 안에서의 continue : continue아래있는 for문 블럭을 실행하지않고 다음번 for문을 실행함. 101page참고
continue는 brake; 처럼 반복문 안에서만 사용가능(for,while,switch,do)

method는 함수처럼 return값이 있고 파라미터를 받는다.
method는 접근제한자(지정자)를 받는다. 종류 : public, protected, deafult, private, static
method 에서 반환형을 return 값을 준다.없으면 void 값을 리턴한다. 반환형은 출력데이터가 된다.
형식 : [접근제한자] [static] 반환형 메소드이름([파라미터리스트]) {      return 리턴값;   } // [  ] 안은 생략가능하다는 의미
method에서 파라미터리스트에는 변수타입 변수이름, .... , ....등 여러개가 들어갈 수 있다. 입력데이터가 된다.
method의 호출은 stack영역에서 이뤄진다.(stack:LIFO형식)

a('a',100); 처럼 함수를 만들어서 값을 넘겨주는데 넘겨주는쪽을 아규먼트Argument라고 한다.
static void a(char ch, int i){  } 처럼 값을 받는 쪽에선 파라미터Parameter라고 한다.
Argument랑 Parameter랑 동일한 말로 쓰기도 한다.

숫자 파라미터(parameter)를 넘겨줄 때 int형으로 넘겨주는데 그 이유는 가장 빠르기 때문이다. 32bit pc가 이유.. int형이 32비트 기본형이다.


return할 때 기본형은 리턴형 지정하는 선언부분 type과 return타입이 맞아야된다. 참조형은 다르다.

if와 switch는 switch가 빠르다.

main메소드의 파라미터, argument String사용하는 방법 110page참조
main은 반드시 String으로 받아야된다. int형으로 받을 수 없게 되어있다.

10.0 / 0.0 계산하면 양의 방향으로 무한대가 나온다. ( +Infinity 값)

cmd에서 입력할때 * 는 입력이 안되므로 "*" 로 입력하면 *로 입력된다.
cmd에서 입력할때 안녕 홍 길동 의 홍길동 이름부분을 공백없이 묶어서 2글자로 하고싶으면 안녕 "홍 길동" 하면된다
cmd에서 입력할때 안녕 "홍 길동"으로 표현하고 싶으면 안녕 "\"홍 길동"\" 으로 입력하면된다. \" 가 따옴표 표시이다.

Exception(예외) Error(에러)
Error : 프로그래머가 프로그래밍 적으로 손 댈수 없는 상황.
Exception : 프로그래머가 오류를 제어할 수 있는 상황, 프로그래머가 처리해 줘야 될 오류들.
우주에 있는 먼지 하나라도 오류가 날 가능성이 있으면 예외처리(exception)을해주는 것이 좋다.
RuntimeException : 프로그램을 실행하다가 발생하는 예외
Compile Error : 코드를 잘못짜서 실행을 할 수 없는 상황
Out Of Memory : 메모리가 부족함. Error의 종류임.
Exception을 잘 제어할 수록 프로그램을 견고하게 만들게 된다.
Exception의 최상위 클래스에는 Throwable 클래스가 있다.
JavaDoc에서 최상위클래스 Throwable을 검색하면 Error과 Exception을 확인할 수 있다.
try , catch, finally 를 이용하여 exception을 처리해 줄 수 있다.
 try{예외 발생 가능한 코드}
 catch(예외타입 변수명){예외 처리 코드}// catch는 여러개를 만들 수 있다.
 finally{예외가 생기거나 말거나 반드시수행해야 될 실행 코드들}

예)DB를 사용할때 열면 반드시 닫아줘야되는데 finally에 닫는 코드를 넣어준다.

catch를 사용하여 예외가 발생되었을 때 처리하는 부분을 정의해준다. 반드시 쓸것.
e.printStackTrace(); 하면 오류메세지를 출력한다.
System.out.println(e.getMessage()); 하면 오류나는 스택의 자리를 숫자로 알려준다.


'JAVA' 카테고리의 다른 글

overriding 실습 (ex:할아버지/아버지/아들)  (0) 2009.11.21
자바 중간고사 정리  (0) 2009.11.21
Java Serialization 직렬화 예제  (0) 2009.11.06
자바의 기본 타입  (0) 2009.11.06
2009/01/05 RealChoky 어록  (0) 2009.11.05
Posted by Tiwaz
JAVA2009. 11. 5. 23:59

 

지금와서 읽어보고 정리하는 것이지만 웃기다-_-ㅋ

이 길로 계속 간다면 엄청난 재산이 될 어록?ㅎㅎ

 

-목표 : 취업이 되던 안되던 후회없이 공부하기-

 

대기업은? 돈을 잘 안줌. 공기업이 돈 잘줌.
이직은? 새로 배울수 있는곳을 향해 이직하는게 좋다.
생활은? 기술로 안정을 바래야지 직장으로 안정을 바라면 안된다.

개발자로서의 열정? 찜질방에서 코딩할 수 있을 정도의 열정이 필요!!
연봉은 ?연봉 중요하지 않다. 연봉 없어도 배울수 있는 회사에서 5년만 죽기 살기로 해라!!

지금은? 가장 중요한 시기 : 첫 회사를 간 후로 인생이 결정됨. 다른회사로 바꾸긴 어려움.

전문직이란? 잘하면 생활윤택, 못하면 구제불능.

영어는? 영어 독해는 API, 튜토리얼 메뉴얼 읽을 수준까진 해야됨. 말은 헬로떙큐정도만하면됨.

영어를 못하면 IT를 못함.

목표란? 적당하지만 쉽지 않은 목표 잡기. 너무높게잡으면 꿈으로만 남음.


필수 자격증 ? 정보처리기사는 대우해줌. 나머지 SCJP, ORACLE,등등 전혀 필요없음. 기사는 자격수당이 나옴. 자바 계속 하려면 SCJP정도는 따는게 좋음.

내 실력이 어느정도 되나를 보기위해 자격증이 필요한 정도.

성과??

A와 B가 같은시간내에 성과가 다른 가장 큰 이유 : 방법을 찾는 방법이 달라서.
공부안하는 습관이 있어서 공부하기가 어렵지만 공부하다보면 안하는게 더 어려워 진다.

성공하기 위해서 필수조건? 그리고 예제?
욕심이 많아야 한다. 과정 시작했으니 1등하겠다 마음가짐을 끝까지 해야 3등이라도 한다.
적당히 욕안먹게 : 위험한 발상.
건방져지면 노력을 더이상 안한다. 아는내용이라 졸게된다. 그게 습관이 된다. 예습 복습 등에 의해 아는내용일 경우 졸림.

비전공자 케이스 : 가진게 없으니 열심히 노력함.중간에 포기함. (열심히 하지만기본에 베이스가 없어서 안된다.)
컴공과 계열 케이스 : 들은게 있어서 비전공자보다 열심히 하지 않음.(건방짐) <- 가장 위험한 케이스.
거의 아는게 없는 케이스 : 아는게 없다고 생각해서 노력함. 그상태로 마무리 까지 잘 간다.
남들이 30분하는거 10분만에 해놓는 케이스 : 옆사람이 물어보고 가르쳐주면서 행복느낌. 가장 바보같은 케이스. 완전 금지 케이스.

 

최악 : 좋은기회를 버리는 케이스. 허송세월 보내다가 집에가는거
최악보다 더나쁜것 : 좀 하다가 슬럼프때 집에가는것.
그래프도 그리던 습관에 따라 그림. 계단형.
저번주실력 top으로 상장 받은이가 할줄아는게아무것도없어서 팀장 이라도 해서책임감을 느끼고 싶다.
잘하는 방법 : 동기 4시간자면 3시간 50분 자기, 지하철 남들보다 좀더 일찍오기, 결국 top이 되었다.
따라오면 우리나라에서 top레벨로 알려주는 좋은 교육기관이기 때문에 열심히 하기.
무작정 덤비는 사람이 가장 무서운 사람.
안되도 무작정 덤벼라.

'JAVA' 카테고리의 다른 글

overriding 실습 (ex:할아버지/아버지/아들)  (0) 2009.11.21
자바 중간고사 정리  (0) 2009.11.21
Java Serialization 직렬화 예제  (0) 2009.11.06
자바의 기본 타입  (0) 2009.11.06
자바 기초 문법  (0) 2009.11.06
Posted by Tiwaz
WAS2009. 11. 5. 23:43

Windows 2003 서버의 경우 대용량 외장 드라이브 문자를 자동으로 할당하지 않는다.

그래서 아래와 같이 수동으로 드라이브 문자를 할당 하면 사용 가능 하다.

 

1. 시작->제어판->관리도구->컴퓨터 관리 실행

 

2. 좌측 저장소 -> 디스크 관리 클릭

아래와 같이 시스템의 HDD 경우 볼륨 column에 C:\ or D:\ 처럼 잡혀 있다.

하지만 외장 드라이브의 경우 우측 상단의 드라이브에 올라오지 않는다.

 

3. 우측 하단의 디스크0 ... n 처럼 나온다.

인식되지 않은 드라이브를 클릭 후 우측 버튼 클릭시 아래와 같은 메뉴가 나온다.

[드라이브 문자 및 경로 변경] 메뉴를 클릭한다.

 

4. 아래와 같은 창이 뜨면 추가버튼을 클릭 한다.

 

5. 추가 버튼 클릭시 아래와 같은 창이 뜨면 [드라이브 문자할당]의 DropDown 버튼을 클릭하여 해당 드라이브 문자를 할당 한다.

그리고 탐색기 또는 내 컴퓨터에서 확인을 하면 해당 드라이브를 사용할 수 있다.


Posted by Tiwaz
Linux & Unix2009. 11. 5. 00:31
  • 파일다운로드
    http://sun.java.com 에서 Linux 용 JDK 또는 JRE를 다운로드 받는다.
  • 파일설치
    [root@localhost src]# chmod 755 jdk-6-linux-i586.bin
    [root@localhost src]# ./jdk-6-linux-i586.bin
    [root@localhost src]# mv jdk1.6.0 /usr/local/jdk1.6.0
  • 환경설정
    [root@localhost src]# vi /etc/profile

    PATH="$PATH:/usr/local/jdk1.6.0/bin"
    export JAVA_HOME="/usr/local/jdk1.6.0/bin"
    export CLASSPATH=.:/usr/local/jdk1.6.0/jre/lib

    [root@localhost src]# source /etc/profile
    [root@localhost src]# echo $PATH
    [root@localhost src]# echo $CLASSPATH
  • 확인
    [root@localhost /]# java -version
    java version "1.6.0"
    Java(TM) SE Runtime Environment (build 1.6.0-b105)
    Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)

  • Posted by Tiwaz
    Linux & Unix2009. 11. 5. 00:25

    ============================================================
        원문 링크 : http://cafe.naver.com/linuxcare.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=14446
        참조 글 : 우웅(daiv2blu)
        설치 환경 : CentOS 5 2.6.18-92.1.13.el5
       Beryl 버전 : beryl-core 0.2.0
        설치 방법 : rpm.pbone.net에서 검색으로 각각설치
    ============================================================
    Centos 사용은 계속하였는데, 베릴 한번써보고 싶어서 자료를 찾다보니
    네이버 리눅스 유저 클럽에 있는 우웅님의 글을 보고 해봤습니다.
    rpm 버전이나 링크된 URL이 맞지 않아 별도로 rpm.pbone.net 에서 각각 다운로드 설치하였습니다.
    어렵지 않으니 한번 해보실 분은 해보시길..;

    1.설치 드라이브 확인
     [root@localhost ~]# lspci | grep VGA
     예) 00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics  
     Controller (rev 0c)
     [root@localhost ~]#

    2. Direct Rendering이 활성화(Yes) 되어있는지 확인합니다.
     [root@localhost ~]# glxinfo | grep "direct rendering"
     libGL warning: 3D driver claims to not support visual 0x4b
     direct rendering: Yes
     [root@localhost ~]#

    3. rpm.pbone.net에서 필요한 RPM패키지를 순서대로 바로 실행으로 설치합니다.
     driconf-0.9.1-5.fc6.noarch.rpm
     
     [root@localhost ~]# driconf
     우웅님 왈: ATI 제품군에 해당하시는 분들은 driconf 실행 후
     "Use HyperZ to boost performance" 를 활성화 하라고 하였는데, 제 같은 경우는 해당 내용을 찾지 못했습니다.;;

    4. beryl 설치시 필요한 패키지들을 순서대로 찾아서 설치합니다.(자동실행)
     beryl-core-0.2.0-1.fc7.i386.rpm
     beryl-manager-0.2.0-1.fc7.i386.rpm
     beryl-plugins-0.2.0-1.fc7.i386.rpm
     beryl-plugins-unsupported-0.2.0-1.fc7.i386.rpm
     beryl-settings-0.2.0-1.fc6.i386.rpm (기존의 패키지 파일중 없어서 별도로 다른 패키지를 설치하였음)
     emerald-0.2.0-1.fc7.i386.rpm
     emerald-themes-0.2.0-1.fc7.noarch.rpm

    5. 설치가 완료되면 [Applications]-[System Tools]-[Beryl Manager] 를 실행 합니다.
     또는
     [root@localhost ~]# beryl-manager

    6. 시스템 시작시 자동실행
     [System]-[Preferences]-[More Perferences]-[Sessions]을 실행.
     [Startup Programs] 탭의 [Add] 버튼을 이용하여 beryl-manager를 추가.

     

    -----------NVidia 그래픽 드라이버를 설치한 경우 랍니다. 원문 인용---------

    구글 검색에서 찾은 내용입니다.
    우선 아래의 명령을 실행하세요. (루트계정이 아닐시 sudo <명령어>)

     [root@localhost tmp]# nvidia-xconfig --add-argb-glx-visuals

    잘 실행이 되었다면 /etc/X11/xorg.conf 파일을 수정해줘야할 필요가 있습니다.
    아래의 내용을 추가해주셔야 합니다. 이미 존재하는 Section일 경우에는 없는 부분만 추가해주시면 됩니다.

    =================================================================
    Section "Module"
     Load "extmod"
    EndSection

    Section "Extensions"
     Option "Composite" "enable"
    EndSection
    =================================================================


    'Linux & Unix' 카테고리의 다른 글

    보편적인 Linux의 부팅과정  (0) 2009.11.21
    부트로더(GRUB)의 장점과 환경설정 및 부팅 과정  (0) 2009.11.21
    JDK 1.6.0 설치하기  (0) 2009.11.05
    proftpd 서버 설치 및 설정  (0) 2009.11.05
    USB Memory stick 설정  (0) 2009.11.05
    Posted by Tiwaz
    Linux & Unix2009. 11. 5. 00:22

    Proftpd 서버 설치

    1. root 계정으로 로그인 /usr/local/src/ftpd 폴더 생성

    root@localhost ~] mkdir /usr/local/src/ftpd

    root@localhost ftpd] cd /usr/local/src/ftpd

    1. lftpget 또는 wget 프로그램을 사용하여 proftpd 배포파일을 다운로드함.

    (http://www.proftpd.org 에서 다운로드 가능)

    root@localhost ftpd] lftpget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.0a.tar.gz

    1. 다운로드 파일을 압축 해제

    root@localhost ftpd] tar -xvzf proftpd-1.3.0a.tar.gz

    1. proftpd설치할 디렉토리 생성

    root@localhost ftpd] mkdir /usr/local/server

    root@localhost ftpd] mkdir /usr/local/servr/proftpd

    1. 압축 해제한 소스 디렉토리에서 환경설정 체크 스크립트 실행

    root@localhost ftpd] cd /proftpd-1.3.0a

    root@localhost proftpd-1.3.0a] ./confiugre –prefix=/usr/local/server/proftpd –enable-autoshadow –enable-shadow

    root@localhost proftpd-1.3.0a] make

    (환경설정 체크가 정상적으로 완료되면 실행파일을 만듬. Make clean 명령은 이미 만들어진 실행 파일 삭제)

    root@localhost proftpd-1.3.0a] make install

    (실행파일과 라이브러리 파일들을 환경설정에서 지정한 디렉토리로 복사하며 설치 완료)

    1. 설치가 정상적으로 완료되었는지 확인

    root@localhost proftpd-1.3.0a] cd /usr/local/server/proftpd/

    root@localhost proftpd] ls -al

     

    proftpd 서버 실행 접속 테스트

    1. proftpd 서버를 실행하기 위해 sbin 디렉토리에서 ./proftpd 실행한다.

    root@localhost sbin] ./proftpd

    -no such group ‘nogroup’

    -Fatal : Group: Unknown group ‘nogroup’ on line 27 of ‘/usr/local/server/proftpd/etc/proftpd.conf’

    (이유인즉, nogroup 찾지 못한다는 의미로써 proftpd 데몬이 실행될 유저권한과 그룹권한을 가지고 실행 되는데 실행권한에 대한 그룹 설정에 문제가 발생하였다는 것임)

    1. vi 편집기를 실행하여 에러난 부분을 수정한다.

    root@localhost sbin] vi /usr/local/server/proftpd/etc/proftpd.conf

    (27번째에 Group                   nogroup 설정된 값을 nogroup-->nobody 수정)

    1. proftpd 서버 데몬을 시작

    root@localhost sbin] /profptd &

    (& 백그라운드로 실행)

    1. 정상작동 되는지 확인.

    root@localhost sbin] ps aux | grep proftpd

    1. vi 에디터로 iptables 방화벽 설정 변경

    root@localhost sbin] vi /etc/sysconfig/iptables

    1. iptables 아래에 ftp 21 포트를 open 하는 한줄을 작성.

    -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT

    1. iptables 재시작

    root@localhost sbin] /etc/rc.d/init.d/iptables restart

    proftpd 시작 스크립트 생성

    1. 압축을 해제한 폴더로 간다.

    root@localhost ~] cd /usr/local/src/ftpd/proftpd-1.3.0a

    root@localhost proftpd-1.3.0a] cd contrib/dist/rpm

    1. vi 에디터로 proftpd.init.d 열면 내부에 PATH 설정 부분을 설치한 폴더로 수정한다.

    root@localhost rpm] vi profptd.init.d

    PATH=”$PATH:/usr/local/server/proftpd/sbin”

    1. 수정한 파일을 /etc/rc.d/init.d디렉토리 아래로 proftpd 변경 복사(퍼미션 755)

    root@localhost rpm] cp proftpd.init.d /etc/rc.d/init.d/proftpd

    root@localhost rpm] chmod 755 /etc/rc.d/init.d/proftpd

    1. 재부팅후 확인가능

     

     


    Posted by Tiwaz
    Linux & Unix2009. 11. 5. 00:20
    1. USB 메모리를 리눅스서버에 꼽는다.

    2. USB 장치를 마운트할 디렉토리 생성
    # mkdir /mnt/usb

    3.modprobe명령을 이용한  ide-scsi 모듈 로드
    # modprobe ide-scsi

    4.어떤 장치명으로 할당되었는지 확인한다.
    # fdisk -l 또는 # dmesg로 확인 가능
    (기본 파티션을 제외한 /dev/sda 또는 /dev/sdb 등의 장치명이 뜬다.)

    5. USB 장치가 /dev/sdb1 이라고 예를 들고 장치를 마운트 한다.
    # mount -t vfat /dev/sdb1 /mnt/usb
                (마운트할장치명)  (마운트된위치)

    6. 그리고 사용~~~
    # cd /mnt/usb

    7. 사용이 끝나면 마운트 해제
    # umount /dev/sdb1
    또는
    # umount /mnt/usb


    ** 한글 깨짐 복구**
    mount -t vfat -o iocharset=cp949 /dev/sdb1 /mnt/usb

    **부팅시 한글 및 자동 인식**
    1. vi 편집기로 fstab를 수정
    #vi etc/fstab
    /dev/sdb1 /mnt/usb auto noauto,iocharset=cp949, user 0 0
    Posted by Tiwaz