'Know/DATABASE'에 해당되는 글 13건

  1. 2015.05.11 MySQL Yum Repository
  2. 2011.03.09 MySql Maximum table size
  3. 2011.02.08 MYSQL Event Scheduler
  4. 2009.04.30 IDENTITY_INSERT
  5. 2007.07.19 SQL 서버 관리자가 알아야 할 11가지 유용한 팁
  6. 2006.10.20 [mssql] 복구 스크립트
  7. 2006.09.09 DB2 HADR 문서
  8. 2006.07.13 DB2 JDBC TYPE
  9. 2006.07.12 JDBC FAILOVER 구현예제
  10. 2006.02.15 rollup

MySQL Yum Repository

Know/DATABASE 2015.05.11 14:15

Mysql을 Yum으로 설치시 아래 문서를 참고하여 Yum Repository를 업데이트한 후 설치.


http://dev.mysql.com/doc/mysql-repo-excerpt/5.6/en/linux-installation-yum-repo.html

'Know > DATABASE' 카테고리의 다른 글

MySQL Yum Repository  (0) 2015.05.11
MySql Maximum table size  (0) 2011.03.09
MYSQL Event Scheduler  (0) 2011.02.08
IDENTITY_INSERT  (0) 2009.04.30
SQL 서버 관리자가 알아야 할 11가지 유용한 팁  (0) 2007.07.19
[mssql] 복구 스크립트  (0) 2006.10.20
Trackbacks 0 : Comments 0

MySql Maximum table size

Know/DATABASE 2011.03.09 15:51

mysql의 테이블 사이즈 제한은 OS의 파일사이즈 제한에 따라 결정되지만,
mysql innodb 엔진을 사용할 경우 최대 64TB까지 테이블스페이스를 늘릴 수 있다.


Operating System File-size Limit
Win32 w/ FAT/FAT32 2GB/4GB
Win32 w/ NTFS 2TB (possibly larger)
Linux 2.2-Intel 32-bit 2GB (LFS: 4GB)
Linux 2.4+ (using ext3 file system) 4TB
Solaris 9/10 16TB
MacOS X w/ HFS+ 2TB
NetWare w/NSS file system 8TB


자세한 내용은 아래의 URL을 참조

http://dev.mysql.com/doc/refman/5.1/en/full-table.html
http://dev.mysql.com/doc/refman/5.1/en/innodb-data-log-reconfiguration.html

'Know > DATABASE' 카테고리의 다른 글

MySQL Yum Repository  (0) 2015.05.11
MySql Maximum table size  (0) 2011.03.09
MYSQL Event Scheduler  (0) 2011.02.08
IDENTITY_INSERT  (0) 2009.04.30
SQL 서버 관리자가 알아야 할 11가지 유용한 팁  (0) 2007.07.19
[mssql] 복구 스크립트  (0) 2006.10.20
Trackbacks 0 : Comments 0

MYSQL Event Scheduler

Know/DATABASE 2011.02.08 12:36
MYSQL 5.1.6 버전부터 Event Scheduler 기능을 제공한다.

이벤트의 실행과 스케쥴링을 관리하며, 스케쥴에 따라 일련의 작업들을 실행시킨다.
MSSQL의 JOB 스케쥴러 같은 기능이라 생각하면 될것 같다. 메뉴얼에는 cronjob과 같은 기능이라고 소개되어 있다.

기능면으로는 아직 부족한 부분이 많이 보이지만, 이전버전보다 확실히 편리한 면이 많아진건 사실.

Event scheduler thread의 상태를 보려면 show processlist 로 확인할 수 있다.
기능을 사용하려면 global변수인 event_scheduler 시스템환경 변수를 on으로 설정하여야 가능하다.

CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;

schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}


좀더 자세한 사항은 아래의 dev사이트에서
http://dev.mysql.com/doc/refman/5.1/en/events.html



'Know > DATABASE' 카테고리의 다른 글

MySQL Yum Repository  (0) 2015.05.11
MySql Maximum table size  (0) 2011.03.09
MYSQL Event Scheduler  (0) 2011.02.08
IDENTITY_INSERT  (0) 2009.04.30
SQL 서버 관리자가 알아야 할 11가지 유용한 팁  (0) 2007.07.19
[mssql] 복구 스크립트  (0) 2006.10.20
Trackbacks 0 : Comments 0

IDENTITY_INSERT

Know/DATABASE 2009.04.30 09:28



명시적 값을 테이블의 ID열에 삽입할 때 사용된다.


아래는 SQL 2005 Online BOOK 내용

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }

언제든지 세션에서 한 테이블의 IDENTITY_INSERT 속성만 ON으로 설정할 수 있습니다. 한 테이블에 이 속성이 ON으로 설정되어 있는데 다른 테이블에 대해 SET IDENTITY_INSERT ON 문을 실행하면 SQL Server 2005 는 SET IDENTITY_INSERT가 이미 ON으로 설정되어 있음을 알리고 ON으로 설정된 테이블을 보고하는 오류 메시지를 반환합니다.

테이블의 현재 ID 값보다 큰 값을 삽입하면 SQL Server 는 자동으로 새로 삽입한 값을 현재 ID 값으로 사용합니다.

SET IDENTITY_INSERT 옵션은 실행 시간 또는 런타임에 설정되며, 구문 분석 시에는 설정되지 않습니다.





'Know > DATABASE' 카테고리의 다른 글

MySql Maximum table size  (0) 2011.03.09
MYSQL Event Scheduler  (0) 2011.02.08
IDENTITY_INSERT  (0) 2009.04.30
SQL 서버 관리자가 알아야 할 11가지 유용한 팁  (0) 2007.07.19
[mssql] 복구 스크립트  (0) 2006.10.20
DB2 HADR 문서  (0) 2006.09.09
Trackbacks 0 : Comments 0

SQL 서버 관리자가 알아야 할 11가지 유용한 팁

Know/DATABASE 2007.07.19 09:38
[ 출처: database.sarang.net ]

SQL 서버 관리자가 알아야 할 11가지 유용한 팁



1. 데이터베이스의 모든 테이블 행을 가장 빨리 세는 방법



SQL 서버 데이터베이스 내에 존재하는 시스템 테이블 'sysindexes'에는 'rows'란 컬럼이 존재한다. 이 컬럼은 테이블에 반영된 행들의 수를 갖고 있다. 다음 SQL문을 실행시키면 원하는 결과를 효과적으로 얻을 수 있을 것이다.

select o.name, rows
from sysobjects o inner join sysindexes i on o.id = i.id
where i.indid < 2
order by o.name
where 절의 "indid<2" 부분은 클러스터드 인덱스(clustered index) 또는 힙(heap) 정보를 찾지 않기 위함이다. 이 결과는 실제로 트랜잭션(transaction)이 일어난 행만 카운트한다.



2. 스토어드 프로시져에 대한 파라미터로 테이블 이름을 사용하는 방법



이것을 위해서는 동적인 SQL을 사용해야 한다. 다음 스크립트를 참조하기 바란다.

Create proc dbcc_table
@tabname varchar(30)
as
BEGIN
Exec ("dbcc checktable (" + @tabname + ")")
END
go

/*** 스토어드 프로시져를 테스트하려면 ***/
dbcc_table syslogs


3. 모든 테이블을 BCP 하기 위한 스크립트 작성 방법

Select "bcp " + db_name() + ".." + name +
" out c:\temp" + name + ".txt /c -t\t -SserverName -UuserID -Ppassword
/b1000"
from sysobjects
where type = "U"
order by name
위의 예는 모든 데이터베이스 객체가 데이터베이스 오우너(owner) 또는 DBO에 의해 소유되었다는 가정 아래 작성되었다. 위의 예는 윈도 커맨드 파일 또는 배치 파일로 저장하여 실행할 수 있는 스크립트를 만들 것이다. 결과물은 탭 구분자로 분리된 텍스트가 될 것이다.



BCP(Bulk Copy Program)에 대한 파라미터에 대해 좀 더 알기 원하면 Books Online에서 BCP를 찾아 보거나, 커맨드 윈도우에서 BCP /?를 실행시켜 보기 바란다.



원한다면 ISQL에서 xp_cmdshell과 함께 실행시킬 수도 있다. 파일 경로에서 나타난 드라이브 문자는 서버에 있는 것이지 클라이언트 PC에 있는 것이 아님을 기억하기 바란다.



위의 스크립트에서 /b 옵션을 준 것을 기억하라. 만일 이 옵션을 사용하지 않으면 대량의 파일을 데이터베이스로 복사할 때 하나의 작업으로 처리하게 된다. 하지만 "/b 1000" 옵션을 사용함으로써 1000라인의 트랜잭션 단위로 작업을 나누어 하게 된다.



4. 어떤 파일이 디스크 상에 존재하는지 조사하는 방법



서버 상에서 파일 정보를 얻으려면 다음과 같이 xp_getfiledetails란 확장 스토어드 프로시져를 사용하면 된다.

Master..xp_getfiledetails "c:\mssql\binn\sqlservr.exe"
5. 남은 디스크 공간을 알아내는 방법



서버에 남아있는 디스크 공간을 알아내려면 다음과 같이 xp_fixeddrives란 확장 스토어드 프로시져를 사용하면 된다. 만일 SQL 서버 6.5에서 실행한다면 Bytes free 컬럼의 실제 단위는 Bytes가 아니라 Megabytes free임을 조심해야 한다.

Master..xp_fixeddrives
6. 리모트 상에서 서버 셧다운(shut down) 시키는 방법



윈도 NT 리소스 킷(Resource Kit)을 보면 shutdown과 shutgui란 두 개의 유틸리티가 있는게 이 유틸리티들을 활용하면 된다. 조심해야할 것은 서버를 바로 재부팅하는 것이 디폴트 옵션이 아니라는 것이다. 만일 이 옵션을 잘못 설정했다면 결국 서버를 작동시키기 위해 서버가 있는 기계쪽으로 가야만 할 것이다.



7. SQL 서버의 자세한 버전 정보를 보는 방법



다음과 같이 xp_msver 스토어드 프로시져를 사용하면 된다.

Master..xp_msver
이 스토어드 프로시져에 대한 MSDN 자료를 보고 싶다면 아래 링크를 클릭하기 바란다.



Master..xp_msver 자세히 보기 - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_xp_aa-sz_0o4y.asp



8. SQL 서버 이벤트 로그 순환시키는 방법



SQL 서버를 관리하다 보면 이벤트 로그 사이즈가 겉잡을 수 없이 커지게되는 것을 볼 수 있다. 많은 사람들은 이 문제를 햐결하기 위해 SQL 서버를 멈췄다가 다시 시작하곤 한다. 하지만 다음과 같이 dbcc errorlog를 이용하면 이 문제를 쉽게 해결할 수가 있다.



dbcc errorlog



이 명령어는 문서화되어 있지 않은 명령어이다. 그렇기 때문에 이 명령어를 사용할 경우 책임은 전적으로 사용자에게 있게 됨을 주의하도록 하자.



9. 서버 레지스트리 값을 읽는 방법



확장 스토어드 프로시져인 XP_REGREAD를 이용하면 서버의 레지스트리 값을 읽어낼 수가 있다. 다음 예는 NT 4 서비스 팩 버전 정보를 레지스트리로부터 읽어 표시하는 예이다.

master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion',
@value_name = 'CSDVersion'
10. 스토어드 프로시져를 자동으로 실행하게 하는 방법



SQL 서버가 기동될 때마다 자동으로 하나 이상의 스토어드 프로시져를 작동시키고 싶은 경우들이 있다. 예상치 않게 서버가 재부팅됐다거나 SQL 서버가 시작될 때 특정 프로세스를 실행해야할 경우 유용하게 사용할 수가 있을 것이다.



SQL 서버 6.5에서는 master 데이터베이스에 해당 스토어드 프로시져를 저장한 후 다음과 같은 명령을 실행시키면 된다:

sp_makestartup "procedure_name"
SQL 서버 7 또는 2000에서는 대신 sp_procoption 스토어드 프로시져를 사용하면 된다. 이에 대한 자세한 사항은 다음 msdn 자료를 참조하기 바란다.



sp_procoption 설명 보기 : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_pa-pz_95m6.asp



11. 백업하지 않은 데이터베이스 복구시키는 방법



물론 정기적으로 데이터베이스 백업을 점검하고 테스트하는 관리자라면 이 팁은 무시해도 된다.



하지만 어떤 경우 백업을 하지 않아 데이터를 복원할 때 난감해하는 사람이 있을지도 모르겠다. 이럴 경우 .LDF(로그 파일)와 .MDF 파일을 스토어드 프로시져를 이용하여 SQL 서버에 다시 어태치(attach)시킴으로써 데이터를 종종 복원시킬 수도 있다. 항상 가능한 것은 아니지만 안해보는 것보단 나을 것이다.



이와 관련된 스토어드 프로시져는 sp_attach_db이다. 이 스토어드 프로시져에 대한 자세한 설명은 다음 msdn 자료를 참조하기 바란다.



sp_attach_db 설명 보기 : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ae-az_52oy.asp

'Know > DATABASE' 카테고리의 다른 글

MYSQL Event Scheduler  (0) 2011.02.08
IDENTITY_INSERT  (0) 2009.04.30
SQL 서버 관리자가 알아야 할 11가지 유용한 팁  (0) 2007.07.19
[mssql] 복구 스크립트  (0) 2006.10.20
DB2 HADR 문서  (0) 2006.09.09
DB2 JDBC TYPE  (0) 2006.07.13
Trackbacks 0 : Comments 0

[mssql] 복구 스크립트

Know/DATABASE 2006.10.20 14:31
EXEC sp_attach_single_file_db 'maildbktf', 'D:\enomix5.3_KTCHAT\dbf\maildbktf_sys.mdf'
EXEC sp_attach_single_file_db 'selfdbktf', 'D:\enomix5.3_KTCHAT\dbf\selfdbktf_sys.mdf'

USER LOGIN 변경

EXEC sp_change_users_login 'Update_One', 'selfktf', 'selfktf'

'Know > DATABASE' 카테고리의 다른 글

IDENTITY_INSERT  (0) 2009.04.30
SQL 서버 관리자가 알아야 할 11가지 유용한 팁  (0) 2007.07.19
[mssql] 복구 스크립트  (0) 2006.10.20
DB2 HADR 문서  (0) 2006.09.09
DB2 JDBC TYPE  (0) 2006.07.13
JDBC FAILOVER 구현예제  (0) 2006.07.12
Trackbacks 0 : Comments 0

DB2 HADR 문서

Know/DATABASE 2006.09.09 00:19
http://www-8.ibm.com/software/data/db2/kr/migration/db2hadr.html

'Know > DATABASE' 카테고리의 다른 글

SQL 서버 관리자가 알아야 할 11가지 유용한 팁  (0) 2007.07.19
[mssql] 복구 스크립트  (0) 2006.10.20
DB2 HADR 문서  (0) 2006.09.09
DB2 JDBC TYPE  (0) 2006.07.13
JDBC FAILOVER 구현예제  (0) 2006.07.12
rollup  (0) 2006.02.15
Trackbacks 0 : Comments 0

DB2 JDBC TYPE

Know/DATABASE 2006.07.13 16:13
[데이타베이스사랑점넷 에서 펌!]

미리 찾아봤더라면 좋았을껄...
삽질3시간의 댓가를 치르다..-_-;;




아래와 같이 odbc로 연결할때는 접속도 잘되고 데이터도 잘 받아오고 있습니다.
근데 JDBC로 접속을 시도하면 드라이버까지는 등록되는데 그뒤로는 아무런
응답도 없고 멈춰 있습니다.
IP와 PORT DATABASE 이름은 JDBC와 ODBC 동일하게 세팅하였습니다.
JDBC 드라이버는 db2java.zip 으로 7버전과 8버전 두가지로 테스트 해봤습니다.
서버에서 JDBC드라이버를 꼭 받아와서 세팅해야 하나요?
현제 서버 관리자와 연락이 닿기가 너무 힘들어서요...
벌써 몇일째 삽질하고 있습니다.
DB2 아시는 분은 도와 주세요.
ㅠㅠ


import java.sql.*;
import java.util.*; //등록된 드라이버를 확인하기 위함 (안써도 됨)
import java.lang.*;

public class MT1 {
public static void main(String[]args)
{
Connection con=null;
Statement stmt;
System.out.println("드라이버를 로드시작 합니다");
try{
Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();
/* ODBC 연결 드라이버 */

//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

System.out.println("드라이버 등록 완료!");
Enumeration m=DriverManager.getDrivers();
System.out.println("등록된 드라이버는 ");
while(m.hasMoreElements())
{
System.out.println("name: "+m.nextElement());//예외발생하면예외발생한드라이버명을표시
}
}catch(Exception e) {
System.out.println("드라이버가 없거나 오류입니다.");
Enumeration m=DriverManager.getDrivers();
System.out.println("등록된 드라이버는 ");
while(m.hasMoreElements())
{
System.out.println("name: "+m.nextElement());//예외발생하면예외발생한드라이버명을표시
}
}
//1.드라이버를 드라이버매니저에 등록하는 부분...(종료)
try{
String URL = "jdbc:odbc:DB2";
String user = "kimjj";
String pass = "12qwaszx";

//con = DriverManager.getConnection("jdbc:odbc:DB2","kimjj","12qwaszx");
con = DriverManager.getConnection("jdbc:db2://158.98.108.114:50000/TSD621AI","kimjj","12qwaszx");
if(con!=null) System.out.println("DB2 연결됨");

stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select problem_code from TSD621AI.PROBLEM_VIEW");

while(rs.next()){
String tt = rs.getString(1);
System.out.println(tt);
}
}catch(Exception ex){System.out.println("연결안됨:"+ex);}//db서버가 꺼져있거나
}
}




이 글에 대한 댓글이 총 3건 있습니다.

DB2 v8 기준으로 말씀드리겠습니다.



v8 이전의 JDBC driver을 DB2 JDBC drvier라고 하고,

v8 이후에 새롭게 추가된 JDBC driver를 Universal JDBC driver라고 명명하고 설명합니다.

v8 이상에서는 Universal JDBC Driver를 사용할 것을 권장합니다.



Class files

- db2java.zip : DB2 JDBC Type 2 and Type 3 Driver

- db2jcc.jar : Universal Type 2 and Type 4 Driver

License jar files (Universal JDBC driver를 사용할 때 필요)

- db2jcc_license_cu.jar : for connecting DB2 v8 for LUW

- db2jcc_license_cisuz.jar : for connecting DB2 for iSeries and z/OS

JDBC Drvier class name

- DB2 JDBC Type 2 Driver : COM.ibm.db2.jdbc.app.DB2Driver

- DB2 JDBC Type 3 Driver : COM.ibm.db2.jdbc.net.DB2Driver

- Universal JDBC Type 2 Driver : com.ibm.db2.jcc.DB2Driver

- Universal JDBC Type 4 Driver : com.ibm.db2.jcc.DB2Driver

JDBC url name

- DB2 JDBC Type 2 Driver : jdbc:db2:db_name

- DB2 JDBC Type 3 Driver : jdbc:db2://host_name:port_name/db_name

- Universal JDBC Type 2 Driver : jdbc:db2:sample

- Universal JDBC Type 4 Driver : jdbc:db2://host_name:port_name/db_name



Sample program


import java.sql.*;
Connection con;
Statement stmt;
ResultSet rs;
Class.forName(“com.ibm.db2.jcc.DB2Driver”);
con = DriverManager.getConnection(“db2:jdbc://server1:50000/sample”);
stmt = con.createStatement();
rs = stmt.executeQuery(“select EMPNO from EMPLOYEE”);
while (rs.next()) {
s = rs.getString(1);
}
rs.close();
stmt.close();
con.close();


DB2 and JAVA Developer Domain

http://www7b.boulder.ibm.com/dmdd/zones/java/



도움이 되시길 바랍니다.







이정권(jkwonl)님이 2005-10-28 23:01:07에 작성한 댓글입니다.V8 JDBC는 위에 글에 자세히 설명되어 있으니 참조하세요.

db2의 JDBC DRIVER type에는 4가지 type이 있습니다.

님께서 처음에 odbc로 연결할때 사용하셨다는 driver는

type1 driver로 JDBC-ODBC bridge driver라고 합니다. 이 것은 odbc conversion때문에 사용하지만 일반적으로 사용되지는 않습니다. 그다음에 테스트하신 driver는

type 3 driver로 일반적으로 net driver라고 부릅니다.

db2 V7까지는 사용되었습니다. 하지만 V8부터 type4 driver가 지원되면서 거의 사용하지는 않습니다.

type 4 driver가 일반적으로 말하면 jdbc thin driver라고 할수 있습니다. 순수 자바로 구현되어 있습니다.

db2 V7까지는 type 4 driver가 지원하지 않았기 때문에 일반적으로 type 2 driver를 사용하였고 그다음에 type 3 driver를 사용하였습니다.

type 2 driver는 app driver라고 합니다. type 2 driver는 클라이언트에 db2 client 를 설치하고 서버 db와 카탈로그를 설정한 상태에서 사용하는 방식입니다.

위의 소스에서 님께서 테스트하다가 실패하신 방식은 type 3 driver방식입니다. 하지만 이방식은 먼저 선행 작업이 서버에서 이루어 져야 합니다.

서버에서 db2jd라는 프로세스가 구동되어야 합니다.

db2jstrt 포트번호

라고 치면 db2jd라는 프로세스가 설정한 포트번호를 가지고 구동을 합니다.

그러면 net driver에서 그포트번호로 연결을 하셔야 합니다.

예) db2strt 51000

jdbc:db2://158.98.108.114:51000/TSD621AI

그리고 클라이언트의 db2jdbc.zip은 서버의 jdbc driver와 버젼이 일치하여야 합니다. 만일 db 서버가 db2 v8이면 위의 글과 같은 type 4 driver를 사용하시고 v7이면 type 4를 사용하시지 못하기 때문에 type2나 type3를 사용하시면 됩니다.

'Know > DATABASE' 카테고리의 다른 글

[mssql] 복구 스크립트  (0) 2006.10.20
DB2 HADR 문서  (0) 2006.09.09
DB2 JDBC TYPE  (0) 2006.07.13
JDBC FAILOVER 구현예제  (0) 2006.07.12
rollup  (0) 2006.02.15
IBM WebSphere 5.0 데이타베이스 연결 설정법  (0) 2005.06.23
Trackbacks 0 : Comments 0

JDBC FAILOVER 구현예제

Know/DATABASE 2006.07.12 14:04
[출처: http://blog.naver.com/jaegoan/30002390193 ]

java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection

No. 19100

JDBC Thin driver 사용시 connect time fail-over 지정 방법 (JDBC 8.1.7이상)
==========================================================================

PURPOSE
-------

JDBC Thin driver를 통해 오라클에 접속하는 경우, 기본적으로 hostname
(혹은 ip address)와, 데이타베이스의 SID를 이용하여 접속하게 된다.

이러한 방식으로는, OPS/RAC 환경에서 jdbc thin 방식을 통해, connect time시
fail-over가 불가능하게 된다.

이 문서에서는 JDBC Thin방식을 사용하면서, connect-time을 구현하기 위한
방법을 설명한다.

[주의] 단 이것은 이미 연결된 session이 fail시 자동으로 다른 instance로
자동 연결되어 session의 끊김 현상을 피하게 해주는 TAF (Transparent
Application Failover)에 대한 것은 아니다. JDBC Thin에서는 TAF를
지원하지 못한다.


Explanation & Example
---------------------

다음 순서대로 설정한다. 아래의 지정 방법을 살펴보면 1번 ~ 3번까지는
일반적인 connect time fail-over구현을 위해 필요한 방법이고, 결국 4번이
내용이 jdbc thin을 위해 추가된 것이다.

이것은 Oracle 8.1.7/jdbc 8.1.7을 이용하여 test되었으며, OPS환경이고
각 instance의 hostname은 krtest1, krtest2로 가정하고, 각 listener의
port는 1521을 사용한다고 가정한다. db name은 TESTDB로 가정한다.


1. initial prameter 지정

다음과 같이 두개의 instance 각각에 local_listener와 service_names를
지정하여, listener에 대해 dynamic service registration이 가능하도록 한다.
local_listener는 listener.ora에 정의된 listener정보를 다음과 같이 직접
적거나, 혹은 이 정보를 tnsnames.ora에 지정후 해당 listener alias를
적어도 된다.

service_names는 콤마(,)로 구분하여 복수개를 지정하여도 되면 단 두
instance가 다음과 같이 공통된 값을 최소한 하나는 가지도록 한다.
일반적으로 default값이 db_name과 같은 값을 가지도록 하면 된다.

이 두 parameter는 $ORACLE_HOME/dbs/initSID.ora에 지정하거나, 9i이상에서
spfile을 사용하는 경우는 atler system 명령을 통해 지정하면 된다.


local_listener="(ADDRESS=(PROTOCOL=TCP)(HOST=krtest1)(PORT=1521))"
service_names=TESTDB

local_listener="(ADDRESS=(PROTOCOL=TCP)(HOST=krtest2)(PORT=1521))"
service_names=TESTDB


2. SQL*Net configuration

(1) client side의 tnsnames.ora

다음과 같이 tnsnames.ora에 connect-time failover를 위한 service alias를
지정한다. 여기서는 krtest1에 처음 접속을 시도하게 되고 krtest1이 down인
경우 krtest2로 접속하게 된다.

TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = krtest1)
(PORT = 1521))
(ADDRESS =
(PROTOCOL = TCP)
(HOST = krtest2)
(PORT = 1522)))
(CONNECT_DATA =
(SERVICE_NAME = TESTDB)))

(2) client side의 sqlnet.ora
앞의 tnsnames.ora에 TEST정의시 TEST.WORLD라고 하지 않았으므로 sqlnet.ora에도

names.default_domain = world

와 같은 지정이 있으면 지우거나 #으로 주석처리한다.

(3) server side의 listener.ora

listener.ora에는 sid_list_listener명 에 대한 부분은 포함시키지 않도록 한다.
sid_list_listener가 있으면 krtest1의 listener가 down된 경우에는 fail over가
되나 krtest1의 listener가 살아 있는 상태에서 krtest1의 instnace만 down된
상태에서는 connect-time fail over가 실패하게 된다.

즉, lsnrctl statue에 instance가 down되어도 sid에 대한 정보가 나타나게 되면서,
일단 krtest1에서 client의 request를 받아들이게 되고, 그 후에 해당 instance와
연결시키면서 instance가 down된것을 알게되어 오류가 발생하는 것이다.

그러나 sid_list_listener 부분을 제거하게 되면 krtest1의 instance가 down되면
lsnrctl status상에 해당 instnace의 service정보가 나타나지 않아 client의
connect request에 대해서 listner가 바로 instance가 down된것을 알고 krtest2로
넘기는 것이 가능하게 된다.


3. SQL*Plus 상에서 해당 service name (alias)를 이용하여 접속 확인

먼저 정상적으로 krtest1 쪽의 instance가 정상인경우 접속이 잘 되는지를
test해보고, 접속이 잘되면 이번에는 krtest1쪽의 instnace를 down시켜둔
상태에서 다시 같은 TEST alias를 이용하여 접속하여 자동으로 krtest2쪽으로
접속이 잘 되는지를 확인해 본다.

sqlplus scott/tiger@TEST



4. JDBC getConnection() 절 지정

(1)번의 기존 방식대신 (2)번과 같이 sqlplus상에서 사용된 tns descriptor를 그대로
이용하여 getConnection에 지정하면 된다.

(1) 기존 지정방법:
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@krtest1:
1521:TESTDB", "scott", "tiger");

(2) 변경된 지정 방법:
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTIO
N = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = krtest1) (PORT = 1521))
(ADDRESS = (PROTOCOL = TCP) (HOST = krtest2) (PORT = 1521))) (CONNECT_DATA =
(SERVICE_NAME = MIKE.us.oracle.com))) ", "scott", "tiger");


Reference Documents
-------------------

'Know > DATABASE' 카테고리의 다른 글

DB2 HADR 문서  (0) 2006.09.09
DB2 JDBC TYPE  (0) 2006.07.13
JDBC FAILOVER 구현예제  (0) 2006.07.12
rollup  (0) 2006.02.15
IBM WebSphere 5.0 데이타베이스 연결 설정법  (0) 2005.06.23
ERROR 2006 : MySQL server has gone away  (0) 2005.06.21
Trackbacks 0 : Comments 0

rollup

Know/DATABASE 2006.02.15 16:10
[출처: http://cafe.daum.net/oraclesqltuning]

해당 테이블명을 t,

각 컬럼명을 pname(품명), psize(규격), qty(수량), amount(금액) 이라고 하면,

아래와 같이 되겠네요.



SELECT pname_a, psize, qty, amount
FROM (SELECT pname, DECODE (psize, NULL, pname) pname_a, psize,
SUM (qty) qty, SUM (amount) amount,
MAX (SUM (amount)) OVER (PARTITION BY pname) sub_max
FROM t
GROUP BY pname, ROLLUP ((psize, qty)))
ORDER BY sub_max DESC, pname, amount DESC



=====================================================



--------------------------------------
품명 규격 수량 금액
--------------------------------------
사과 30 3900
대 10 1900
중 10 1000
소 10 1000
배 30 3500
대 10 1500
중 10 1000
소 10 1000
수박 30 3000
대 10 1000
중 10 1000
소 10 1000
-----------------------------------
이렇게 나타내고 싶습니다.

정렬순서는 소계의 금액순인것이 까다롭기에 질문올려봅니다.

SQL문 하나로 가능할까요?



원시데이터는 (품명, 규격,수량, 금액)입니다.

'Know > DATABASE' 카테고리의 다른 글

DB2 JDBC TYPE  (0) 2006.07.13
JDBC FAILOVER 구현예제  (0) 2006.07.12
rollup  (0) 2006.02.15
IBM WebSphere 5.0 데이타베이스 연결 설정법  (0) 2005.06.23
ERROR 2006 : MySQL server has gone away  (0) 2005.06.21
[MySQL] time out(wait_timeout) 계산과 설정  (0) 2005.06.21
Trackbacks 0 : Comments 0