본문 바로가기

[ DataBase ]51

[PostgreSQL] c# 연동 / 이미지저장 새프로젝트를 만들고 그림1과 같이 Nuget패키지관리자를 실행하자. 그림2와 같이 npgsql 을 검색해서 패키지를 설치하자. ( 이때 필요한 DLL 들이 전부 추가된다.) 설치를 누르면 그림3과 같이 필요한 내용들이 표시되고 설치되고 참조가 추가되게 된다. UI는 그림4와 같이 만들어줬다. using Npgsql; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namesp.. 2023. 3. 2.
[MySQL / MariaDB ] 테스트용 데이터 입력 WHILE CREATE DEFINER=`root`@`desktop` PROCEDURE `tproc`() BEGIN declare i int default 1; #i값 생성 while(i 2022. 10. 27.
[MySQL/MariaDB] 내DB 설치경로 확인하기 , 버전확인하기 show variables like 'datadir'; 위 쿼리문을 통해 현재 내 DB가 설치된 경로를 확인할 수 있다. select version(); 위쿼리를 통해 현재 버전을 확인할 수 있다. 2022. 10. 12.
[Oracle] ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다 오라클 12c부터는 공통계정앞에 c##을 붙이도록 네이밍 규칙이 바뀌습니다. C## 키워드가 붙는 이유는 12c 버전부터 등장하는 CDB, PDB 개념 때문이라고 합니다. 위와 같이 c## 을 붙여서 생성하면 제대로 생성이 됩니다. 하지만 권한을 주거나 접속할때도 모두 c## 을 붙여야 되서 상당히 귀찬은데 세션을 변경해주면 c## 을 붙여주지 않아도 됩니다. alter session set "_ORACLE_SCRIPT"=true; 위와 같이 세션을 변경하고 다시 만들어보면 c## 을 붙이지 않아도 생성이 가능합니다. 2022. 10. 7.
[PostgreSQL] 데이터베이스, 스키마, 테이블 목록 조회 SELECT datname FROM pg_database -- 전체 데이터베이스 조회 SELECT datname FROM pg_database WHERE datistemplate = false -- 사용자가 생성한 데이터베이스만 조회 select nspname from pg_catalog.pg_namespace -- 현재 db의 전체 스키마 조회 select tablename from pg_tables -- 전체 테이블 조회 2022. 10. 5.
[PostgreSQL] 데이터 타입 숫자 smallint 작은 범위의 정수, 2 bytes(-32768 ~ +32767) integer 정수에 대한 일반적인 선택, 4 bytes(-2147483648 ~ +2147483647) bigint 큰 범위의 정수, 8 bytes(-9223372036854775808 ~ 9223372036854775807) decimal 사용자 지정 정밀도, variable, 정확(제한 없음) numeric 사용자 지정 정밀도, variable, 정확(제한 없음) real 가변 정밀도, 부정확, 4 bytes(6자리 소수점 정밀도) double precision 가변 정밀도, 부정확, 8 bytes(15자리 소수점 정밀도) serial 자동 증가 정수, 4 bytes(1 ~ 2147483647) bigserial .. 2022. 10. 4.
[PostgreSQL] 반복문 쿼리 실행기에서 반복문을 사용하는 방법을 살펴보자.( 디비버 기준) 위 그림처럼 DO $$ 으로 시작하고 $$; 로 끝나는 구문 사이에 BEGIN END 로 묶어서 사용할 수 있다. 1 2 3 4 5 6 7 DO $$ BEGIN for i in 1..10000000 loop insert into testtable (testcol1,testcol2) values ('testdata1','testdata2'); end loop; END; $$; Colored by Color Scripter cs 예제에서는 천만건을 인서트했는데 말도안되게 빠른속도로 데이터가 들어가는것을 확인할 수 있다. 2022. 9. 30.
[PostgreSQL] 설치 (window) PostgreSQL 에 대해 알고 싶다면 다음 경로를 살펴보자. https://d2.naver.com/helloworld/227936 아래 홈페이지에서 설치 파일을 다운받는다. https://www.postgresql.org/ PostgreSQL The world's most advanced open source database. www.postgresql.org 위와같이 다운 받은 후 실행한다. 설치가 완료 된후 접속 테스트를 해보자 검색창에서 sql shell 을 검색하자 위 프로그램을 실행하면 아래와 같은 창이 나오는데 일단 계속 엔터를 입력하자 엔터를 계속 입력하다보면 다음과 같이 비밀번호를 입력하는 상태가 되는데 개인이 지정한 비밀번호를 입력해주자. 비밀번호를 입력하면 다음과 같이 창이 바뀐다... 2022. 9. 30.
MYSQL 이벤트 스케줄러 출처 - http://genesis8.tistory.com/298 DB 기록을 주기적으로 할 수 있는 기능.. 작업 스케줄러처럼 주기적으로 쓸 수 있는데다가 쿼리를 넣어두거나 프로시저 호출 등을 지정해둘 수 있다!... 이런 기능을 몰랐었다니.. show variables like 'event%'; ㄴ이벤트 스케줄러가 켜져 있는지를 체크할 수 있다. SET GLOBAL event_scheduler = ON ; SET GLOBAL event_scheduler = OFF ; ㄴ 이벤트 스케줄러를 껐다 킬 수 있다. (이벤트 동작 여부를 총체적으로 결정) SELECT * FROM information_schema.EVENTS; ㄴ 현재 db에 작성된 event 들을 볼 수 있다. CREATE EVENT 이벤트.. 2017. 9. 11.
MySQL 자동증가, auto increment 값 초기화 하기 출처 - http://www.cyberpr.co.kr/community/community.php?act=v&bid=database&seq=1052 MySQL 자동증가, auto increment 값 초기화 하기 테이블 생성시에 아래와 같이 auto_increment 라고 지정해주면 그 컬럼(필드)는 자동 증가 값을 가지게 되는데요.. create table test_table ( idx int NOT NULL auto_increment, name varchar(255), ... 블라 블라, ... 블라 블라, ... 블라 블라, ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=euckr; 가끔은 이놈을 초기화 시켜야 할때가 있습니다. 초기화 시키기 위한 꼬라 지는 .. 2017. 4. 3.
mysql 에서 splite 기능 만들기 오래 여기저기 찾아봤는데 splite 기능을 하는 테이블 반환 함수가 없다. 그렇다고 프로시저로 만들어서 call 해도 그거도 못쓴다고 되있고. 그래서 조합해서 써보기로 했다. 우선 함수를 하나 만든다 CREATE FUNCTION `SPLIT_STR`( oritext longtext, splitchar char(1), pos int ) RETURNS varchar(2000) CHARSET utf8 BEGIN RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(oritext, splitchar, pos),CHAR_LENGTH(SUBSTRING_INDEX(oritext, splitchar, pos -1)) + 1),splitchar, ''); END 그리고 프로시저를 만든다. CREAT.. 2016. 2. 25.
쿼리 로그 보기 select db_name(st.dbid) DBName ,qs.total_elapsed_time ,creation_time ,last_execution_time,text from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle)st join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle where creation_time >= '2011-09-01 00:00:00' --and db_name(st.dbid) is not null and cp.objtype = 'proc' --조건: 종류 and text like '%select%' order by last_.. 2015. 6. 29.
MSSQL split 기능 찾아보니 함수로 된거만 보여서 쿼리문에서 바로 가져올수 있게 만들었다. DECLARE @TEMP NVARCHAR(max) SET @TEMP = 'AAAA1|S1222' SELECT LEFT(@TEMP,CHARINDEX('|',@TEMP) -1) AS FIRSTSTR , RIGHT(@TEMP,LEN(@TEMP) - CHARINDEX('|',@TEMP)) AS SECONDSTR 2015. 2. 3.
트리거(TRIGGER - DML TRIGGER) 출처 - http://egloos.zum.com/sweeper/v/3061012 1. 트리거 개요 트리거는 사전적 의미로 '방아쇠'를 뜻하는데, 단어 뜻 그대로, 데이터베이스에 어떠한 일이 일어나면 자동으로 실행되는 개체를 의미한다. 트리거는 제약 조건과 더불어 데이터 무결성을 위해서 SQL Server에서 사용할 수 있는 또 다른 기능이다. 트리거는 그 영향 범주에 따라 크게 다음 세 가지로 나눌 수 있다. DML 트리거 : 테이블/뷰와 관련되어 DML문(INSERT/UPDATE/DELETE)의 이벤트가 발생할 때 작동 DDL 트리거 : SQL 서버나 데이터베이스에 DDL문(CREATE/ALTER/DROP)의 이벤트가 발생할 때 작동 LOGON 트리거 : 사용자의 로그온 이벤트가 발생할 때 작동 참고로.. 2015. 1. 15.
[MSSQL] 다른 테이블과 조인걸고 DELETE 하기 출처 - http://seoddong.tistory.com/33 일반 DELETE문과 조인거는 SELECT문의 단순한 결합이라고 생각하면 된다. WHERE없는 일반적인 DELETE문을 만들어놓는다. 그리고 삭제하길 원하는 데이터만 나오도록 쿼리문을 만든다. SELECT 부라부라 FROM 부라부라 INNER JOIN 부라부라 의 형태가 나올것인데 이 중에서 FROM부터 마지막까지를 복사한다. DELETE시에 삭제하고자 하는 테이블을 첫번째 FROM에 놓고, 조인걸고자 하는 테이블을 두번째 FROM에 놓고, 그담부터 자유롭게 조인건다. 1.일반 DELETE문 DELETE FROM테이블AA 2.삭제할 내용만 뽑아내는 SELECT문 SELECTAA.* FROM테이블AA AA WITH (NOLOCK) INNER .. 2014. 11. 14.
MSSQL 에서 CREATE OR UPDATE 프로시저 하는법 출처 - http://www.sqlservercentral.com/blogs/martin_catherall/2011/05/04/how-do-you-create-or-update-stored-procedures_2E00_/ 1.----------------------------------------------------------------------------------------------------- IF EXISTS ( SELECT * FROM sys.procedures AS P INNER JOIN sys.schemas AS S ON P.[schema_id] = S.[schema_id] WHERE P.[type] = 'P' AND P.[name] = '프로시저명' AND S.[name] = '데이터.. 2014. 8. 8.
[MSSQL] WITH (NOLOCK) 출처 - http://roadrunner.tistory.com/238 MSSQL에서 SELECT 시에 WITH (NOLOCK) 을 주면 공유잠금을 걸지 않고 바로 조회를 한다. MSSQL은 기본적으로 SELECT 시에 공유잠금이 걸린다. 즉, SELECT 문이 수행되는 테이블에 대해서 INSERT, UPDATE, DELETE 문이 수행되고 있다면 SELECT문은 선행 작업이 모두 끝날때까지 LOCK이 걸린다. 이때 SELECT 문에 WITH (NOLOCK)을 추가하면 선행작업의 결과와 관계없이 바로 SELECT문이 수행되어서 결과를 반환하게 된다. SELECT * FROM TABLE1 WITH (NOLOCK) SELECT 문장에서 여러 테이블을 조인해서 가져오는 경우 WITH (NOLOCK)을 사용하기 .. 2014. 8. 6.
테이블에 걸려있는 트리거 확인 SELECT 'sp_helptext ' + T.name FROM sys.sysobjects AS T INNER JOIN sys.sysobjects AS O ON T.parent_obj = O.id WHERE T.xtype ='TR' AND O.name like '테이블명' 2014. 7. 23.
mssql 에서 char http://msdn.microsoft.com/ko-kr/library/ms187323(v=sql.100).aspx 2014. 5. 26.
MSSQL 프로시저내의 동적쿼리 및 개행문자(줄바꿈) 출처 - http://moyaria.tistory.com/entry/MSSQL-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80%EB%82%B4%EC%9D%98-%EB%8F%99%EC%A0%81%EC%BF%BC%EB%A6%AC-%EB%B0%8F-%EA%B0%9C%ED%96%89%EB%AC%B8%EC%9E%90 MSSQL 의 프로시저 내에서 동적쿼리를 생성해서 실행시키는 구문이다. 참고로 print 시에 개행문자 char(13) 를 붙여 주면 줄바꿈이 된다. SET @SQL = '' SET @SQL = @SQL + ' SELECT * ' + char(13) SET @SQL = @SQL + ' FROM TABLENAME ' + char(13) SET @SQL = @SQL + ' WHERE f.. 2014. 4. 30.
MSSQL 0 붙이기 3자리수로 할경우 SELECT RIGHT('00000000'+ @P_VALUE,3) 6자리수로 할경우 SELECT RIGHT('00000000'+ @P_VALUE,6) 가만히 생각해보니 엄청나게 간단하면서 빠르게 처리가 가능한 방법이다. 앞에 0000 문자는 최소한 원하는 자리수 이상이어야 한다. 왜냐하면 문자가 1 인데 3자리로 하고 싶으면 001 은되야 RIGHT 로 오른쪽 부터 3자리로 자를수있다. 2014. 3. 14.
[MSSQL] 소수점 반올림, 버림 출처 - http://blog.naver.com/PostView.nhn?blogId=darksun71&logNo=130143935434 1. 반올림 SELECT ROUND(1.23523, 2) 결과 : 1.24000 1-1. 반올림 SELECT ROUND(1.23523, 2, 0) 결과 : 1.24000 2. 버림 SELECT ROUND(1.23523, 2, 1) 결과 : 1.23000 ---------------------------------------------- 세번째 Parameter의 비밀. FALSE면 반올림, TRUE면 버림 2014. 3. 10.
nvarchar(max) 출처 - http://blog.naver.com/gun0626?Redirect=Log&logNo=40026063891 출처 - http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=131142270&qb=bnZhcmNoYXIobWF4&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=RYfb1spySEKssZ/zNQ0ssssssts-166879&sid=UvSG1ApyVmMAAE-zZXk sql server 2000에서 sp_executesql 을 사용할 때 제약조건이 있었는데, sql 문을 4000자 이상 처리할 수 없다는 것입니다. sql 문은 유니코드 문자열(nvarchar 나 nchar)이어야 하기 때.. 2014. 2. 7.
[MSSQL]OBJECT_ID 함수를 이용한 개체 존재 여부 확인 출처 - http://lovedb.tistory.com/58 출처 - http://kmj1107.tistory.com/136 OBJECT_ID 함수를 이용해서 개체의 존재 여부를 확인 후 개체를 삭제해 보자. 오라클의 경우 CREATE OR REPLACE 를 사용하면 CREATE 할 때 기존에 같은 이름의 개체가 있으면 REPLACE 하고 개체가 없으면 CREATE 하는 기능이 있지만 MS SQL Server 에는 없다. 테이블에 개체 ID가 있는지 확인해서 지정한 테이블이 있는지 확인한다. 테이블이 있는 경우 삭제되고, 테이블이 없는 경우 DROP TABLE 문이 실행되지 않는다. USE AdventureWorks2008R2; GO IF OBJECT_ID (N'dbo.AWBuildVersion', N'.. 2014. 1. 22.
RAISERROR 예제 및 .NET에서 사용하기 출처 - http://windtrap.tistory.com/42 출처 - http://hsouhy.egloos.com/viewer/403819 안녕하세요? [쓸만한게없네] 윤선식입니다. 간만에 글을 올리네요. RAISERROR 관련된 글은 여기저기 있지만 심플하게 되어 있는 샘플이 없는 것 같아서 하나 올립니다. 예제는 A값과 B값을 입력받아서 A / B를 한 결과를 돌려주는 것입니다. Procedure는 다음과 같이 구성합니다. CREATE PROC [dbo].UP_RaiseTest @VAL1 INT, @VAL2 INT, @VAL3 INT OUTPUT AS BEGIN DECLARE @ErrorNumber INT; DECLARE @ErrorSeverity INT; DECLARE @ErrorState IN.. 2014. 1. 21.
MSSQL 락(lock) 해제 검색해보시면 재밌는게 많이 나옵니다. 한국이랑 다르네요 ㅋ ① sp_lock 프로시저를 실행하여 mode가 x 인 녀석을 확인 ② dbcc inputbuffer(spid) 클라이언트에서 MSSQL로 보낸 최종 명령문 표시, 위의 1번에서 X인 녀석의 spid를 입력하면 해당 테이블이 출력된다. ③ kill spid 문제가 되는 spid를 kill 합니다. 2013. 10. 17.
DB 암호화 출처 - http://nakyungpapa.tistory.com/74 [출처 : 보안뉴스] 1. 기업의 존속과 직결되는 DB의 암호화 필요성 - 데이터 자산가치의 증가 - 내부자에 의한 정보 유출 및 보안 사고 급증 - 피해규모, 확산속도 가속 및 막대한 사회적 비용 발생 - 개인정보 유출에 대한 불안감 고조 및 신뢰성 저하 - 어플리케이션 구축 및 운영시의 보안 허점 2. DB 암호화의 법적 기준 구분 소관 내용 정보통신망법 방통위 시행령 제15조 (개인정보의 보호조치) - 주민등록번호 및 계좌번호 등 금융정보의 암호화 저장 개인정보보호법 행안부 개인정보의 안정성 확보 조치 기술 고시 제7조 - 외부망 저장시 개인정보 모두 암호화 - 내부망 저장시 공공기관은 영향평가 결과를 통해, 그 외 기업들은 위험.. 2012. 9. 24.
[DB암호화] 4. 운영 출처 : DBGuide.net(http://www.dbguide.net/db.db?cmd=view&boardUid=152811&boardConfigUid=9&categoryUid=216&boardIdx=147&boardStep=1) 가. 변경 이력 및 백업관리 암호화 키는 암호화 대상 DB 내의 여러 컬럼에 동시에 적용될 수 있고, 암호화를 적용한 조직의 보안 규칙에 따라 암호화 키를 변경하게 된다. 암호화 키의 사용은 평문 데이터를 암호화 하는데 사용하기도 하지만 반대로 복호화 하는데 사용하기 때문에 누가 언제 암호화 키를 사용하여 암복호화를 했는지 기록할 필요가 있다. 이것은 암호화를 통해 DB 보안 성을 강화하기 위한 기본적인 절차이며 의무이다. 암호화 키가 운영되는 키 관리 서버는 DB 암호화의 .. 2012. 9. 24.
[DB암호화] 3. 구축 출처 : DBGuide.net (http://www.dbguide.net/db.db?cmd=view&boardUid=152810&boardConfigUid=9&categoryUid=216&boardIdx=147&boardStep=1) 가. 원본 데이터 삭제 DB의 암호화가 수행되면 원본 데이터는 삭제되어야 한다. 원본 데이터는 서비스가 진행 중인 DB 내에 존재했거나 백업(Backup)에 의해 테이프 등과 같은 2차 스토리지 (Storage)에 저장 된다. 따라서 암호화 후에 진행되어야 할 원본 데이터 삭제는 DB 서비 스가 진행 중인 디스크와 백업된 스토리지 모두에게 해당된다. DB 서버 내 디스크의 원본 데이터는 테이블의 컬럼 값뿐만 아니라 이에 대한 인덱스 정보까지도 포함한다. 원본 데이터의 삭제 .. 2012. 9. 24.
[DB암호화] 2. 설계 출처 : DBGuide.net (http://www.dbguide.net/db.db?cmd=view&boardUid=152809&boardConfigUid=9&categoryUid=216&boardIdx=147&boardStep=1) DB 암호화를 구축하기 위해서는 복호화 권한통제, 암호 키 정의, 그리고 암호화 키 사용 로깅 등 많은 사항을 고려하여야 한다. 암호화 규칙은 DB를 암호화하기 위한 기본적인 전 제 조건과 고려사항을 언급한 것이며, 암호화를 규칙대로 적용하고 암호화 후 정상적인 DB 서비스를 지속시키기 위한 몇 가지 지표를 다음과 같이 정리할 수 있다. ■DB에 접속할 수 있는 사용자에 대한 정의가 되어 있는가? ■DB에 접속하는 사용자 식별에 대한 방법이 정의 되었는가? ■암호화 대상 컬.. 2012. 9. 24.