이글은 proftp DB생성과 유저등에 관한 것을 예로 설명하는 것입니다.
1.mysql설정을 한뒤 'proftp'데이터베이스 생성합니다.
#/usr/local/bin/mysqladmin -u proftp -p create proftp
==> 왠일인지 mysqladmin 이 mysql서버에 접근을 못하게 되어있다. 그래서 직접 mysql로 서버에 접속을 한다음 쿼리문장으로 처리
1.1 db유저 생성
1.1.1 db테이블에 proftp사용자 등록
db 테이블 구조
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(64) | | PRI | | |
| User | char(16) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+---------------+------+-----+---------+-------+
mysql> insert into db values('%', 'proftp', 'proftp', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
1.1.2 user테이블에 proftp사용자의 권한 추가
user 테이블 구조
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | varchar(60) | | PRI | | |
| User | varchar(16) | | PRI | | |
| Password | varchar(41) | | | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Reload_priv | enum('N','Y') | | | N | |
| Shutdown_priv | enum('N','Y') | | | N | |
| Process_priv | enum('N','Y') | | | N | |
| File_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Show_db_priv | enum('N','Y') | | | N | |
| Super_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
| Execute_priv | enum('N','Y') | | | N | |
| Repl_slave_priv | enum('N','Y') | | | N | |
| Repl_client_priv | enum('N','Y') | | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | | | | |
| ssl_cipher | blob | | | | |
| x509_issuer | blob | | | | |
| x509_subject | blob | | | | |
| max_questions | int(11) unsigned | | | 0 | |
| max_updates | int(11) unsigned | | | 0 | |
| max_connections | int(11) unsigned | | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+
mysql>INSERT INTO user VALUES('localhost','proftp',PASSWORD('비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('lnx68.thesoft.co.kr','proftp',PASSWORD(비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
mysql>INSERT INTO user VALUES('%','proftp',PASSWORD('비밀번호 '),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
host 테이블 구조
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(64) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+---------------+------+-----+---------+-------+
mysql>INSERT INTO host VALUES('localhost','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO host VALUES('lnx68.thesoft.co.kr','proftp','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
1.1.3 proftp DB생성
mysql> create database proftp;
mysql> flush privileges;
2012-10-06
DBMS/MySQL]var_디렉토리_용량_부족시에_데이터_디렉토리_이전
1. mysql을 잠시 내리고 db 파일(/var/db/mysql 디렉토리)을 여유공간으로 이동을 하고 예전 경로에 심볼릭
링크를 걸어준다.
예시 )
새로운 하드 마운팅 네임 : /usr/local/db
기존 mysql 설치 디렉토리 : 프비에서 포트로 설치시 디폴트. 아님 /usr/local/mysql
mysql 데이터 디렉토리 : /var/db/mysql
# /usr/local/etc/rc.d/mysql-server.sh stop <-- mysql 데몬 shutdown
# mv /var/db/mysql /usr/local/db/ <-- /var/db/mysql 디렉토리를 /usr/local/db/
밑으로 이동
# chown -R mysql:mysql /usr/local/db <-- 소유권을 mysql:mysql로 수정
(리눅스에서는 chown -R mysql.mysql /usr/local/db 이렇게(???) 할 것임)
# ln -s /usr/local/db/mysql /var/db/mysql <-- 심볼릭 링크 검
# /usr/local/etc/rc.d/mysql-server.sh start <-- 재기동
DBMS/MySQL]mysqladmin_사용법
mysqladminClient for Administering a MySQL Server
1) 데이터베이스의 creating
2) 데이터베이스의 dropping
3) grant tables의 reload
4) flushing tables to disk
5) reopening log file
6) 서버의 version, process, status에 관한 정보
【사용법】 % mysqladmin [options] command [command-option] command ... create db_name 새 데이터베이스를 만듦,
쉘 프롬프트 | # mysqladmin create db_name |
mysql>프롬프트 | mysql> create database db_name; |
drop db_name 기존의 데이터베이스와 그 내부의 모든 테이블을 삭제
쉘 프롬프트 | # mysqladmin drop db_name |
mysql>프롬프트 | mysql> drop database db_name; |
extended-status 서버로부터 확장된 상태 메시지를 받음
쉘 프롬프트 | # mysqladmin extended-status |
mysql>프롬프트 | mysql> show status; |
flush-hosts 호스트의 캐시를 flush함(refresh의 일부임)
쉘 프롬프트 | # mysqladmin flush-hosts |
mysql>프롬프트 | mysql> flush hosts; |
flush-logs 모든 logs를 flush함(refresh의 일부임)
쉘 프롬프트 | # mysqladmin flush-logs |
mysql>프롬프트 | mysql> flush logs; |
flush-tables 모든 테이블을 flush함(refresh의 일부임)
쉘 프롬프트 | # mysqladmin flush-tables |
mysql>프롬프트 | mysql> flush tables; |
flush-privileges grant 테이블을 reload함(reload와 같음)
쉘 프롬프트 | # mysqladmin flush-privileges |
# mysqladmin reload | |
mysql>프롬프트 | mysql> flush privileges; |
flush-status 상태변수를 초기화함(refresh의 일부임)
쉘 프롬프트 | # mysqladmin flush-status |
mysql>프롬프트 | mysql> flush status; |
kill id,id,... Mysql 스레드를 kill함
쉘 프롬프트 | # mysqladmin kill id |
mysql>프롬프트 | mysql> kill '스레드번호'; |
password 비밀번호를 새로 설정함
쉘 프롬프트 | # mysqladmin 사용자 password new_password |
mysql>프롬프트 | mysql> set password=password(new_password); |
ping mysqld가 동작중인지 체크함 processlist 서버에 작동중인 스레드 목록을 보여줌
쉘 프롬프트 | # mysqladmin processlist |
mysql>프롬프트 | mysql> show processlist; |
reload Grant 테이블을 다시 reload함
쉘 프롬프트 | # mysqladmin reload |
# mysqladmin flush-privileges | |
mysql>프롬프트 | mysql> flush privileges; |
refresh 작업중인 모든 테이블을 flush하고 닫은 후 다시 log files를 연다 shutdown 서버를 다운시킴
쉘 프롬프트 | # mysqladmin shutdown |
# mysql.sever stop | |
slave-start slave replication 스레드를 시작함 slave-stop slave replication 스레드를 정지함 status 서버의 간단한 상태 메시지를 봄 variables 사용가능한 변수를 보여줌
쉘 프롬프트 | # mysqladmin variables |
mysql>프롬프트 | mysql> show variables; |
version 서버의 버전을 알아봄
쉘 프롬프트 | # mysqladmin version |
# mysqladmin --version | |
mysql>프롬프트 | mysql> select version(); |
【예제】 ☜ 인식가능한 단축어를 사용해도 됨 % mysqladmin proc stat +------+-------+-----------+----+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+-------+-----------+----+---------+------+-------+------------------+ | 1573 | jijoe | localhost | | Query | 0 | | show processlist | +------+-------+-----------+----+---------+------+-------+------------------+ Uptime: 585293 Threads: 1 Questions: 178697 Slow queries: 0 Opens: 541 Flush tables: 1 Open tables: 57 Queries per second avg: 0.305 % % mysqladmin --help grant tables에 주어지는 권한에 따른 mysqladmin에서 수행 할 수 있는 허용되는 명령어
privilege | Commands permitted to privilege holders |
---|---|
RELOAD | reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables |
SHUTDOWN | shutdown |
PROCESS | processlist |
SUPER | kill |
라벨:
DB,
dba,
DBMS,
mysql,
mysqladmin
DBMS/MySQL]mysql 사용자 추가 및 디비 생성
mysql > create database sms;
mysql > grant all on sms.* to smsuser@localhost identified by 'smspw' with grant option;
mysql > grant all on sms.* to smsuser identified by 'smspw' with grant option;
mysql > flush privileges;
===>사용자 추가 방법
mysql> grant all on aaa.* to abcd@localhost identified by 'abcd' with grant option;
^^^^^ ^^^^^^^^^^^^^^ ^^^^^^
디비 계정 비번
mysql> flush privileges;
Query OK, 0 rows affected (0.06 sec)
====> 비밀번호 변경
# mysqladmin abcd 'abcd' 'abcde'
DBMS/MySQL]mysql_upgrade_설명_문서(4.0 ->4.1)
이 글은 database.sarang.net 에 있는 MySQL 섹션에 있는 글 입니다.
1. 준비작업
http://database.sarang.net/?inc=read&aid=24240&criteria=mysql&subcrit=&id=&limit=20&keyword=unicode&page=1
2. db 이전
http://database.sarang.net/?inc=read&aid=24241&criteria=mysql&subcrit=&id=&limit=20&keyword=unicode&page=1
3. 4.1 버전으로 이전.
http://database.sarang.net/?inc=read&aid=24242&criteria=mysql&subcrit=&id=&limit=20&keyword=unicode&page=1
DBMS/MySQL]mysql_gui_툴._sqlyog_사용법
최근에 우리는 XAMPP에 대해 당신이 당신의 databases. 을 관리하는 것을 이용할 수 있는 디폴트 데이터베이스 고객이 phpMyAdmin below: 의 screenshot을 보아서 당신이 아파치를 시작하는 방해와 PHP와 어느 mySQL. XAMPP이 phpMyAdmin와 더불어 싸서 온다을 썼다.
더 많은 스텝에게 오퍼레이션에게 . 을 내리라고 요구한다 그리고 즉 기능적인 마우스 오르쪽 버튼 클릭 지름길이지 않은 phpMyAdmin이 많은 특징을 가지지만 그것이 웹에 기초를 둔 고객이기 때문에 당신이 그것의 인터페이스의 능력으로 제한된다.
SQLyog 일은 오라클 database. 을 위해 그것이 당신을 mySQL 데이터베이스 어떤 서버도 연결하게 하고 전통적인 그래픽 사용자 인터페이스를 잘 알고 있는 사용자가 쌓은 그래픽 사용자 인터페이스의 왼쪽 부분(위)에 데이터베이스 고객이 그럴 것이다 확실하게 디스플레이 데이터베이스가 objects 당신이 www.webyog.com으로부터 자유로운 버전을 얻을 수 있다 L SQL 개발자 appreciate. 나이 많은 MS SQL 기업 매니저와 P을 좋아한다.
보아라 클릭이 되 만들어 낸다 뛰어나고 미리이어라 정하고 있다 만들어 내 지고 나타나라 저축해라 편집해라 있다 두고 남겨지고 갈라져라 위에 언제 비슷하게 더 lower 또한 자동적으로 더 쉽게 hey as 그리고 또한 직관적으로 당신 예 그것 나 테이블 그것 뷰 권리(정의)사이드 window. 컬럼 가치관 변경 dropdown field. 위치 버튼 위 테이블 할 수 있다.
물건 탭을 찰깍 소리가 나는 것은 테이블 SQL을 만들고 똑바로이어라 팔 원하는 사람들을 위해 매우 편리하게 이것이 들어오는 컬럼 information. 뿐만 아니라 테이블을 만들어 내는 데 이용된 질문을 보여 줄 것이다:
테이블을 마우스 오른쪽 버튼으로 클릭하는 것은 Novice process. SQL을 따르기 위해 쉽게 개발자가 확실하게 이들 지름길을 사랑할 것이다 이것이 일이 컬럼과 인덱스를 바꾸는 것을 좋아하게 하는 table. 을 위한 문맥 민감한 많은 오퍼레이션을 보여 줄 것이다.
그래픽 사용자 인터페이스에 기초를 둔 고객과 함께 SQLyog을 좋아해라,사용자는 테이블에(게)간단한 인덱스 command. A 마우스 오르쪽 버튼 클릭을 만들면 찰깍 소리가 나는 것이 인덱스 의지 방해를 관리해라 드물게 사용된 queries. 창조적인 일을 하는 약간의 인덱스가 예를 들면 당신을 필요로 하지 않을 것이라는 것을 기억해서 당신이 즉시 인덱스를 만든다 이슈에(게)걱정해야 할 것이지 말아라:
질문 에디터 field. 에 의하여 창에서 위의 왼쪽 부분에(서)녹색 버튼이 런 역할을 하고 모든 버튼을 수행한다 당신의 자신의 SQL 명령을 수행하는 것을 지지한다.
기초적인 로그인 information. 을 꽉 채우는 as 쉽게 당신이 패스워드와 함께 커넥션을 구할 수 있다 그래서 당신이 next. 에 대한 1 커넥션으로부터 쉽게 바꿀 수 있다을 때와 경영하는 데이터베이스 커넥션은 또한 그대로이다.
가져라 있다 세워 지고 있다 할 수 있다 편집해라 할 수 있다 떨어져라 로그인해라 한다 부담을 주어라 취한다 평균 되고 같이이어라 안에 같이(위)에 같이 같이 강력하게 그렇지 않으면 또한 건방지게 또한 as 유일하게 about 나의 당신 mySQL 매니저 응용 SQLyog very much recommended. 1 일(물건)그것 이것 도구 그것 당신 얼룩 텍스트 그래픽 mode. 당신 과정 다른 사람(것)사용자 그것 당신 이것 privilege. 그것 원인 랩탑 그것 18MB 램 자원 질문 약간 100 완전히 바로 필요로 하지 않는다.
DBMS/MySQL]mysql_5.0.41_소스_컴파일_해서_설치하기
The basic commands that you must execute to install a MySQL source
distribution are:
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
To change both the character set and the collation, use both the
`--with-charset' and `--with-collation' options. The collation
must be a legal collation for the character set. (Use the `SHOW
COLLATION' statement to determine which collations are available
for each character set.)
shell> ./configure --prefix=/usr/local/mysql --with-charset=utf8
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> bin/mysqld_safe --user=mysql &
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h test.nchannel.net password 'new-password'
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/local/mysql/bin/mysqlbug script!
The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[DBMS/MySQL]가입자에게_mysql을_사용할_수_있도록_path_설정하기
1. 가입자에게 mysql을 사용할 수 있도록 PATH설정하기
/etc/skel 의 .bash_profile에 mysql을 실행시킬수 있도록 다음과 같이 설정한다.
# .bash_profile
# Get the aliases and functions
# 사용자 정의 앨리어스와 함수 정의 포함
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
# 사용자별 환경 변수, 시작 프로그램 설정
PATH1=$PATH:$HOME/bin <- 설정부분
PATH=$PATH1:/usr/local/mysql/bin <- 설정부분
BASH_ENV=$HOME/.bashrc
USERNAME=""
export USERNAME BASH_ENV PATH1 PATH <- 설정부분
[DBMS/MySQL]too_many_connections_에러_해결책
mysql을 설치하여 사용하다보면, 서버부하가 없음에도 불구하고 "Warning...too many connections...."라는 메시지와 함께 MySQL 이 뻗어버리는 경우가 있습니다.
원인은 Mysql의 실행환경변수 설정에 있다 .
우선 Mysql설치홈의 bin디렉토리에서 "./mysqladmin -u -p variables"라고 해보시면 다음과 유사한 결과를 얻으실수 있다.
http://tfile.nate.com/download.asp?FileID=5161247
위의 결과에서
max_connections | 1000
wait_timeout | 300
와 같은 것을 볼수 있습니다 .
max_connections는 mysql에 connect할수 있는 최대 갯수를 지정해 둔것이다.
"too many connections"라는 메시지는 이 갯수를 초과해서 connect하려고 할때 발생하는 메시지이다.
결론부터 말씀드리자면 이 갯수를 적절히 조절해야한다고 말씀드릴수 있다.
하지만, max_connections 아래에 있는 wait_timeout이란 variable은 connect된 후에 몇초간 지속적으로 연결을 유지할 것인가를 지정해 둔 것이다.
이를 설명하기 위해서는 mysql_connect()와 mysql_pconnect의 차이점 그리고, mysql_close()함수에 대한 정확한 이해가 필요하다.
간단히 설명해 보자면, mysql_connect()함수로 DB connect를 했다면 해당스크립트가 종료됨과 동시에 mysql_close()함수를 호출하지않아도 자동으로 연결이 종료된다.
하지만, mysql_pconnect()함수는 해당스크립트가 종료된후 mysql_close()함수가 호출되었더라도 연결이 끊어지지않은채로 계속 연결을 유지하고 있다.
따라서, 얼핏보기에는 "too many connections"라는 에러메시지는 mysql_pconnect()라는 함수의 사용때문에 발생하는 것 같지만, 그런 이유도 있을수 있지만, 직접적인 이유는 그것이 아니라 MySQL의 메뉴얼을 보면 mysql_connect()함수를 사용하면 해당스크립트의 종료와 함께 연결이 종료된다고 되어있지만
./mysqladmin -u -p processlist"라는 명령어를 통해서 살펴보면 그대로 살아 있음을 알수 있다.
맨위에서 살펴보았던 "mysqladmin -u -p variables"의 결과로서 볼수 있는 여러가지 시작옵션들중 "wait_timeout"의 값만큼 서버에 그대로 연결을 유지한채로 남아 있는 것이다.
따라서, 이것이 "too many connections"의 직접적인 이유인 것이다.
그렇다면 문제의 해결은 간단하다.
실행옵션을 주어서 이들 값들을 자기가 운용하고 있는 서버의 성능과 용도에 알맞게 수정해 주면 되는 것이다.
MySQL실행시에 주는 실행옵션값은 다음과 같다.
./safe_mysqld -O max_connections=1000 -O table_cache=256 -O wait_timeout=300 &
일반적으로 실행시킬때에는 기본옵션을 그대로 사용하는 "./safe_mysqld"라는 옵션을 사용했다.
이렇게 실행하면 36개의 MySQL시작옵션중에서 위의 3가지 옵션들만 값들을 임의로 지정하여 실행시킨 것이다.
이렇게 실행시킨후에 다시 "mysqladmin -u -p variables"로 옵션들값을 확인해 보면 변경되어 있음을 알수 있을 것이다.
그리고, 참고로 리눅스 실행시에 mysql을 자동으로 시작하도록 설정해둔 /etc/rc.d/rc.local파일에도
위와 같이 옵션을 함께 주어서 실행하도록 설정하는 것을 잊지말기 바란다
[DBMS/MySQL]root_패스워드_잊어_버린_경우_새로_설정하는_방법
mysql을 오랫동안 사용하지 않았을 경우에 간혹 root패스워드가 기억나질않아서 당황할 때가 있습니다.
특히, 여러대의 시스템을 관리할 경우에는 시스템의 root패스워드와 일반계정 및 MySQL의 root계정과 일반계정등 기억해야할 암호가 수십개씩 되는 경우가 흔히 있습니다.
필자의 경우에도 관리하는 서버가 많은 편에 속하기 때문에 패스워드를 전혀 바꾸지 않을 수는 없고 해서 변경한 후에는 메모하여 잘 보지 못하는 곳에 블랙박스로 보관합니다.
시스템의 root암호를 잊어 버린 경우도 있었으며, MySQL의 root사용자의 암호를 잊어 버린 경험도 많이 있었습니다.
경험있는 시스템관리자라면 시스템의 root나 MySQL의 root의 암호를 잊어 버렸을 때를 대비해서 패스워드를 새로 설정하는 방법을 반드시 숙지하고 있어야 할 것입니다.
[root@kebia_1 bin]# ps -ef | grep mysqld
root956710 Mar16 ?00:00:00 sh ./safe_mysqld
root957695670 Mar16 ?00:00:00 /usr/local/mysql/libexec/mysqld
root957895760 Mar16 ?00:00:00 /usr/local/mysql/libexec/mysqld
root957995780 Mar16 ?00:00:00 /usr/local/mysql/libexec/mysqld
[root@kebia_1 bin]#
[root@kebia_1 bin]# killall mysqld
[root@kebia_1 bin]#
[root@kebia_1 bin]# ./safe_mysqld --skip-grant-tables&
[1] 12084
[root@kebia_1 bin]# Starting mysqld daemon with databases from /usr/local/mysql/data
[root@kebia_1 bin]#
[root@kebia_1 bin]# ./mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.24
Type 'help' for help.
mysql>
mysql> update user set password=password('12345') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3Changed: 3Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
[root@kebia_1 bin]# ps -ef | grep mysqld
root12084 115580 20:10 pts/200:00:00 sh ./safe_mysqld --skip-grant-ta
root12090 120840 20:10 pts/200:00:00 /usr/local/mysql/libexec/mysqld
root12092 120900 20:10 pts/200:00:00 /usr/local/mysql/libexec/mysqld
root12093 120920 20:10 pts/200:00:00 /usr/local/mysql/libexec/mysqld
[root@kebia_1 bin]#
[root@kebia_1 bin]# killall mysqld
mysqld daemon ended
[1]+Done./safe_mysqld --skip-grant-tables
[root@kebia_1 bin]#
[root@kebia_1 bin]# ./safe_mysqld&
[1] 12102
[root@kebia_1 bin]# Starting mysqld daemon with databases from /usr/local/mysql/data
[root@kebia_1 bin]#
[root@kebia_1 bin]# ps -ef | grep mysql
root12102 115580 20:13 pts/200:00:00 sh ./safe_mysqld
root12108 121020 20:13 pts/200:00:00 /usr/local/mysql/libexec/mysqld
root12110 121080 20:13 pts/200:00:00 /usr/local/mysql/libexec/mysqld
root12111 121100 20:13 pts/200:00:00 /usr/local/mysql/libexec/mysqld
[root@kebia_1 bin]#
DBMS/MYSQL]_하드디스크_이상으로_디비_용량이_초과_시
할당된 하드디스크 이상으로 디비 용량이 초과 되었을때 처치 방법.1. /usr/local/mysql/var 의 로그 파일로 용량을 줄일 수 있다. - localhost-bin.index 파일을 보면 현재의 로그 파일에 대한 정보가 있다. - 그 로그파일은 DB의 UPDATE 내역이 기록하는 파일이다. Replication(일종의 백업)을 위해 생성된다. - localhost-bin.index 에서 확인한 파일을 제외하고 다른 파일은 지워도 된다. - 한가지 더 확인하자면 marster-slave 에서 show slave status 인가하는 명령으로 현재의 master 의 로그파일을 확인할수 있으니 나머지는 지워도 된다. - /etc/my.cnf 에서 log-bin 옵션을 주석처리 해주면 로그 파일이 생성되지 않는다. 2. 하드디스크를 설치 하는 방법으로 용량 충당 - MySQL은 데이터를 디렉토리에 보관한다. 다른 파티션으로 이동할 경우 데이타 디렉토리를 이동하면 된다. 1. 기존의 데이타 디렉토리로 이동한다. $ cd /usr/local/mysql/var 2. 기존의 데이터 파일들을 묶어서 새로운 디렉토리로 옮긴다. $ tar cvf /usr2/local/mysql/var/backup.tar * 3. 새로운 디렉토리로 이동한다. $ cd /usr2/local/mysql/var 4. 새로운 디렉토리에 기존의 데이타들의 압축을 푼다. $ tar xvf backup.tar 5. 새로운 디렉토리의 권한을 mysql 사용자만 접근할 수 있도록 해 주어야 한다. $ chmod 700 /usr2/local/mysql/var $ chown mysql.mysql /usr2/local/mysql/var 6. MySQL 데몬을 실행시키는데 이때 --datadir=/usr2/local/mysql/var 옵션을 주어 새로운 데이터 디렉토리를 지정해 주어야 합니다. 이와 같은 방법으로 MySQL의 데이터 디렉토리를 다른 곳으로 옮길 수 있다. - 뭐 간단하게 말해서 기존에 데이터 있던 데이터들을 압축해서 다른곳에 옮겨놓고 그디렉토리는 새로운 하드로 마운트 시키시고 다시 풀어놓으시면 된다. 3. 하드용량 초과로 트렌젝션중 파일이 손상되었을때 치료- myisamchk --safe-recover 테이블명.myi |
2012-09-16
DBMS/오라클] DB User 별 권한 할당 관계 확인하는 쿼리
/* --------------------------------
용도 : DB User 별 권한 할당 관계 확인하는 쿼리
작업순서 : SYS(DBA권한)으로 로그인 해서 작업
update Date : 2009.04.29
update By : 정봉수
-------------------------------- */
용도 : DB User 별 권한 할당 관계 확인하는 쿼리
작업순서 : SYS(DBA권한)으로 로그인 해서 작업
update Date : 2009.04.29
update By : 정봉수
-------------------------------- */
select OWNER --// 소유자
, grantee --// 권한을 부여 받은 사용자
, MAX(decode(privilege, 'INSERT', 'O','')) PRIV_INS --// INSERT 권한
, MAX(decode(privilege, 'UPDATE', 'O','')) PRIV_UPD --// UPDATE 권한
, MAX(decode(privilege, 'DELETE', 'O','')) PRIV_DEL --// DELETE 권한
, MAX(decode(privilege, 'SELECT', 'O','')) PRIV_SEL --// SELECT 권한
, MAX(decode(privilege, 'EXECUTE', 'O','')) PRIV_EXE --// EXECUTE 권한
from dba_tab_privs
where owner NOT LIKE '%SYS%' --// SYS 사용자는 제외하기 위한 조건
GROUP BY OWNER, GRANTEE
ORDER BY OWNER
;
, grantee --// 권한을 부여 받은 사용자
, MAX(decode(privilege, 'INSERT', 'O','')) PRIV_INS --// INSERT 권한
, MAX(decode(privilege, 'UPDATE', 'O','')) PRIV_UPD --// UPDATE 권한
, MAX(decode(privilege, 'DELETE', 'O','')) PRIV_DEL --// DELETE 권한
, MAX(decode(privilege, 'SELECT', 'O','')) PRIV_SEL --// SELECT 권한
, MAX(decode(privilege, 'EXECUTE', 'O','')) PRIV_EXE --// EXECUTE 권한
from dba_tab_privs
where owner NOT LIKE '%SYS%' --// SYS 사용자는 제외하기 위한 조건
GROUP BY OWNER, GRANTEE
ORDER BY OWNER
;
DBMS/오라클] 데이터 사전 조회
--// 어떤 문자열이나 테이블명이 포함된 프로시저를 찾고 싶을때 쓴다.
select *
from user_source
where upper(text) like '%찾고자하는 문자열%'
;
-- 오브젝트 조회
SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME LIKE '명' -- 테이블 조회 SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE '명' -- 시노님 조회 SELECT * FROM ALL_SYNONYMS WHERE SYNONYM_NAME = '명' -- 테이블의 인덱스 정보 SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '테이블명' -- 테이블의 컬럼 정보 SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명' -- TABEL COMMENT 쿼리 SELECT * FROM ALL_TAB_COMMENTS WHERE TABLE_NAME = '테이블명' -- COLUMN COMMENT 쿼리 SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = '테이블명' -- 인덱스 정보 select * from all_indexes |
오라클에서 저장되는 데이터베이스의 물리적, 논리적 구조를 포함하는
전체구조에 관한 정보는 테이블로 만들어 저장하고 있으며,
이 테이블의 소유자는 SYS이다.
일반 사용자는 이 테이블들의 데이터를 변경하거나 지울 수 없다.
일반 사용자가 이 테이블로부터 데이터를 출력해 보면 되는데,
이 테이블이 복잡하여 이 테이블들에 대해 뷰를 만들어
일반 사용자가 이해하기 쉬운 구조로 전환하여 볼 수 있게 하고 있다.
이 테이블들과 뷰를 데이터 dictionary라고 한다.
dictionary는 다음과 같이 시작되는 대표적인 4종류가 있다.
· DBA_ : 보다 자세한 정보
· ALL_ : 전체 사용자의 정보
· USER_ : 사용자의 스키마에 있는 데이터
· V$ : 오라클 서버의 성능에 관한 내용
【예 제】
SQL> select * from dictionary;
..............................
817 rows selected.
SQL>
USER_CONSTRAINTS
사용자가 가지고 있는 CONSTRAINTS에 관한 정보를 담고 있다.
【예제】
SQL> DESC USER_CONSTRAINTS;
SQL> select owner from user_constraints
2 where table_name='emp';
USER_SEQUENCES
사용자가 설정한 시퀀스의 정보를 담고 있다.
【예제】
SQL> SELECT SEQUENCE_NAME FROM USER_SEQUENCES;
USER_VIEWS
사용자가 가지고 있는 뷰에 관한 정보를 담고 있다.
【예제】
SQL> SELECT * FROM user_views;
SQL> select view_name from user_views
2 where view_name='aaa';
USER_TAB_COLUMNS
테이블의 전반적인 구조를 담고 있다.
【예 제】
SQL> select table_name,column_name from user_tab_columns
2 where table_name='EMP';
ALL_USERS
모든 사용자에 관한 정보를 담고 있다.
【예제】
SQL> select * from all_users;
USER_SOURCE
현 재 로그인한 사용자의 만든 procedure, function 따위의 목록을 담고 있다.
SQL> select * from user_source;
전체구조에 관한 정보는 테이블로 만들어 저장하고 있으며,
이 테이블의 소유자는 SYS이다.
일반 사용자는 이 테이블들의 데이터를 변경하거나 지울 수 없다.
일반 사용자가 이 테이블로부터 데이터를 출력해 보면 되는데,
이 테이블이 복잡하여 이 테이블들에 대해 뷰를 만들어
일반 사용자가 이해하기 쉬운 구조로 전환하여 볼 수 있게 하고 있다.
이 테이블들과 뷰를 데이터 dictionary라고 한다.
dictionary는 다음과 같이 시작되는 대표적인 4종류가 있다.
· DBA_ : 보다 자세한 정보
· ALL_ : 전체 사용자의 정보
· USER_ : 사용자의 스키마에 있는 데이터
· V$ : 오라클 서버의 성능에 관한 내용
【예 제】
SQL> select * from dictionary;
..............................
817 rows selected.
SQL>
USER_CONSTRAINTS
사용자가 가지고 있는 CONSTRAINTS에 관한 정보를 담고 있다.
【예제】
SQL> DESC USER_CONSTRAINTS;
SQL> select owner from user_constraints
2 where table_name='emp';
USER_SEQUENCES
사용자가 설정한 시퀀스의 정보를 담고 있다.
【예제】
SQL> SELECT SEQUENCE_NAME FROM USER_SEQUENCES;
USER_VIEWS
사용자가 가지고 있는 뷰에 관한 정보를 담고 있다.
【예제】
SQL> SELECT * FROM user_views;
SQL> select view_name from user_views
2 where view_name='aaa';
USER_TAB_COLUMNS
테이블의 전반적인 구조를 담고 있다.
【예 제】
SQL> select table_name,column_name from user_tab_columns
2 where table_name='EMP';
ALL_USERS
모든 사용자에 관한 정보를 담고 있다.
【예제】
SQL> select * from all_users;
USER_SOURCE
현 재 로그인한 사용자의 만든 procedure, function 따위의 목록을 담고 있다.
SQL> select * from user_source;
DBMS/오라클] 데이터파일 이동 및 테이블 스페이스 관리 방법
출처 :
http://bosoa.egloos.com/1825513
데 이터파일이동및테이블스페이스 관리
데이터파일이동
----------------------------------------------------------------
DB OPEN 상태에서 이동
1. example tablespace OFFLINE
ALTER TABLESPACE example OFFLINE ;
2. OS 복사명령어로 새로운경로에 복사
host mkdir c:\oracle\oradata\oracle2\
host copy c:\oracle\oradata\oracle\example01.dbf c:\oracle\oradata\oracle2\exam01.dbf
3. 시스템 데이터변경
ALTER TABLESPACE example RENAME DATAFILE
'c:\oracle\oradata\oracle\example01.dbf' TO 'c:\oracle\oradata\oracle2\exam01.dbf';
4. 새로운경로에 이동된 example TS ONLINE
ALTER TABLESPACE example ONLINE ;
5. 확인
SELECT tablespace_name, file_name, status
FROM dba_data_files WHERE tablespace_name = 'EXAMPLE' ;
6. 기존경로 DATAFILE 즉, c:\oracle\oradata\ora01\example01.dbf
삭제 DB SHUTDOWN 상태에서 이동
SYSTEM TS, UNDO TS 의 DATAFILE 이동.
1. conn sys/oracle as sysdba
2. shutdown immediate 3. OS 복사명령어로 새로운경로에 복사
host mkdir c:\oracle\oradata\oracle2\
host copy c:\oracle\oradata\oracle\system01.dbf c:\oracle\oradata\oracle2\system01.dbf
4. startup mount ; <--control 파일 Access 되는 상태
5. CONTROL FILE에 있는 시스템 데이터변경
ALTER DATABASE RENAME FILE
'c:\oracle\oradata\oracle\system01.dbf' TO 'c:\oracle\oradata\oracle2\system01.dbf';
6. 확인
SELECT name FROM v$datafile ;
7. ALTER DATABASE OPEN ;
SELECT tablespace_name, file_name, status
FROM dba_data_files WHERE tablespace_name = 'SYSTEM' ;
conn system/oracle
--TEMPORARY TABLESPACE 생성
CREATE TEMPORARY TABLESPACE temp02
TEMPFILE 'C:\oracle\oradata\temp02_a.dbf' SIZE 20M ;
SELECT tablespace_name, file_name
FROM dba_temp_files ; --TEMPORARY TABLESPACE 사용(사용자별)
CREATE USER user01
IDENTIFIED BY oracle DEFAULT TABLESPACE example QUOTA unlimited ON example TEMPORARY TABLESPACE temp02;
desc dba_users
SELECT username, temporary_tablespace AS TEMPTS ,DEFAULT_TABLESPACE AS D_TS FROM dba_users ; ALTER USER system TEMPORARY TABLESPACE temp02 ;
--DEFAULT TEMPORARY TABLESPACE 확인
SELECT property_name, property_value
FROM database_properties WHERE property_name LIKE '%TEMP%';
--DEFAULT TEMPORARY TABLESPACE 변경
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp02 ;
ALTER TABLESPACE example OFFLINE ;
ALTER TABLESPACE example ONLINE ;
ALTER TABLESPACE temp OFFLINE ;
ALTER TABLESPACE temp02 OFFLINE ; DROP TABLE test ;
--파일크기 변경(자동할당)
CREATE TABLESPACE test_ts01 DATAFILE 'C:\01\test_te01.dbf' SIZE 10M AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
ALTER TABLESPACE test_ts01
ADD DATAFILE 'C:\02\test_te01.dbf' SIZE 10M AUTOEXTEND ON NEXT 5M MAXSIZE 100M ;
--파일크기 변경(수동변경)
ALTER DATABASE DATAFILE 'C:\01\test_te01.dbf'
RESIZE 200M ; |
라벨:
데이터파일 이동,
테이블스페이스 이동,
data file,
DB,
dba,
DBMS,
table space
DBMS/오라클] 오라클 관리자 명령어 요약 - http://maktub.tistory.com/tag/oracle#main_b
!! 오렌지색 부분은 환경에 맞게 수정하세요.
- Oracle 9i / 10g 관리자 명령어 요약
- Startup / Shutdown
- Session
- Parameter File
- Control File
- Redo Log
- Tablespace
- Temporary Tablespace
- Undo Tablespace
- Database Buffer Cache
- Row Migration / Chaining
- Partitioned Table
- Deferred Constraints
- User
- Profile
- Privileges
- Role
- Export
- Import
- Direct Load
- Oracle Net - Host Naming
- Oracle Net - Local Naming
- Create DB - 9i
- Create DB - 10g
- Archive Log
- STARTUP / SHUTDOWN
- STARTUP
- startup [ nomount | mount | open [ read only ]]
- SHUTDOWN
- shutdown [ immediate | transactional | normal | abort ]
- 상태 변경
- alter database [ mount | open [ read only ]];
- STARTUP 상태 조회
- select status from v$instance;
- OPEN 상태 조회
- select open_mode from v$database;
- >>Index<<
- SESSION
- 제한 상태로 변경
- alter system enable restricted session;
- 제한 상태 조회
- select logins from v$instance;
- 사용자 SESSION 조회
- select sid, serial#, username, status from v$session;
- 사용자 SESSION 강제종료
- alter system kill session 'SID,SERIAL#';
- RESTRICTED SESSION 권한 조회
- select * from dba_sys_privs where privilege like '%RESTRICT%';
- >>Index<<
- PARAMETER FILE
- 파일구분
- spfile : binaryfile, open 상태에서 수정
- pfile : textfile, shutdown 상태에서 수정
- 파일생성
- shutdown 상태에서 수행
- create spfile from pfile;
- create pfile from spfile;
- SPFILE
- alter system set parameter_name = 'value' [ comment 'text' ]
[ scope = memory | spfile | both ] [ sid = 'sid' | '*' ]; - PFILE
- shutdown 상태에서 편집기로 편집
- >>Index<<
- CONTROL FILE
- SPFILE 사용시
- open 상태에서 명령수행
alter system set control_files = '경로1', '경로2' scope = spfile;
콘트롤 파일 복사 후 DB 재기동 - PFILE 사용시
- shutdown 상태에서 pfile 파라미터 수정
콘트롤 파일 복사 후 DB 기동 - >>Index<<
- REDO LOG
- LOGSWITCH
- 현재 사용하는 로그파일을 변경
- alter system switch logfile;
- CHECKPOINT
- active 상태의 로그파일을 inactive로 변경
- alter system checkpoint;
- LOG FILE 상태 조회
- select a.group#, a.member, b.bytes, b.status
from v$logfile a, v$log b
where a.group# = b.group#; - GROUP 추가
- alter database add logfile group 그룹번호 '파일경로' size 크기;
- alter database add logfile group 그룹번호 ('파일경로1', '파일경로2') size 크기;
- MEMBER 추가
- alter database add logfile member '파일경로' to group 그 룹번호;
- GROUP / MEMBER 삭제
- alter database drop logfile group 그룹번호;
- alter database drop logfile member '파일경로';
- ※삭제 명령시 파일은 삭제되지 않음
- >>Index<<
- TABLESPACE
- TABLESPACE 조회
- select tablespace_name, status, contents, extent_management, segment_space_management
from dba_tablespaces; - DATAFILE 조회
- select tablespace_name, bytes, file_name from dba_data_files;
- TEMPFILE 조회
- select tablespace_name, bytes, file_name from dba_temp_files;
- 일반 TABLESPACE 생성
- create tablespace 테이블스페이스명 datafile '파일경로' size 크기
[ blocksize 크기] // 해당 블럭 사이즈의 db_nk_cache_size 설정 필요
[ extent management local ] // 8i 이전 필수 옵션
[ segment space management auto ] // 9i 이후 필수 옵션; - UNDO TABLESPACE 생성
- create undo tablespace 테이블스페이스명 datafile '파일경로' size 크기;
- TEMPORARY TABLESPACE 생성
- create temporary tablespace 테이블스페이스명 tempfile '파일 경로' size 크기;
- TABLESPACE 확장
- alter tablespace 테이블스페이스명 add datafile '파일경로' size 크기;
- alter database datafile '파일경로' resize 크기;
- TABLESPACE 관리
- alter tablespace 테이블스페이스명 offline;
- alter tablespace 테이블스페이스명 online;
- alter tablespace 테이블스페이스명 rename datafile '원본파일경로' to '파일경로';
- TABLESPACE 삭제
- drop tablespace 테이블스페이스명 including contents and datafile cascade constraints;
- 문법
- CREATE TABLESPACE 테이블스페이스명
DATAFILE '파일경로1' SIZE integer [M/K], '파일경로2' SIZE integer [M/K]
[ MINIMUM EXTENT integer [M/K]]
[ BLOCKSIZE integer [K]] [ DEFAULT STORAGE (
INITIAL integer [M/K]
NEXT integer [M/K]
MAXEXTENTS integer
MINEXTENTS integer
PCTINCREASE integer)]
[ ONLINE | OFFLINE ]
[ PERMANENT | TEMPORARY ]
[ EXTENT MANAGEMENT [ DICTIONARY | LOCAL
[ AUTOALLOCATE | UNIFORM [ SIZE integer [M/K]]]]]
[ SEGMENT SPACE MANAGEMENT [ MANUAL | AUTO]] - OPEN 상태에서 DATAFILE 이동
- alter tablespace 테이블스페이스명 offline;
offline 된 T/S에 대해 복사/이동 후
alter tablespace 테이블스페이스명 rename datafile '파 일경로' to '파일경로';
alter tablespace 테이블스페이스명 online; - MOUNT 상태에서 DATAFILE 이동
- startup mount;
해당 T/S에 대해 복사/이동 후
alter database rename file '파 일경로' to '파일경로';
alter database open; - 모든 데이타 파일은 mount상태에서 복사/이동 가능
- system 파일은 mount상태에서만 복사/이동 가능
- >>Index<<
- TEMPORARY TABLESPACE
- TEMPORARY TABLESPACE 관리
- TEMPORARY T/S는 READ ONLY 설정 불가, nologgin 상태이며 rename불가, 복구대상이 아님
READ ONLY DATABASE 에서도 TEMPORARY 파일은 필요 - DEFAULT TEMPORARY TABLESPACE 확인
- select * from database_properties where property_name like '%TEMP%';
- TEMPORARY TABLESPACE 변경
- create temporary tablespace 테이블스페이스명_신 tempfile '파 일경로' size 크기;
alter database default temporary tablespace 테이블스페이스명_신;
drop tablespace 테이블스페이스명_구; - >>Index<<
- UNDO TABLESPACE
- PARAMETER 설정 / 9i
- UNDO_MANAGEMENT = AUTO [ MANUAL ]
UNDO_TABLESPACE = UNDOTBS1
UNDO_SUPPRESS_ERRORS = TRUE // 10g 에서는 쓰이지 않음
UNDO_RETENTION = integer (초) - PARAMETER 확인 / 9i
- show parameter undo;
- DEFAULT UNDO TABLESPACE 설정
- alter system set undo_tablespace = 테이블스페이스명;
parameter 'UNDO_TABLESPACE' 수정 - 설정 조회
- select segment_name, owner, tablespace_name, status
from dba_rollback_segs; - >>Index<<
- DATABASE BUFFER CACHE
- DBWR 기동 이벤트
- Checkpoint - 일반적인 ckpt는 어디까지 내려썼는지만 확인 immediate ckpt시 즉시 내려씀
Dirty Block 임계값 도달
LRU List 의 Free Block 이 부족할 때
Time out
T/S offline (9i부터는 online시), read only, begin backup
Table Drop, Truncate
RAC ping - STANDARD BLOCK SIZE
- System과 Temporary tablespace는 스탠다드 사이즈만 사용 가능
- DB생성시 설정되는 표준 사이즈, 수정 불가(system T/S 가 이미 사용중이므로)
- show parameter db_block_size
- 사용 가능한 BLOCK SIZE 조회
- show parameter cache_size
- db_nk_cache_size / n = '2, 4, 8, 16, 32'
- DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE
- hit rate 향상을 위한 parameter
db_keep_cache_size : 자주 호출되는 data를 pinning 할 때 쓰임
db_recycle_cache_size : 차후 호출될 가능성의 희박한 data를 읽을 때 쓰임 - SGA 크기 조회
- show parameter sga
show parameter sga_max - nk BLOCK SIZE의 TABLESPACE 생성
- alter system set db_cache_size = 크기[M]; // SGA영역의 공간 확보를 위해 db_cache_size를 줄임
alter system set db_nk_cache_size = 크기[M]; // 줄여진 db_cache_size 만큼 할당 가능
create tablespace 테이블스페이스명 datafile '파일경로' size 크기 blocksize nk; - nk 블럭의 T/S가 존재하면 해당 db_nk_cache_size 를 0으로 설정 불가
- >>Index<<
- ROW MIGRATION / CHAINING
- migration 은 해소 가능 chaining 은 해소 불가
오라클은 이 두 가지 경우를 구분하지 않음 - TABLE 상태 확인
- select owner, table_name, tablespace_name from dba_tables
where owner = '유저명' and table_name = '테이블명'; - TABLE ANALYZE
- analyze table 스키마.테이블명 compute statistics;
- dictionary의 통계정보를 갱신시켜 주는 작업
- CHAIN COUNT 조회
- select num_rows, chain_cnt from dba_tables where table_name = '테 이블명';
- TABLE 이동
- alter table 테이블명 move
[ tablespace 테이블스페이스명]; // 생략시 현재 사용중인 T/S 내에서 옮겨짐 - INDEX 조회
- select table_name, index_name, status from dba_indexes where table_name = '테이블명'
- INDEX REBUILD
- alter index 스키마.인덱스명 rebuild;
- TABLE MOVE 명령후 ROWID가 변경됐으므로 INDEX를 REBUILD 해주어야 함
- TABLE의 공간 사용량 조회
- select num_rows, blocks, empty_blocks, avg_space, avg_row_ren from dba_tables
where owner = '유저명' and table_name = '테 이블명'; - BLOCKS : H/M 왼쪽 블럭 수
EMPTY_BLOCKS : 미사용 블럭 , H/M 오른쪽 블럭 수
AVG_SPACE : 사용중인 블럭의 평균 빈공간
AVG_ROW_LEN : row의 평균 길이 - TABLE의 EXTENT설정 조회
- select table_name, initial_extent, min_extents from dba_tables
where owner = '유저명' and table_name = '테이블명'; - TABLESPACE의 EXTENT설정 조회
- select tablespace_name, block_size, initial_extent, min_extents from dba_tablespaces
where tablespace_name = '테이블스페이스명'; - >>Index<<
- PARTITIONED TABLE
- LIST 분할
- create table table_name (column_1 type( ), column_2 type( ) ... )
partition by list (column_2) (
partition partition_name values ('value_1') tablespace tablespace_name,
partition partition_name values ('value_2') tablespace tablespace_name); - multi column partition 지원 안함
NULL 값 지정 가능, MAXVALUES 지정 불가
list 를 구성하는 문자열은 4k 초과 불가 - PARTITIONED TABLE 조회
- select table_owner, table_name, partition_name, tablespace_name from dba_tab_partitions where table_owner = '유저명';
- TABLE의 PARTITION 여부 조회
- select owner, table_name, partitioned from dba_tables where owner = '유 저명';
- PARTITION 관리
- alter table 테이블명 add partition partition_name values ('value') tablespace tablespace_name;
- alter table 테이블명 drop partition partition_name;
- RANGE 분할
- create table table_name (column_1 type( ), column_2 type( ) ... )
partition by range (column_2) (
partition partition_name values less than (value_1),
partition partition_name values less than (value_2),
partition partition_name values less than ( MAXVALUE ) ); - HASH 분할
- create table table_name (column_1 type( ), column_2 type( ) ... )
partition by hash (column_2)
partitions integer store in (tablespace_name, tablespace_name); - >>Index<<
- DEFERRED CONSTRAINTS
- 문법
- CREATE TABLE table_name (column_1 type( ), column_2 type ( ), ...
CONSTRAINT constraint_name constraint_type (column)
[ NOT DEFERRABLE | DEFERRABLE [ INITIALLY [ IMMEDIATE | DEFERRED ]]]); - 지연된 제약조건 활성화
- ALTER SESSION SET CONSTRAINTS = [ IMMEDIATE | DEFERRED | DEFAULT ]
- >>Index<<
- USER
- USER 생성
- create user 유저명 identified by 패스워드
default tablespace 테이블스페이스명
temporary tablespace 임시테이블스페이 스명
quota integer [M] on 유저명; - USER 변경
- alter user 유저명 identified by 패스워드
default tablespace 테이블스페이스명
temporary tablespace 임시테이블스페이 스명
quota integer [M] on 유저명
[ password expire ]; - USER 의 TABLESPACE 할당량 조회
- select * from dba_ts_quotas;
- >>Index<<
- PROFILE
- PROFILE 조회
- select distinct profile from dba_profiles;
- USER 의 PROFILE 조회
- select username, profile from dba_users;
- PROFILE 생성
- create profile profile_name limit
제한사항 value 제한사항 value ... ; - PROFILE 적용
- alter user 유저명 profile profile_name;
- PARAMETER 'resource_limit' 의 값이 TRUE로 설정되어 있어야 함
- >>Index<<
- PRIVILEGES
- 권한 부여 / SYSTEM PRIVS
- grant 권한 to 유저명
[ with admin option ]; - 권한 부여 / OBJECT PRIVS
- grant 권한 on 개체 to 유저명
[ with grant option ]; - 권한 조회
- select * from dba_sys_privs where grantee like '유저명';
- GRANT 조회 / TABLE
- select * from all_tab_privs where table_name = '테이블명';
- 권한 취소 / SYSTEM PRIVS
- revoke 권한 from 유저명;
- 권한 취소 / OBJECT PRIVS
- revoke 권한 on 개체 from 유저명;
- >>Index<<
- ROLE
- ROLE 의 PRIVS 조회
- select * from dba_sys_privs where grantee = 'role_name';
- ROLE 생성
- create role role_name;
- ROLE 에 SYSTEM PRIVS 부여
- grant privs_name to role_name;
- ROLE 에 OBJECT PRIVS 부여
- grant privs_name on 개체 to role_name;
- DEFAULT ROLE 지정
- alter user user_name default role role_name;
- ROLE 활성화
- set role role_name;
- set role all;
- ROLE 조회
- select * from session_roles;
- >>Index<<
- EXPORT
- 문법
- ]$ exp username/passwd option=(value1, value2, ... ) option=value ...
- OPTION
- file: 백업 파일명 지정 (default : expdat.dmp)
- rows: 테이블의 row의 포함 여부 지정
- full: 전체 DB에 대한 익스포트 지정
- owner: 익스포트할 사용자 지정 (사용자모드)
- table: 익스포트할 테이블 지정 (테이블모드)
- tablespace: 익스포트할 테이블스페이스 지정 (T/S 모드)
- inctype: 전체 백업 레벨 지정 (8i까지만 사용됨)
- indexes: 인덱스 익스포트 지정
- full, owner, table, tablespace 는 동시 사용 불가
- 익스포트시 sys로 작업은 지양 (dictionary data까지 포함되므로)
- >>Index<<
- IMPORT
- 문법
- ]$ imp username/passwd option=(value1, value2, ... ) option=value ...
- OPTION
- file: 입력 파일명 지정
- ignore: 임포트 실행중 입력 오류 무시
- rows: 테이블의 row의 포함 여부 지정
- full: 전체 DB에 대한 임포트트 지정
- fromuser: 익스포트된 객체를 소유한 사용자중 임포트 대상이 되는 사용자
- touser: 임포트할 대상이 되는 사용자
- table: 임포트할 테이블 지정
- tablespace: 임포트할 테이블스페이스 지정
- 임포트 작업시 실행 순서 : 새로운 테이블생성 / 데이터 입력, 인덱스 리빌드 / 제약조건 활성화
- >>Index<<
- DIRECT LOAD
- DIRECT LOAD SAMPLE
- sample.ctl
LOAD DATA INFILE * INTO TABLE table_name
FIELDS TERMINATED BY ',' (column1, column2, column3)
BEGINDATA
111,aa,95
112,ab,86
...
... - ]$ sqlldr username/passwd sample.ctl
- >>Index<<
- ORACLE NET / HOST NAMING
- HOST NAMING
- port 번호등의 정보를 Client에게 제공하지 않음
다수의 DB를 운용하는 경우는 사용할 수 없음
GLOBAL_DBNAME 은 되도록이면 도메인 형식을 사용
(호스트명만 기입시 Windows Client 에서만 이용가능) - SERVER 설정 / LINUX
- $ORACLE_HOME/network/admin/listener.ora
- ora10g =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1521))
- )
- SID_LIST_ora10g =
- (SID_LIST =
- (SID_DESC = (GLOBAL_DBNAME = ora10g.xxx.xxx)
- (ORACLE_HOME = /app/ora10g/10g)
- (SID_NAME = DB09)
- )
- )
- LISTENER 구동
- ]$ lsnrctl start ora10g
- CLIENT 설정 / WINDOWS
- GLOBAL_DBNAME 으로 ping이 되는지 확인, 필요시 hosts나 DNS에 등록
- %ORACLE_HOME%\network\admin\sqlnet.ora
- SQLNET.AUTHENTICATION_SERVICES= (NTS)
- NAMES.DIRECTORY_PATH= (HOSTNAME)
- C:\>sqlplus username/passwd@ora10g.xxx.xxx
- CLIENT 설정 / LINUX
- GLOBAL_DBNAME 으로 ping이 되는지 확인, 필요시 hosts나 DNS에 등록
- $ORACLE_HOME/network/admin/sqlnet.ora
- NAMES.DIRECTORY_PATH= (HOSTNAME)
- ]$ sqlplus username/passwd@ora10g.xxx.xxx
- >>Index<<
- ORACLE NET / LOCAL NAMING
- LOCAL NAMING
- port 번호등 서버정보를 Client가 가지고 있음
- SERVER 설정 / LINUX
- $ORACLE_HOME/network/admin/listener.ora
- ora10g =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1521))
- )
- SID_LIST_ora10g =
- (SID_LIST =
- (SID_DESC = (ORACLE_HOME = /app/ora10g/10g)
- (SID_NAME = DB09)
- )
- )
- 다수의 DB가 존재 할 경우 각 DB의 listner port번호는 다르게 설정한다
- LISTENER 구동
- ]$ lsnrctl start ora10g
- 각각의 DB에 해당하는 listener.ora 파일을 생성하고 listener를 각각 구동한다
- CLIENT 설정 / NAMES.DEFAULT_DOMAIN 미설정 시
- sqlnet.ora
- NAMES.DIRECTORY_PATH= (TNSNAMES)
- tnsnames.ora
- ora9i =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1529))
- (CONNECT_DATA = (SID = DB09))
- )
- ora10g =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1521))
- (CONNECT_DATA = (SID = DB10))
- )
- ]$ sqlplus username/passwd@ora10g
]$ sqlplus username/passwd@ora9i - CLIENT 설정 / NAMES.DEFAULT_DOMAIN 설정 시
- TCP/IP 에서의 DOMAIN과 관계 없음
- sqlnet.ora
- NAMES.DEFAULT_DOMAIN= webdb.co.kr
- NAMES.DIRECTORY_PATH= (TNSNAMES)
- tnsnames.ora
- ora9i.webdb.co.kr =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1529))
- (CONNECT_DATA = (SID = DB09))
- )
- ora10g.webdb.co.kr =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1521))
- (CONNECT_DATA = (SID = DB10))
- )
- ]$ sqlplus username/passwd@ora10g
]$ sqlplus username/passwd@ora9i
]$ sqlplus username/passwd@ora10g.webdb.co.kr - >>Index<<
- DATABASE 생성 / 9i
- ENV CHECK
- ]$ env | grep ORACLE
- 기존 파일 삭제
- $ORACLE_BASE/oradata/
$ORACLE_BASE/admin/$ORACLE_SID/ - PARAMETER FILE 편집
- $ORACLE_HOME/dbs/initSID_name.ora
- DB 생성
- createdb.sql
- CREATE DATABASE $ORACLE_SID
- LOGFILE
- GROUP 1 ('$ORACLE_BASE/oradata/disk4/redo01.log') size 1M,
- GROUP 2 ('$ORACLE_BASE/oradata/disk4/redo02.log') size 1M,
- GROUP 3 ('$ORACLE_BASE/oradata/disk4/redo03.log') size 1M
- MAXLOGFILES 5
- MAXLOGMEMBERS 5
- MAXDATAFILES 100
- DATAFILE
- '$ORACLE_BASE/oradata/disk3/system01.dbf' size 300M
- EXTENT MANAGEMENT LOCAL
- UNDO TABLESPACE undo DATAFILE
- '$ORACLE_BASE/oradata/disk3/undo01.dbf' size 10M
- DEFAULT TEMPORARY TABLESPACE temp TEMPFILE
- '$ORACLE_BASE/oradata/disk3/temp01.dbf' size 10M
- CHARACTER SET KO16KSC5601
- ;
- @$ORACLE_HOME/rdbms/admin/catalog.sql
- @$ORACLE_HOME/rdbms/admin/catproc.sql
- conn system/manager;
- @$ORACLE_HOME/sqlplus/admin/pupbld.sql
- ]$ sqlplus '/as sysdba'
SQL> startup nomount
SQL> @createdb.sql - >>Index<<
- DATABASE 생성 / 10g
- ENV CHECK
- ]$ env | grep ORACLE
- 기존 파일 삭제
- $ORACLE_BASE/oradata/
$ORACLE_BASE/admin/$ORACLE_SID/ - PARAMETER FILE 편집
- $ORACLE_HOME/dbs/initSID_name.ora
- DB 생성
- createdb.sql
- CREATE DATABASE $ORACLE_SID
- LOGFILE
- GROUP 1 ('$ORACLE_BASE/oradata/disk4/redo01.log') size 4M,
- GROUP 2 ('$ORACLE_BASE/oradata/disk4/redo02.log') size 4M,
- GROUP 3 ('$ORACLE_BASE/oradata/disk4/redo03.log') size 4M
- MAXLOGFILES 5
- MAXLOGMEMBERS 5
- MAXDATAFILES 100
- DATAFILE
- '$ORACLE_BASE/oradata/disk3/system01.dbf' size 300M
- EXTENT MANAGEMENT LOCAL
- SYSAUX DATAFILE
- '$ORACLE_BASE/oradata/disk3/sysaux01.dbf' size 200M
- UNDO TABLESPACE undo DATAFILE
- '$ORACLE_BASE/oradata/disk3/undo01.dbf' size 10M
- DEFAULT TEMPORARY TABLESPACE temp TEMPFILE
- '$ORACLE_BASE/oradata/disk3/temp01.dbf' size 10M
- CHARACTER SET KO16KSC5601
- ;
- @$ORACLE_HOME/rdbms/admin/catalog.sql
- @$ORACLE_HOME/rdbms/admin/catproc.sql
- conn system/manager;
- @$ORACLE_HOME/sqlplus/admin/pupbld.sql
- ]$ sqlplus '/as sysdba'
SQL> startup nomount
SQL> @createdb.sql - >>Index<<
- ARCHIVE LOG MODE
- DB 종료
- SQL> shutown immediate
- Parameter File 수정
- log_archive_start = true
- log_archive_dest = destination
- log_archive_format = %S.arc
- 다수의 아카이빙
- log_archive_duplex_dest = destination
- log_archive_min_succed_dest = [ 1 | 2 ]
- log_archive_dest_# = "location = destination"
- log_archive_dest_# = "service = tnsname"
- DB 기동 / 아카이브 모드 변경
- SQL> startup mount
SQL> alter database archivelog; SQL> startup open - 아카이브 모드 확인 후 Close Backup
SQL> archive log list
피드 구독하기:
글 (Atom)