ORA-29283 안녕하세요 세계

6034 단어 sqldatabase
최근에 긴 Oracle PL/SQL 스크립트를 편집할 때 "ORA-29283"또는 "잘못된 파일 작업"오류가 발생했습니다. 더 짧은 "hello world"PL/SQL 스크립트는 내 문제를 좁히는 데 도움이 되었습니다.

DECLARE
  v_file UTL_FILE.file_type;
BEGIN
  v_file := UTL_FILE.fopen('DIR_SHORTNAME', 'FILENAME.txt', 'w');
END;
/

Tim Hall's Oracle PL/SQL "CSV" package을 .





안타깝게도 .generate() 프로시저가 실행될 때 오류를 반환했습니다.

ORA-29283: invalid file operation

내 PL/SQL 코드의 본문에서 Tim이 호출한 .generate() 절차를 실행하면 오류가 발생했습니다.

generate('my_oracle_directory_name', 'my_filename.csv', p_query => 'SELECT * FROM sample_table_name');

동료들과 나는 스택 추적에서 다음과 같은 Tim의 코드 부분에 멈춘 것을 볼 수 있었습니다.

IF g_out_type = 'F' THEN
  l_file := UTL_FILE.fopen(p_dir, p_file, 'w', 32767);
END IF;

"간단한"문제를 제거하기 위해 Ask Tom forums에서 제안한 SQL 쿼리를 실행해 보았습니다.

먼저 "Oracle 디렉토리"my_oracle_directory_name가 존재하는지 확인했습니다.

SELECT *
FROM all_directories
WHERE directory_name = 'my_oracle_directory_name';

다음으로 그들은 내 코드가 실행되고 있는 사용자가 "Oracle 디렉토리"로 표시되는 운영 체제 디렉토리에 대한 쓰기 권한이 있는지 확인했습니다my_oracle_directory_name.

SELECT *
FROM all_tab_privs
WHERE table_name = 'my_oracle_directory_name'
AND grantee = user
AND grantee = 'the_executing_oracle_username'
AND privilege = 'WRITE';

그것들은 문제가 아니었으므로 Ask에서 제안한 대로 운영 체제의 폴더에 문제가 발생했는지 또는 운영 체제의 "Oracle 사용자"가 해당 OS 폴더에 데이터를 쓸 수 있는 권한에 문제가 발생했는지 확인하는 단계로 넘어갈 때였습니다. 톰.

우리는 DBA/sysamin으로 이에 대해 문의해야 했기 때문에 utl_file.fopen()가 표시된 디렉토리에 대해 "쓰기"모드에서 작동하는지 테스트하기 위해 "hello world"역할을 할 수 있는 5줄 PL/SQL 스크립트를 작성했습니다. my_oracle_directory_name 여부:

DECLARE
  v_file UTL_FILE.file_type;
BEGIN
  v_file := UTL_FILE.fopen('my_oracle_directory_name', 'my_filename.csv', 'w');
END;
/

짧은 스크립트를 제공하는 것이 도움이 되었습니다. 왜냐하면 시스템 관리자가 최근 일부 파일 시스템 "개선 사항"의 사상자로 판명된 것을 걱정 없이 디버깅하고 수정하면서 "작동하지 않음"에서 "작동 중"으로 스크립트가 변경되는 것을 시스템 관리자 및 DBA가 신속하게 볼 수 있었기 때문입니다. Tim Hall 코드의 내부 작동에 대해.

좋은 웹페이지 즐겨찾기