상황:

DB 백업시 Failed (exit code: 3221225781). 발생

 

 

원인: postgresql 버전차이

postgresql13 쓰다가 16 설치 후 백업시 해당 오류 발생

 

조치:

pgAdmin4 - Preferences - Paths - Binary paths 

C:\Program Files\PostgreSQL\16\bin

 

 

 

출처 : https://stackoverflow.com/questions/77462578/pgadmin-error-when-restoring-database-from-tar-file

트랜잭션 로그가 ACTIVE_TRANSACTION 로 인해 꽉 찼습니다

 

Delete 쿼리 사용시 해당 문구가 나타나면서 쿼리가 실행되지 않음

 

조건 추가하여 행 하나만 삭제시 삭제가 됨 

 

검색해보니 로그 용량이 부족하면 나타나는 현상이라고 함

 

인터넷이 있는대로 해보니 되지 않아 이것저것 바꿔봄

 

 

 

내가 한 것

 

1. 드라이브 용량 확보

일단 D드라이브가 거의 다 차있었으므로 용량을 비워줌

 

D드라이브에 mdf  ldf 파일이 있음

 

2. 데이터베이스 우클릭 - 속성 - 옵션 - 복구모델 - 전체로 변경

 

 

 

3. 데이터베이스 우클릭 - 속성 - 파일 - 데이터베이스 파일 -  DB명_Log 항목 - 자동 증가 / 최대크기 - ... 클릭

     - 최대 파일 크기 - 제한 없음 체크

 

 

 

 

이렇게 변경시 동작 했음

 

 

//////////////////////////////////////////////

 

log를 사용하지 않는 경우 

 

데이터베이스 우클릭 - 속성 - 옵션 - 복구모델 - 단순  으로 원복

 

데이터베이스 우클릭 - 태스크 - 축소 - 파일 - 축소동작

  - 사용하지 않는 공간을 해제하기 전에 페이지 다시구성 - 파일을 다음 크기로 축소  - 7MB  - 확인

 

 

 

 

 

 

현상 : where -> where 처럼 나타남

 

방법 : 윈도우 - 설정 - 시간 및 언어 - 언어 및 지역 - 언어 - 한국어 - ... - 언어옵션 - Microsoft 입력기 - ... - 키보드옵션 - 호환성 - 이전 버전의 Microsoft IME - 켬

 

처음에는 설정에서 기본언어를 영어로도 바꿔봤으나 증상은 동일하였다

 

해당 방법으로 설정 후 해결됨

 

visual studio 2015 사용시 동일현상 있었으나 해결됨

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

상황:

ERROR: 오류: "public.tbl_testinfo" 이름의 릴레이션(relation)이 없습니다
LINE 1: SELECT * FROM public.tbl_TestInfo ^ SQL state: 42P01 Character: 15

 

 

 

수정:

테이블 이름 양 끝에 쌍따옴표( " ) 를 넣어본다.

SELECT * FROM public."tbl_TestInfo"

 

 

 

pgadmin4 으로 테이블 생성시 양끝에 따옴표가 들어간 테이블 생성됨

 

조치:

 

테이블 이름을 변경해 준다

 

ALTER TABLE "tbl_TestInfo" RENAME TO tbl_TestInfo

 

 

수정됨


MSSQL DB 를  PostgreSQL 옮기려다가 찾았음

DMToolkit_x64.msi

ESF Database Migration Toolkit - Pro

다운로드 사이트

https://www.dbsofts.com/articles/postgresql_to_sql_server/

 

DMToolkit_x64 를 다운로드 후 설치

 

동의 - 다음 - 다음 하면 설치됨

 

설치 완료 후 윈도우버튼 - ESF Database Migration Toolkit - Pro

 

 

실행

 

별거아님 끄기

 

복사할 DB 선택

 

 

대상 DB 선택

 

 

복사할 테이블 선택

 

네모 박스친 부분은 체크 풀어서 복사함 ( db_server , sysdiagrams)

 

 

 

 

 

Submit 버튼 누르면 팝업 뜸

 

 

 

대충 내용은 

 

"평가판 버전이라 레코드 50000개 이상 불가함   "

 

FULL VERSION 누르면 결제페이지 이동되고 Try 누르면 실행 됨

 

Try 눌러도 동작 안되고 있으면 Submit 다시 클릭

 


 

 

완료

 

 

////

 

모든 테이블이 복사 안될 경우

 

mssql 에서  DB 백업 - 다른이름으로 복원  - 다른이름으로 복원한 DB에서 복사 덜 된 테이블만 남기고 모두 지움 

 

테이블 지우는 쿼리 만드는 쿼리문

 

SELECT 'drop table dbo.' + [NAME] FROM SYS.SYSOBJECTS WHERE [xtype] = 'U' 

 

복사 덜 된 테이블만 남은 DB를 위 방법으로 다시 복사

 

PostgreSql 내에서 다른 DB 테이블 복사하는 방법은 여러가지 있는데 구글에 잘 나옴..

 

ㅠㅠ이것까진 안해봐서 ...

 

 

 

도구 - 옵션 - SQL Server  개체탐색기 - 명령 - 테이블 및 뷰 옵션

 상위 <n<개 행 편집 (선택) 명령의 값 수정

 

조회 및 편집  

상위 n개의 데이터를 정렬하여 조회하고 편집하고 싶을때

 

테이블 우클릭 - 상위 n개 행 편집 - 결과창 우클릭 - 창 -  SQL

SQL 창에서 order by  , where 등 쿼리 작성 

우클릭 - SQL 실행  - 결과창에서 데이터 편집

 

 

 

 

 

 

 DB복원시 MDF기본 위치 설정

 

DB우클릭 - 속성 - 데이터베이스 설정 - 데이터베이스 기본위치 

 

시작 - 서비스 - SQL Server - 중지 - 시작

 

 조회
select (replace(컬럼명,'변경전데이터','변경후데이터')) 컬럼명 from 테이블명
ex)
 select (replace(strImageFilePath,'\\192.168.0.114\','')) strImageFilePath from tbl_Result

변경
 Update 테이블명 Set 컬럼명 = (replace(컬럼명,'변경전데이터','변경후데이터'))
 Select * From 테이블명
ex)
 Update tbl_Result Set strImageFilePath = (replace(strImageFilePath,'\\192.168.0.114\',''))
 Select * From tbl_Result
 

 

'공부 > SQL' 카테고리의 다른 글

[MSSQL기능] 상위 N개 행 편집  (0) 2023.03.30
[MSSQL설정] DB복원시 MDF기본 위치 설정  (0) 2022.05.06
[MSSQL] 중복 데이터 삭제  (0) 2021.08.26
[MSSQL] 특정 문자 변경 쿼리  (0) 2021.08.13
[Oracle] 테이블 컬럼 변경  (0) 2021.07.19

//중복된데이터 검색

//컬럼명 : nClientID, nModelID, nAlgType

//테이블 : MuraExceptCondition

 

select nClientID, nModelID, nAlgType, COUNT(*) AS CNT
from tbl_MuraExceptCondition
GROUP BY nClientID, nModelID, nAlgType
HAVING COUNT(*) > 1

 

//삭제

--SELECT COUNT(*)
--from tbl_MuraExceptCondition

 

DELETE tbl_MuraExceptCondition
WHERE nIndex NOT IN (
SELECT MAX(nIndex)
from tbl_MuraExceptCondition
GROUP BY nClientID, nModelID, nAlgType
)

 

//퍼온것

실제 작업시에는 대부분 unique index를 걸거나, primary key 를 걸어 놓아 그런 일이 벌어지지 않지만, 벌크로 데이터를 작업하거나 할 경우, 중복된 데이터를 보거나, 제거하고 싶을 때가 있습니다.

단순히 중복 카운트를 조회 하고 싶을 경우엔, 다음과 같이 grouping 하고 count를 세면 됩니다만,

 

테이블 명 : tbl_some_table

컬럼 명: some_id, some_nm, some_description

-- 중복 카운트
SELECT some_id, COUNT(*)
FROM tbl_some_table
GROUP BY some_id
HAVING COUNT(*) > 1;

-- 여러 컬럼의 중복 카운트
SELECT some_id, some_nm, some_description, COUNT(*)
FROM tbl_some_table
GROUP BY some_id, some_nm, some_description
HAVING COUNT(*) > 1;

 

 

 

중복된 데이터 중, 첫번째(또는 마지막) 하나만 빼고 나머지를 조회한다거나, 삭제하고 싶을 때가 있습니다. 그러한 경우 다음과 같은 inline view 로 처리할 수 있습니다. (WITH 를 사용해도 되나, 하위 버전의 SQL 일 경우에는 WITH 구문이 먹지 않죠. 응? 하위 버전은 ROW_NUMBER 가 안 먹겠네요. 아이고 배야. - 하위 버전도 inline view 를 여럿 쓰면 되긴 합니다만.)

-- 중복 데이터를 알고 싶다.
SELECT *
 FROM (
            SELECT some_id
                     , dup_idx = ROW_NUMBER() OVER (
                                   PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table (NOLOCK)
           ) tb_dup
WHERE tb_dup.dup_idx > 1;

-- 중복 데이터 기준으로 중복된 데이터를 다 조회하고 싶다.
SELECT t.*
FROM (
           SELECT some_id , dup_idx = ROW_NUMBER() OVER (
                                                 PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table (NOLOCK)
           ) tb_dup INNER JOIN tbl_some_table t (NOLOCK)
                                 ON t.some_id = tb_dup.some_id
WHERE tb_dup.dup_idx > 1;

-- 중복 데이터를 지우고 싶다!!!
DELETE tb_dup
FROM (
           SELECT some_id ,
                       dup_idx = ROW_NUMBER() OVER (
                                     PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table
                 ) tb_dup
WHERE tb_dup.dup_idx > 1;

-- 여러 컬럼일 경우? 중복 데이터를 지우고 싶다!!!
DELETE tb_dup
  FROM (
               SELECT some_id, some_nm, some_description ,
                         dup_idx = ROW_NUMBER() OVER (
                                       PARTITION BY some_id, some_nm, some_description
                                       ORDER BY some_id, some_nm, some_description )
                 FROM tbl_some_table
              ) tb_dup
WHERE tb_dup.dup_idx > 1;

 

이것 또한 그냥 메모입니다. 하하.

 

출처 : https://withsoju.tistory.com/686

//조회시 변경하여 조회
select (replace(컬럼명,'변경전데이터','변경후데이터')) 컬럼명 from 테이블명
//예시
select (replace(strImageFilePath,'\\192.168.0.100\','')) strImageFilePath from tbl_Result

 //실제데이터 변경
 Update 테이블명 Set 컬럼명 = (replace(컬럼명 ,'변경전데이터','변경후데이터'))
//예시
 Update tbl_Result Set strImageFilePath = (replace(strImageFilePath,'\\192.168.0.100\',''))
//타입 , 크기 변경
ALTER TABLE TBL_RESULT MODIFY  NLOTID NUMBER(20,0);
ALTER TABLE TBL_RESULT MODIFY STRDATE VARCHAR2(50);

ALTER TABLE 테이블 MODIFY  컬럼 타입(크기);

//이름 변경
ALTER TABLE TBL_RESULT RENAME COLUMN STRDATE TO STRDATEDST

ALTER TABLE 테이블 RENAME COLUMN 컬럼명 TO 변경할컬럼명

 

출처: https://jwklife.tistory.com/5

오류 내용

 

변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면 다음 테이블을 삭제하고 다시 만들어야 합니다.
다시 만들 수 없는 테이블을 변경했거나 [테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함] 옵션을 설정했습니다.

 

방법

 

도구 - 옵션 - 디자이너 - 테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함 - 체크해제

 

'공부 > SQL' 카테고리의 다른 글

[MSSQL] 특정 문자 변경 쿼리  (0) 2021.08.13
[Oracle] 테이블 컬럼 변경  (0) 2021.07.19
[Oracle] 세션강제종료  (0) 2021.07.15
[Oracle] 일정 시간 경과 후 연결 끊김  (0) 2021.07.14
[MSSQL] NVL 사용법  (0) 2021.07.07

연결된 세션 조회 

SELECT 
   SID
  ,SERIAL#
  ,USERNAME
  ,PROGRAM 
FROM 
  V$SESSION 

결과

 

세션 종료 쿼리

연결된 SimpleOracle프로그램 강제 세션종료 -> SID : 8 , SERIAL# ; 915

--ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;
ALTER SYSTEM KILL SESSION '8,915' IMMEDIATE;

 

 

출처: https://rypro.tistory.com/157

 * 오라클 DB 입력이 일정시간동안 없을 때 연결이 끊기는 현상


확인해야 할 것
1)
select PROFILE
     , RESOURCE_NAME
     , RESOURCE_TYPE
     , LIMIT
from dba_profiles
where profile = 'DEFAULT'
order by 1,2;

결과에서 IDLE_TIME 이 15일 경우 15분 동안 입력 없을 시 끊김

 


2)
select VALUE from v$parameter where name = 'resource_limit'

결과에서 TRUE일 경우 일정시간동안 입력 없을 시 연결 끊김


* 변경 방법
1) IDLE_TIME 을 UNLIMITED로 수정
alter profile default limit idle_time UNLIMITED;


--IDLE_TIME 을 1분으로 수정 쿼리
--alter profile default limit idle_time 1;

2)resource_limit 수정
alter system set resource_limit = FALSE;

NVL 의 용도 : NULL 체크 후 치환 

select NVL(COLUMN1, 'Empty') 일 경우 COLUMN1이 NULL이면 'Empty'로 치환해서 출력

                                                                     NULL이 아니면 원래 값 출력

WHERE절에 사용될 경우   COLUMN1이 NULL이면 치환된 값이 반환되어  우변의 값과 비교하여 참,거짓 판별

                                                    NULL이 아닐 경우 원래 값과 우변의 값을 비교하여 참 거짓 판별

 

쿼리 예시

테이블명: ZTESTNVL
컬럼명: COLUMN1 , COLUMN2
현재 데이터



select * from ZTESTNVL;




select NVL(COLUMN1, 'Empty') from ZTESTNVL;



select COLUMN2 from ZTESTNVL WHERE NVL(COLUMN1,'EMPTY') = 'EMPTY';




select COLUMN2 from ZTESTNVL WHERE NVL(COLUMN1,'EMPTY') = 'EXIST';



 

 

에러내용

변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면 다음 테이블을 삭제하고 다시 만들어야 합니다.
다시 만들 수 없는 테이블을 변경했거나 [테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함] 옵션을 설정했습니다.

 

도구 - 옵션 - 디자이너 - 테이블 및 데이터베이스 디자이너 - 테이블을 다시 만들어야 하는 변경 내용 저장 안 함(S)

- 체크해제

 

 

 

 

참고 : https://docs.microsoft.com/ko-kr/troubleshoot/sql/ssms/error-when-you-save-table

데이터베이스 이름 옆에 (주의 대상) 나타날때

 

MSSQL 관리자 권한으로 실행

 

EXEC sp_resetstatus '데이터베이스명';
ALTER DATABASE 데이터베이스명 SET EMERGENCY
DBCC checkdb('데이터베이스명')
ALTER DATABASE 데이터베이스명 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('데이터베이스명', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE 데이터베이스명 SET MULTI_USER

예시)

EXEC sp_resetstatus 'CELL_SURFACE';
ALTER DATABASE CELL_SURFACE SET EMERGENCY
DBCC checkdb('CELL_SURFACE')
ALTER DATABASE CELL_SURFACE SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('CELL_SURFACE', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE CELL_SURFACE SET MULTI_USER

 

출처 : https://idchowto.com/?p=5815

+ Recent posts