ORA-29283 : 파일 조작이 올바르지 않습니다. ORA-06512 : "SYS.UTL_FILE"행의 536


5

다음은 테이블에서 플랫 파일로 데이터를 추출하는 데 사용하는 코드입니다.

BEGIN 
    DECLARE 
     file_name VARCHAR2(50); 
     file_handle utl_file.file_type; 
BEGIN 
    file_name := 'table.txt'; 
    file_handle := utl_file.fopen('SEND',file_name,'W'); 
FOR rec in(
    SELECT   column 1 
       ||'~'||column 2 
       ||'~'||column 3 out_line 
    FROM table1)LOOP 
UTL_FILE.PUT_LINE(file_handle,rec.out_line); 
UTL_FILE.FFLUSH(file_handle); 
END LOOP; 
UTL_FILE.FCLOSE(file_handle); 
END; 
end; 

이 코드는 개발 데이터베이스에서 정상적으로 작동하지만 새로운 DB에서 실행하면 아래 오류가 발생합니다.


Oracle directory 'SEND' points to some UNIX directory which has rights as 
     'rwxrwsr-x' (Octal 2775) 
Oracle Version:11g 

Error starting at line 1 in command: 
    BEGIN 
    DECLARE 
     file_name VARCHAR2(50); 
     file_handle utl_file.file_type; 
BEGIN 
    file_name := 'table.txt'; 
    file_handle := utl_file.fopen('SEND',file_name,'W'); 
FOR rec in(
    SELECT   column 1 
       ||'~'||column 2 
       ||'~'||column 3 out_line 
    FROM table1)LOOP 
UTL_FILE.PUT_LINE(file_handle,rec.out_line); 
UTL_FILE.FFLUSH(file_handle); 
END LOOP; 
UTL_FILE.FCLOSE(file_handle); 
END; 
end; 

Error report: 
ORA-29283: invalid file operation 
ORA-06512: at "SYS.UTL_FILE", line 536 
ORA-29283: invalid file operation 
ORA-06512: at line 7 
29283. 00000 - "invalid file operation" 
*Cause: An attempt was made to read from a file or directory that does 
      not exist, or file or directory access was denied by the 
      operating system. 
*Action: Verify file and directory access privileges on the file system, 
      and if reading, verify that the file exists. 

나를이 문제를 해결하는 데 도움이 바랍니다.

이 질문을 해결하기 위해 더 많은 데이터가 필요하면 알려주십시오.

  0

은 (는) 새 DB에서 SEND 디렉토리가 생성 되었습니까? 새 DB에있는 DB 사용자는 DB-DIRECTORY 오브젝트에 대해 READ 및 WRITE 권한을 가지고 있습니까? 16 may. 112011-05-16 08:47:34

  0

'SEND'에 대한 명시 적 경로를 사용해 보셨습니까? 누가 폴더를 소유합니까? 사용 권한을 rwxrwsrwx로 변경하면 작동합니까? 16 may. 112011-05-16 08:48:22

  0

@schurik : 예, 디렉토리가 새 DB에 있으며 oracle 디렉토리에 READ 및 WRITE 권한이 있습니다. @forsvairr : SEND 대신 명시 적 경로를 사용할 수 있습니까? 그러면 어떻게 할 수 있니? 나는 오라클 디렉토리가 경로를 지정하는 유일한 방법이라고 생각했습니다. 디렉토리의 권한을 변경할 수 없으며 액세스 할 수 없습니다. 이 폴더는 'build'가 소유하고 있으며 사용자 'batch'는이 폴더에 파일을 생성합니다. 두 사용자 모두 '빌드'와 '배치'가 같은 그룹 16 may. 112011-05-16 09:08:08

+1

에 있고 OS- 사용자가 실행중인 새로운 DB-Instance (oracle-processes의 소유자)는 무엇입니까? 그는 SEND-UNIX 디렉토리에 액세스 할 수 있습니까? 16 may. 112011-05-16 09:35:55

+1

'oracle'사용자가 생성 한 파일은 개발 데이터베이스에서 발견되었습니다. 파일을 만들려고하는 디렉토리에 'others'및 user 'oracle'에 대한 쓰기 권한이 없기 때문에이 오류가 발생합니다. 'others'범주 아래에옵니다. 도와 주셔서 감사합니다 :) 16 may. 112011-05-16 10:16:54

+1

[UTL_FILE.FOPEN() 프로 시저가 디렉토리에 대한 경로를 허용하지 않을 수 있습니까?] (http://stackoverflow.com/questions/2751113/utl-file-fopen-procedure-not-accepting) -path-for-directory) 16 may. 112011-05-16 13:31:57

  0

@scurik : 답변으로 의견을 게시하십시오. 그래서 나는 그것을 '받아 들일 수있다'라는 질문을 ' 17 may. 112011-05-17 10:42:02

5

그래서 @Vivek는 실제 답변이 아닌 설명의 대화를 통해 문제에 대한 해결책을 얻었습니다. 누가 SO가 Q라고 말합니까 & 사이트가 아닌 포럼입니까? 어, 나, 다른 사람들 사이.

어쨌든이 질문에 대한 대답이 없으면 UTL_FILE.FOPEN()의 주제에 대한 답변을 볼 수 있습니다. Find it here.

P. 이 질문에 대한 적절한 대답이 아니기 때문에이 답변 커뮤니티 위키를 표시하고 있습니다. 다른 곳으로 리디렉션하는 것입니다.

+2

+1'으로 만든다. 나는 의견을 통해 질문에 대답하는 경향을 이해하지 못한다. 17 may. 112011-05-17 03:03:00


-1

는 파일이 이미 이름이 "table.txt" 1. 변경 파일 sudo는 대한 Chown {사용자 이름}에 대한 소유권 미리 정의 된 디렉토리에 생성됩니다 가정 : {사용자 이름} 2 변경 모드를 table.txt 파일의 sudo chmod 777 table.txt

이제 시도해야합니다 !!!!