RewriteRule 설정

2013/04/05 14:40 / Linux/Etc


.htaccess의 예


php_flag register_globals on
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www)\.domain\.co\.kr$ [NC]
RewriteRule (.*) http://www.domain.co.kr/$1 [R=301,L]
ErrorDocument 401 http://www.domain.co.kr/401error.html


간단하게 요정도?
난 RewriteCond와 RewriteRule에 대해서만 언급해보려한다.
RewriteEngine On은 Rewrite모듈의 사용을 위해 기본적으로 On으로 설정해두는것이 좋다.
RewriteBase는 기본적으로 .htaccess가 위치안 물리적 경로로 설정하지만 Rewrite의 쓰임이 너무 광범위하기에 다르게 쓰이는 경우도 많다.
그 외에 RewriteOptions, RewriteLog, RewriteLogLevel, RewriteLock, RewriteMap등은 심화과정이므로 취급하지 않습니다 ^^;;

이 글은 완벽하지 않다. 잘쓴 글도 아니고 잘 되어있는 글도 아니다.
하지만 당신이 컴퓨터에 대한 열정이 있고 그만큼의 노력이 있었으며 독학에 재능이 있다면 이정도의 글로도 만족할것이라 믿는다. (쓸데없는 잡담이 너무 많은거 뺴고... ㅡㅡ;;)

이제 본론으로 고고-


Rewrite모듈은 URL Rewrite 엔진일까?

RewriteCond와 RewriteRule의 기본 형태
RewriteCond와 RewriteRule의 기본 형태는 이렇다.

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution

RewriteCond는 RewriteRule을 위해 존재하기도 하지만 RewriteRule은 RewriteCond를 위해 존재하기도 한다.
하지만 순서는 거의 대부분 Cond후에 Rule이 온다.
Cond는 생략하고 Rule만 있는경우도 많다.
기본형태는 이러하지만 RewriteCond만 있을수도 있고 RewriteRule만 있을수도 있으며 둘다 여러개일수도 있고 둘중 하나만 여러개일수도 있다. 순서도 맘대로라서 엄청나게 다양한 수법이 가능하다 ㅋ

처리 경로(흐름)
제일 먼저 Rule의 Pattern에 어긋나지 않는다면 Cond의 TestString으로 가서 조건검사를 시작한다. 그후 CondPattern을 지나 Substitution으로 처리되어 조건에 만족하게 된다.

다음을 보자

...
RewriteRule Pattern Substitution

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution

RewriteRule Pattern Substitution
...

위의 경우 Cond와 Rule이 막 써있다 ㅋ 두개 이상의 Rule이 있을경우 위 Rule이 처리, 적용된 결과가 다시 두번째 Rule에 적용된다. 또 아래 Rule이 있다면 그 결과가 다시 검사될것이다.
혹은. 위의 조건에 맞지 않는 값이라면 다음 Rule로 넘긴다.


이하부터는 패턴, 대용(대체), 조건패턴등의 한글화를 섞어 쓰겠다.
Cond는 조건의 약자이고 Rule은 그대로 규칙, 법이다.

특수 문자
프 로그래밍을 하면서 그 프로그램 내부 코드나 명령어로 쓰이고 있어서 쓰지 못하는 문자가 많다. 여기서도 마찬가지이다. 하지만 어디서나 존재하는 Escape문자 있으니 여기서는 "\"(역슬래쉬(원))표시가 쓰인다. 보통 .이 잘못쓰일것을 대비하여 \.로 쓰는게 보통이다.
예 : domain.co.kr ==> domain\.co\.kr
주로 점.이나 대괄호[], 괄호()등에 쓰인다.

RewriteCond
RewriteCond의 기본 구문은 이미 위에서도 나왔다.
그곳 Test스트링부분에 $N이나 %N이 쓰인다면 역참조 기능을 제공하게된다.
여기서 N은 (1<=N<=9)이다.
$N의 경우 현재 처리되고있는 Rule에서 가르키고 있는 패턴이 그룹으로 묶여 제공된다.
$N을 하나의 변수처럼 사용할수 있게되는것이다.
아래도 나와있지만 괄호로 그룹을 묶은 부분이 변수로 사용된다.

RewriteCond %{HTTP_HOST} ^[^.]+\.domain\.co\.kr$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.domain\.co\.kr(.*) /home/$1/htdocs$2

위 예제의 경우 도메인 앞의 URI를 $1로 그 뒤 경로를 $2로 지정하여 특정 디렉토리의 내용을 읽도록 하는 내용이다.
이것을 짧게 한줄로 고쳐보자면

RewriteRule ^([^.]+)\.domain\.co\.kr(.*) /home/$1/htdocs$2

요정도?

%N은 현재 처리중인 Cond에서 가르키고있는 조건과 일치한 패턴이 그룹으로 묶여 제공된다.
이건 잘 안쓰이는것같아서 정말 잘쓰이는 다음으로 패쓰~

%{Name}의 경우 해당 서버의 변수를 가지고 올수있다.
변수의 개수는 정말 엄청나게 많다. 하지만 자주 쓰이는 변수들은 아래를 통해서 한번 확인해보세요 ^^

Server Name : domain.com
Protocol : HTTP/1.1
Server Port : 80
Method : GET
Servlet Path : /index.php
Remote Host : 192.168.0.4
Remote Port : -1
Remote Address : 192.168.0.4
Content Length : 0
Header_Accept : text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Header_User-Agent : Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
Header_Referer : null
Local Name : domain.com
Local Port : 80
Locale : ko_KR
Scheme : http
Request URI : /index.php

Request URL : http://domain.com/index.php


CondPattern
CondPattern에서 쓰이는 내부 명령어? 특수명령어?등을 알아보도록하자

-d => 디렉토리를 뜻한다.
결론적으로 Test스트링이 디렉토리를 가리키거나 포함하고 있을때 처리된다.
-f => 파일을 뜻한다.
Test스트링이 파일을 가리키거나 포함하고 있을때 처리된다.
-l => 심볼릭링크를 뜻한다.
Test스트링이 심볼릭링크를 가리키거나 포함하고 있을때 처리된다.
심볼릭 링크가 뭐냐고 물으신다면 리눅스나 유닉스를 공부해보세요 ^^ 라고 답하고 싶다^^

그리고 느낌표(!)는 부정을 뜻한다.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://test.domain.co.kr/$1

위의 예제는 Request내용이 디렉토리나 파일을 가르키고 있지 않을경우 저쪽 사이트로 돌리라는 뜻. ^^
$1로 하위주소는 유지하려하고 있습니다 ^^

[Flag]
라인마다 Flag라 불리우는 깃발을 달수가 있습니다. 일종의 옵션으로 작용합니다 ^^

F => 403에러 Forbidden페이지로 된다.
L => Last라는 뜻입니다. 위의 Cond들은 여기까지만 적용된다
아래부터는 새로 시작 되겠지용~
N => 새로운 Rule이 시작된다는 깃발.
QSA => Cond의 대용을 지난 결과에 덧붙인다.
NE => Out될 값에 특수문자가 HexCode로 되어 포함되어있는경우
R => 리다이렉션. 무조건 넘긴다. 뒤 주소로 넘긴다는 뜻이지요 ^^
NC => 대소문자 구별없다는 뜻.
OR => 프로그래밍의 or와 비슷하다.


아래를 참고하시죠 ^^

RewriteCond %{REMOTE_HOST} ^domain.* [OR]
RewriteCond %{REMOTE_HOST} ^DOMAIN.* [OR]
RewriteCond %{REMOTE_HOST} ^DOMAIN2.* [NC]
RewriteRule ^(.*)$ http://www.domain.co.kr/$1 [R,L]

domain나 DOMAIN나 DOMAIN2나 domain2로부터 접속한 접속에 대하여 리다이렉트한다. http://www.domain.co.kr/로 접속하게된다. 보통 IP주소를 적게되겠다.

RewriteRule
여기부터는 아주 간단간단하게... ㅡㅡ;

텍스트

. => ?과 같습니다. 무엇이든 하나의 문자를 뜻합니다. A가 될수도 있고 Z가 될수 있다. 반드시 한글자.
[A] => 역시 하나의 문자가 올수 있다는 뜻. ex) a[eo]t => aot 혹은 aet
[^A] => 문자는 올수 없다는 뜻~ A부터 Z까지~



? => 0개 또는 1개의 텍스트.
* => 0개 또는 1개 이상의 텍스트.
+ => 1개 이상의 텍스트. 0은 될수 없다.



그룹

(텍스트) => 위의 텍스트에 속한 세가지를 조합하여 쓸수 있다
예로 (..)는 두글자라는 거지요 ^^
몇번째 그룹이냐에 따라서 위에 설명한 $N의 변수로 불러 쓸수있니다.



Anchors

^ => 줄의 시작을 나타낸다 ex) ^a => a로 시작
$ => 줄의 끝을 말한다. ㄷㅌ) a$ => a로 끝
==========================================================================
출처 : http://mycastor.tistory.com/77
2013/04/05 14:40 2013/04/05 14:40
샤이 이 작성.

당신의 의견을 작성해 주세요.

문자셋(charset)

2013/03/07 16:21 / Linux/Mysql
문자셋 문제는 항상 개발자를 괴롭힌다. 나도 문자셋에 대해서는 제대로 이해하지 못하고 사용하고 있었던 것이 사실이다. 이 내용을 작성하면서도 매우 명쾌하게 모든 사실을 이해한 것은 아니지만, 그래도 도움이 되고자 글을 남긴다.

예전엔 EUC-KR 이라고 흔히 완성형 한글이라고 불렀던 형태의 인코딩을 사용했었다. EUC-CN, EUC-JP, EUC-TW 등의 인코딩 방식도 있었던 것으로 보아 나름 표준이었던 것 같다. 조합형 한글, 확장 완성형 한글 등의 방식이 있었지만 일부 글자를 표현하지 못한다던가 하는 각각의 장단점이 있었다.

지금에 이르러서는 UTF-8이라는 헝태로 통일되어 사용되어지고 있는데, 한글은 한자, 일본어 등을 포함한 모든 유니코드 문자를 모두 표현할 수 있다는 장점이 있기 때문이다.

위키백과 "UTF-8" (http://ko.wikipedia.org/wiki/UTF-8)



MySQL도 4.0 에서 4.1 로 넘어가면서 기존의 문자열 타입의 컬럼의 크기를 나타내는 방식이 byte 수에서 글자 수로 변경되었다.

예를 들어, varchar(10) 이 기존에 10 bytes 로 영문 10자 또는 한글 5자(한 글자에 2byte)를 넣을 수 있다는 의미였는데, 문자에 상관 없이 10글자를 넣을 수 있다는 의미로 변경된 것이다.


문자열 크기 변경 때문에 당시 4.0 에서 4.1 로 마이그레이션 하면서 데이터를 많이 날려먹었던 기억이 난다. 멀티바이트 컬럼의 크기가 절반으로 줄어서 생긴 문제라고 하는데, 당시에는 제대로 이해하지 못하고 넘어갔었다...


어쨋든, 상황은 리눅스 콘솔에서 INSERT를 시도하면 지정한 컬럼 크기 만큼 한글이 들어가지 않고 짤려서 나오는 증상이 발생하면서 부터 시작됐다.

 
mysql> show create table char_default;
+--------------+-------------------------------+
| Table | Create Table |
+--------------+-------------------------------+
| char_default | CREATE TABLE `char_default` (
`char` varchar(10) NOT NULL,
PRIMARY KEY (`char`))
ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+--------------+-------------------------------+
1 row in set (0.00 sec)

위의 내용대로라면 char 컬럼의 크기는 한글/영문 구분없이 10글자가 들어갈 수 있어야 하는데, 실제 결과는 한글 3 + 1/3 글자가 들어가는 것이었다.

 
mysql> insert into char_default set `char`='가나다라마바사아자차';
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from char_default;
+------------+
| char |
+------------+
| 가나다?
+------------+
1 row in set (0.00 sec)

처음엔 단순히 utf8 문자셋의 한글이 3 bytes 를 차지하기 때문에 varchar(10) 안에 10 bytes 만큼만 기록되는 것이다라고 생각을 했었다.

하지만 문제는 문자셋 세팅에 있었다. 리눅스 콘솔 자체의 문자셋이 utf8 인 것과 별개로, MySQL 클라이언트의 문자셋 설정이 latin1 로 되어있었기 때문이다.

 
mysql> show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 10 |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)


latin1 문자셋은 1글자가 1 byte 이다. utf8로 입력된 문자열 '가나다라마바사아자차'를 MySQL Client가 latin1 형태로 Server에 전달하다 보니, 한글 1글자당 3 bytes로 인식되어 결국, latin1 10 글자 만큼만 저장된 것인데, 마치 varchar(10)이 10 bytes 크기를 가지기 때문인 것 처럼 판단하도록 만들어버린 것이다.

이런 경우에는 간단히 아래 명령어로 해결이 가능하다.

 
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 10 |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)

MySQL Client의 세팅이 utf8로 정상적으로 적용된 후에, 기존에 입력되었던 row를 조회해보면 아예 깨져서 나오는 것을 볼 수가 있다. latin1 문자셋으로 입력되었기 때문에 latin1 환경에서 보면 한글이 보일지 모르지만, 윈래 의도했던 utf8 로 보면 전혀 맞지 않는 형태로 표현이 되는 것이다.

 
mysql> select * from char_default;
+-------------------------+
| char |
+-------------------------+
| e°€e??e?¤e |
+-------------------------+
1 row in set (0.00 sec)


정상적인 설정에서 한글을 다시 입력해보면,

 
mysql> insert into char_default set `char` = '가나다라마바사아자차';
Query OK, 1 row affected (0.00 sec)
mysql> select * from char_default;
+--------------------------------+
| char |
+--------------------------------+
| e°€e??e?¤e |
| 가나다라마바사아자차 |
+--------------------------------+
2 rows in set (0.00 sec)

정상적으로 10글자가 표시되는 것을 볼 수가 있다.

 
mysql> set names latin1;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from char_default;
+------------+
| char |
+------------+
| 가나다?
| ?????????? |
+------------+
2 rows in set (0.00 sec)

거꾸로 utf8 환경에서 정상적으로 입력한 row 도 latin1 환경에서 보면 제대로 보이지 않는다.
문자셋 혼동의 결과를 정확하게 판단하기 위해 다시 한 번 테스트.

 
mysql> insert into char_default set `char` = '가나다123';
Query OK, 1 row affected, 1 warning (0.03 sec)
mysql> select * from char_default;
+------------+
| char |
+------------+
| 가나다?
| ?????????? |
| 가나다1 |
+------------+
3 rows in set (0.00 sec)


위의 show variables 결과에서 볼 수 있듯이, 문자셋 환경도 Server, Client, Connection 등의 다양한 부분에 지정할 수 있다.

예를 들어 server에는 utf8로 저장되어있는 데이터지만, 콘솔의 환경이 euc-kr 일 때,

1
mysql> set names euckr;

로 설정하고 사용하면 문자셋 같의 변환을 mysql이 알아서 해준다.

추가로, MySQL 을 설치하고 초기 설정 할 때도 기본 문자셋을 잘 지정해 놓는 것이 중요하다.
위의 예시에서 server와 database 설정이 latin1로 되어있기 때문에 my.ini 환경설정에서 해당 부분을 수정 후 서비스를 재시작 하였다.

 
# vi /etc/my.cnf
# cat /etc/my.cnf
[mysql]
character-sets-dir = utf8
default-character-set = utf8
[mysqladmin]
character-sets-dir = utf8
default-character-set = utf8
[mysqlcheck]
character-sets-dir = utf8
default-character-set = utf8
[mysqldump]
character-sets-dir = utf8
default-character-set = utf8
[mysqlimport]
character-sets-dir = utf8
default-character-set = utf8
[mysqlshow]
character-sets-dir = utf8
default-character-set = utf8
[myisamchk]
character-sets-dir = utf8
[myisampack]
character-sets-dir = utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
# old_passwords=1
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
character-set-server = utf8
default-character-set = utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# service mysql restart
# mysql -p
Enter password:

 
mysql> show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 10 |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)



결과적으로, MySQL의 문자열 컬럼 크기는 byte가 아니라 글자 수라는 것이 사실이며,
사용자는 클라이언트, 서버, 커넥션의 문자셋 환경을 잘 맞춰주어야 원하는 결과를 얻을 수 있다는 것이다.

=======================================================================
출처 : http://docs.cena.co.kr/index.php?mid=textyle&category=13634&document_srl=19401
2013/03/07 16:21 2013/03/07 16:21
샤이 이 작성.

당신의 의견을 작성해 주세요.

create tablespace : 오라클 데이터베이스내에서 생성되고 처리될 테이블들의 레코들들이 실제로 존재할 영역을 디스크 상에 물리적으로 생성시키는 명령어이다.

tablespace_name : 생성될 테이블 스페이스의 이름이다.

datafile : 데이터베이스내에서 사용되는 레코드들이 실제로 디스크상에 파일로 존재하게 되는데, 이때의 파일의 위치와 이름을 지정하는 곳이다.

data_file : 데이터베이스내에서 사용되는 레코드들이 실제로 디스크상에 파일로 존재하게 되는데, 이때의 파일의 위치와 이름을 지정하는 곳이다.

data_full_file_name : 레코드들이 실제로 존재할 디렉토리(절대패스사용)와 파일의 이름이다.

size : 테이블 스페이스내의 레코드들을 저장할 디스크상의 파일의 최대 코기를 지정해 줄 수 있다.

datafilesize : 레코드들을 저장할 파일의 크기를 k(킬로바이트), M(메가바이트)의 단위를 사용하여 나타낼 수 있다.

initial : 테이블 생성시 해당 테이블에 할당되어 있는 영역의 크기를 지정해 줄 수 있다.

datafilesize_min : 테이블생성시 사용할 수 있는 공간의 크기로, 예를 들어 10m로 지정되면 생성된 임의의 테이블에 입력되는 데이터들을 10m의 영역에 저장한다는 의미이다.

next : 처음에 저장될 데이터의 영역인 initial만큼을 다 쓰고 더 이상의 공간이 없을 때, 사용할 수 있는 영역을 할당 시켜 준다.

datafilesize_max : 추가로 테이블에 데이터가 입력될 때, 사용할 수 있는 여역의 크기이다. 예를 들어 5M를 할당하여 두면, 임의의 테이블이 사용한 영역이 10M (위의 initial영역의 크기이다)를 넘을 경우, 주가로 5M만큼의 영역을 더 사용할 수 있게 된다. 따라서 총 사용공간은 15M가 된다.

minextents minuum : next 영역으로 할당할 수 있는 최소의 갯수를지정해 줄 수 있다.

maxextents maxnum : next 영역으로 할당할 수 있는 최대의 갯수를 지정해 줄 수 있다.

picincrease num : next를 지정하여 추가로 사용할 영역을 확장하고자 할 때, 늘어날 영역의 크기를 '%'로 나타낸 값이다. pct는 '%'를 의미한다. 예를 들어 picincrease 5라고 지정해 두면, next로 추가로 작업할 영역을 늘여 줄때, 처음에는 next롤 설정된 영역만을 확장시켜 주나, 두 번째부터는 next영역의 크기에서 5%만큼 더 크게 확장시켜 주게 되는 것이다.

online/offline : 테이블 스페이스 생성시 online이나 offline 중 택일하여 쓸 수 있으며, 생략하면 online을 의미한다.
online으로 설정하여 테이블 스페이스를 생성하면, 테이블스페이스를 생성함과 동시에 데이터베이스 사용자들이 사용가능하다는 것을 의미하며, 일반적으로 online으로 설정하여 사용한다.

-- 테이블스페이스 정보 조회
select * from dba_data_files;
select * from dba_tablespaces;

-- 테이블스페이스생성
create tablespace info_data
datafile '/oracle/infodata/infodata.dbf'
size 200m
default storage(
initial 80k
next 80k
minextents 1
maxextents 121
pctincrease 80
)online;

-- 테이블스페이스 online / offline
> alter tablespace tablespace_name offline;
> alter tablespace tablespace_name online;

-- 생성된 테이블 스페이스의 추가하기 공간 늘여주기
alter tablespace info_data
add datafile '/oracle/infodata/infodata/dbf'
size 100m;

-- 생성된 테이블 스페이스 크기 변경하기
alter database datafile '/oracle/infodata/infodata.dbf'
RESIZE 200M;

-- 테이블스페이스 변경하기
alter tablespace tax2110
default storage(
initial 1024k
next 2048k
minextents 1
maxextents 5
)online ;
pctincrease 기본이 50%이다

-- 테이블스페이스 자동확장 추가 (Automatic Extension)
alter tablespace tax2110
add datafile 'd:\tablespace\tax2110_03.dbf'
size 50m
autoextend on next 10m
maxsize 100m;
-> maxsize 를 지정할때 데이터 화일보다 크거나 같아야함.

-- 기존테이블스페이스에 자동확장 변경하기
alter database datafile 'd:\tablespace\tax2110_03.dbf'
autoextend on next 10m
maxsize 100m;

-- 테이블스페이스 삭제
drop tablespace tablespace_name
including contents --> 테이블스페이스의 모든 세그먼트를 삭제( 데이터가 있는 테이블스페이스는 삭제할수 없다)
cascade constraints; --> 삭제된 테이블스페이스 내의 테이블의 기본키와 유일키를 참조하는
다른 테이블스페이스의 테이블로부터 참조무결성 제약 조건을 삭제합니다.
$ rm kit.dbf -- Drop한 tablespace명의 Datafile이 kit.dbf일때.


-- 테이블 스페이스 의 물리적파일까지 삭제하기
drop tablespace test_tbs including contents and datafiles;

-- 오프라인 테이블스페이스
alter tablespace tax2110 offline;

-- 데이터베이스 사용자 아이디 생성 및 수정
create user 사용자아이디
identified by 비밀번호(새비밀번호)


-- 유저생성
create user panda
identified by panda123

default tablespace yswater_ts;


-- 생성한 유저에 권한주고 연결하기
grant resource,connect to panda;
grant dba to panda;

CREATE TABLESPACE SWERPDB_DATA
DATAFILE 'D:\DATABASE\SWERPDB_DATA01.ORA' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 4000M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

CREATE TABLESPACE SWERPDB_INDEX
DATAFILE 'D:\DATABASE\SWERPDB_INDEX01.ORA' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 4000M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

CREATE TEMPORARY TABLESPACE SWERPDB_TEMP
TEMPFILE 'D:\DATABASE\SWERPDB_TEMP01.ORA' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K;

-- USER 생성하여 tablespace를 USER에게 지정
create user swerpuser identified by swerpuser
default tablespace swerpdb_data
temporary tablespace swerpdb_temp;

-- USER에게 DB권한설정
grant connect, resource, dba to swerpuser;

-- drop user swerpuser cascade;

-- drop tablespace swerpdb_data including contents cascade constraints;
-- drop tablespace swerpdb_index including contents cascade constraints;
-- drop tablespace swerpdb_temp including contents cascade constraints;

grant CREATE DATABASE LINK, CREATE TABLE, ALTER ANY TABLE, BACKUP ANY TABLE, DROP ANY TABLE, SELECT ANY TABLE,INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE,
CREATE PROCEDURE, CREATE ANY PROCEDURE, ALTER ANY PROCEDURE, DROP ANY PROCEDURE, EXECUTE ANY PROCEDURE, CREATE SESSION,LOCK ANY TABLE,COMMENT ANY TABLE,
CREATE SEQUENCE, CREATE ANY SEQUENCE, ALTER ANY SEQUENCE, DROP ANY SEQUENCE,SELECT ANY SEQUENCE, CREATE TRIGGER, CREATE ANY TRIGGER, ALTER ANY TRIGGER, DROP ANY TRIGGER,
CREATE VIEW, CREATE ANY VIEW,DROP ANY VIEW
TO RMUSER;




===========================================================================
출처 : http://bangganji.tistory.com/77
2013/02/28 11:19 2013/02/28 11:19
샤이 이 작성.

당신의 의견을 작성해 주세요.

ms-sql 쿼리를 실행 중 db명 입력시 특정 db명에서 오류가 발생 할 시

ex) use 디비명
     use www.aaa.or.kr


다음과 같이 사용 할 수 있습니다.

ex) use 디비명
     use [www.aaa.or.kr]
2013/02/07 10:19 2013/02/07 10:19
샤이 이 작성.

당신의 의견을 작성해 주세요.

RRD tool 사용 중 서버 이전이나 복구 시 다음과 같은 에러 메세지가 발생하며 동작이 안될 시
(ex: cacti 모니터링 툴)

ERROR: This RRD was created on another architecture

rrd 파일의 경우 32bit 와 64bit가 호환되지 않아 그냥 사용할 수 없습니다.

원본 rrd 파일이 있는 곳에서 rrdtool 로 xml 로 생성한 후 xml 파일을 사용할 시스템에서 rrd 파일로 복원
해서 사용하실 수 있습니다.

ex)
rrd 파일이 있는 디렉토리 상위에 특정 디렉토리를 생성한 후 (여기서는 ../rrd 로 생성)

다음과 같이 입력하여 현재 디렉토리의 *.rrd 파일을 ../rrd/*.xml 파일로 덤프

# for i in ./*.rrd;do rrdtool dump $i ../rrd/$i.xml;done

사용 할 시스템에 생성한 *.xml을 모두 복사 한 후 리스토어 (여기서는 ../rra 로 리스토어)

# for i in ./*.xml;do rrdtool restore "$i" "../rra/${i%.xml}";done

생성된 rrd 파일의 소유권한을 rrd 파일을 사용하는 데몬의 유저로 변환하는 것도 잊지 말아야 합니다.

#
chown cacti.cactiuser *.rrd

2013/01/29 18:08 2013/01/29 18:08
샤이 이 작성.

당신의 의견을 작성해 주세요.

: 1 : 2 : 3 : 4 : 5 : 6 : 7 : ... 27 :