본문 바로가기

RDB24

[MSSQL] "already exists in the current database" 오류 해결 DB를 새로 복원하고 같은 사용자 이름으로 DB를 매핑하는 경우에 다음과 같은 오류가 발생할 수 있습니다. 복원된 DB에는 이미 기존 로그인 이름의 사용자 계정이 존재하기 때문에 DB의 해당 정보를 업데이트하거나 삭제시킨 후 등록하여야 합니다. 다음 쿼리를 통해 현재의 사용자 계정으로 매핑할 수 있습니다. USE exampledb --매핑할 DB GO ALTER USER exampleuser WITH LOGIN = exampleuser GO 2023. 7. 11.
[MSSQL] 데이터베이스 파일(mdf, ldf) 파일경로 및 파일명 변경하기 데이터베이스 파일경로 및 파일명 변경 1. 작업 전 데이터베이스 속성을 확인 2. DB 오프라인 상태로 변경 ALTER DATABASE TESTDB set OFFLINE --DB Offline 상태로 변경 (실행 안될때는 WITH ROLLBACK IMMEDIATE 추가) GO 3. 윈도우 탐색기로 경로 및 파일명 변경 4. 변경된 파일경로 및 파일명으로 적용 ALTER DATABASE TESTDB MODIFY FILE (NAME = TESTDB1, --논리적 이름 FILENAME = 'C:\DB\data\TEST_CHANGE.MDF') --변경할 파일 경로 및 파일명 GO 5. DB 온라인 상태로 변경 ALTER DATABASE TESTDB SET ONLINE GO 2023. 7. 8.
[MSSQL] 모든 테이블 Row수 조회 DB내의 모든 테이블에 대한 Row수를 가져오는 쿼리입니다. 2005이상 버전 사용가능합니다. 시스템 뷰에 저장되어있는 Row수를 가져와서 조회하기 때문에 DB에 부하를 주지 않습니다. 하지만 시스템 뷰가 업데이트 되어있지 않다면 약간의 오차가 발생할 수있습니다. SELECT t.name AS Table_Name, SUM(p.rows) AS Row_Count FROM sys.tables t INNER JOIN sys.partitions p ON t.object_id = p.object_id WHERE t.is_ms_shipped = 0 AND p.index_id IN (0, 1) GROUP BY t.name ORDER BY t.name 2023. 7. 3.
[MSSQL] ODBC 연결 설정 Sql Server ODBC 연결 설정하는 방법. 1. ODBC 검색해서 ODBC 데이터 원본 실행 2. 드라이버에서 Sql Server 존재 확인 (없다면 드라이버 설치) 3. DSN에서 추가 버튼 클릭 4. 새 데이터 원본 만들기에서 SQL Server 드라이버 선택 후 마침 5. DB이름, 설명 그리고 서버를 지정 (서버만 정확하게 입력하면됨) 6. DB 계정을 입력(서버 계정아님) 7. 기본 데이터베이스를 선택 8. 마침 후 데이터 원본 테스트를 눌러 연결 여부 확인 9. 테스트가 성공했다면 확인누르면 완료 10. 연결된 DB를 확인 2023. 7. 3.
[MSSQL] 프로시저 검색 쿼리 프로시저 내의 문자열 검색 SELECT OBJECT_NAME(object_id), OBJECT_DEFINITION(object_id) FROM sys.procedures WHERE OBJECT_DEFINITION(object_id) LIKE '%검색어%' 2023. 5. 31.
[AWS x MySQL] AWS RDS 프리티어 생성하기 AWS에서 무료로 DB이용하기! 공부목적으로 서버에 DB를 설치하고 싶을 때, AWS RDS 프리티어를 이용하여 무료로 AWS RDS를 사용할 수 있습니다. 보통 공부목적이나 개인 프로젝트용으로 많이 활용하게 되기 때문에 과금되지 않도록 설정하여 데이터베이스를 생성해보겠습니다. AWS에서 RDS 서비스를 찾아줍니다. RDS 서비스에 들어왔다면 데이터베이스 생성을 클릭해줍니다. MySql을 선택해줍니다. 오픈소스인 MariaDB나 PostgreSQL도 프리티어가 가능합니다! 프리티어를 골라줍니다. 저는 사용자 이름은 root로 설정해주었습니다. 이전에는 t2.micro만 프리티어에서 사용이 가능했지만 현재는 db.t3.micro와 db.t4g.micro도 프리티어에서 사용할 수 있습니다. 할당된 스토리지가.. 2023. 5. 12.
[MSSQL] 인덱스 조각화/리빌드 인덱스 조각화는 데이터베이스에서 인덱스 내부의 데이터 페이지가 물리적으로 분산되어 저장되는 현상을 의미합니다. 이는 데이터베이스의 성능에 부정적인 영향을 미칠 수 있습니다. 인덱스는 데이터베이스에서 검색 작업을 빠르게 수행하기 위해 사용되는 구조로, 데이터의 논리적인 정렬 순서를 유지하고 검색 속도를 향상시킵니다. 그러나 데이터가 추가, 수정 또는 삭제되면 인덱스의 조각화가 발생할 수 있습니다. 인덱스 조각화는 주로 두 가지 형태로 나뉩니다. 1. 내부 조각화 (Internal Fragmentation): 내부 조각화는 인덱스 페이지 내에서 빈 공간이 발생하는 경우를 말합니다. 예를 들어, 인덱스 페이지에 데이터를 추가하거나 삭제하면 해당 페이지의 공간이 남을 수 있습니다. 이렇게 발생한 빈 공간은 검색.. 2023. 5. 2.
[MSSQL] 사용하지 않는 인덱스 확인하기 다음 쿼리를 사용해 사용되지 않고 있는 인덱스를 확인할 수 있다. 인덱스를 사용하지 않는데 인덱스 수정이 자주되어 DB에 부하를 준다면 정리할 수 있도록 하자. SELECT TOP 10 DatabaseName = DB_NAME() ,TableName = OBJECT_NAME(s.[object_id]) ,IndexName = i.name ,user_updates --유저 인덱스 쓰기 작업 수 ,system_updates --시스템 인덱스 쓰기 작업 수 FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id WHERE s.database_id = D.. 2023. 4. 24.
[MySQL] 날짜 더미데이터 만들기 WITH문 재귀를 사용하여 날짜 더미데이터를 만들 수 있다. WITH RECURSIVE A AS( SELECT 0 AS LEVEL UNION ALL SELECT 1+A.LEVEL FROM A WHERE A.LEVEL < ( SELECT DATEDIFF('2023-12-31', '2023-01-01') #종료날짜, 시작 날짜 ) ) SELECT ADDDATE('2023-01-01', INTERVAL LEVEL DAY) #시작날짜 FROM A; 위 쿼리를 실행하면 다음과 같은 결과를 조회할 수 있다. 서버에서 WITH를 사용할 수 없을 때 다음과 같은 방법으로도 날짜 더미데이터를 조회할 수 있다. (1년 후 날짜를 기준으로 9999일 이전 날짜까지만 조회가능) SELECT DATE_FORMAT(D.Date,.. 2023. 4. 18.
[MSSQL] 특정 구간의 날짜 더미데이터 만들기 (with CTE) 특정 구간의 날짜 더미데이터가 필요한 경우 CTE를 사용하여 다음과 같이 만들 수 있습니다. DECLARE @start_time datetime = '20230401 00:00:00' --첫 날짜 DECLARE @end_time datetime = '20230401 23:00:00'; --마지막 날짜 DECLARE @time_diff int = 1; --설정할 시간 간격 WITH cte AS ( SELECT 0 AS n UNION ALL SELECT n + @time_diff FROM cte WHERE n < DATEDIFF(HOUR, @start_time, @end_time) -- HOUR 대신 다른 시간 단위 설정가능 ) SELECT DATEADD(HOUR, n, @start_time) FROM ct.. 2023. 4. 17.
[MySQL] UPSERT(UPDATE + INSERT) 쿼리 UPSERT 쿼리는 UNIQUE KEY값이 없으면 INSERT 있으면 업데이트를 실행하는 쿼리입니다. 예를들어 id필드가 유니크 키일때 다음과 같은 UPSERT 쿼리를 보냅니다. INSERT INTO TABLE (id, col1, col2) VALUES (1, '값1', '값2') ON DUPLICATE KEY UPDATE col1 = '값1', col2 = '값2' 만약 테이블에 id가 1인 값이 존재하지 않는다면 INSERT 쿼리로 처리되고, id가 1인 값이 존재한다면 UPDATE 쿼리로 처리됩니다. IF문을 사용한다면 SELECT를 통해 해당 값의 존재 여부를 체크 후 INSERT를 할지 UPDATE를 할지 결정하여야 합니다. 반면 UPSERT는 불필요한 조회를 줄이고 쿼리를 간결하게 표현할 수 .. 2023. 4. 13.
[MSSQL] 데이터베이스 용량 조회 쿼리 SELECT b.groupname AS 'File Group' , Name , [Filename] , CONVERT (Decimal(15,2),ROUND(a.Size/128.000,2)) [할당된 용량 (MB)] , CONVERT (Decimal(15,2) , ROUND(FILEPROPERTY(a.Name,'SpaceUsed')/128.000,2)) AS [사용중인 용량 (MB)] , CONVERT (Decimal(15,2) , ROUND((a.Size-FILEPROPERTY(a.Name,'SpaceUsed'))/128.000,2)) AS [사용가능한 용량 (MB)] FROM dbo.sysfiles a (NOLOCK) JOIN sysfilegroups b (NOLOCK) ON a.groupid = b.g.. 2023. 4. 7.
반응형