들어가며
회사에서 "MySql" -> "Oracle"로 마이그레이션 하는 업무를 맡게 되었는데,
마이그레이션 자체도 처음이고, oracle도 처음 써보다보니, 마이그레이션 과정에서 꽤 많은 오류를 마주쳤다.
이 글을 시작으로 오라클을 사용하면서 생겼던 오류와 해결 방식, 그리고 알게된 오라클 정보 등을 정리해보고자 한다.
SQL DEVELOPER 에서 MYSQL -> ORACLE로 마이그레이션을 위해 모든 세팅을 하고, 완료를 눌렀을때, 다음 화면과 같은 에러가 발생했다.

ORA-01400: cannot insert NULL into ("MOJ", "MD_PROJECTS"."ID")
이 에러는 NULL이 허용되지 않는 필드에 null값을 삽입하려고 할 때 발생하는 오류인데,
나의 경우에는,, 내가 저 테이블을 만든 적도 없을뿐더러 null을 넣으려고 한 적도 없다.
단지 마이그레이션 시작하자마자 나온 오류일뿐 !__!
내 생각은
"MD_PROJECTS"의 경우에는 아마 마이그레이션 할 때 자동으로 생기는 테이블중 하나인 듯 하고,
위와 같은 에러가 생긴 이유는 null값을 넣으려고 한 행동(?)과 상관없이 사용자 권한이 제대로 설정되어있지 않아서,,, 발생한 오류가 아닐까 생각한다 (내가 이와 같이 생각한 이유는 해결방법과 관련있다.)
위에 말했듯이, 사용자 권한과 관련된 문제라고 생각한 이유는
사용자에게 최고 권한인 DBA를 부여했을 때 해당 에러는 해결됐기때문이다.
즉, 마이그레이션을 할 스키마에게 sys사용자가 권한을 줘야한다.
GRANT DBA TO [스키마이름(유저이름)]; 로 주면 되는데,
반드시 마이그레이션을 시도하기 전, "MD_PROJECTS" 테이블이 생성되기 전에 미리 권한을 부여해줬어야한다.
그럼 왜 DBA 권한을 주면 해결이 될까?? 왜 문제가 발생했던 걸까??
그리고 DBA란 무엇일까에 대한 궁금증이 생겼다.
1. 왜 문제가 발생했을까?
따라서 이러한 권한을 유저가 가지고 있지 않아서 발생한 문제였던 것이다.
2. DBA란 무엇이고, 왜 해당 권한을 주면 해결이 될까 ?
❗️다만, dba 권한을 주면서 주의할 점은,
모든 권한을 설정해주는 것이므로, 해당 유저가 다른 유저의 스키마를 삭제한다던가 변경한다던가 하는 보안 및 데이터 무결성 문제를 발생시킬 수 있다.
그렇기에, DBA 권한이 아닌 시퀀스 또는 트리거를 생성하고 실행할 수 있는 최소한의 권한만 부여하는 것이 안전한 방법이다.
나는 로컬에서 테스트해본 것이라 dba 권한을 주는 것으로 끝났지만, 이후 실전에 적용할때에는 최소한의 권한만 주고 테스트해볼 예정이다..!!
결론은
GRANT DBA TO [스키마이름(유저이름)];
이런식으로 권한을 부여하면 오류는 해결된다!