DML过程中记录错误日志
当你插入几百万数据时,因为有几条脏数据而导致插入失败,是不是非常恼火。Oracle 10g R2之后有个新功能,将插入过程中失败的记录
当你插入几百万数据时,因为有几条脏数据而导致插入失败,是不是非常恼火。Oracle 10g R2之后有个新功能,,将插入过程中失败的记录插入到另一张表中。
SQL> drop table test purge;
SQL> drop table test_bad purge;
SQL> create table test as select * from dba_objects where 11;
SQL> execute dbms_errlog.create_error_log('test','test_bad');
create table TEST
(
OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(128),
SUBOBJECT_NAME VARCHAR2(30),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE VARCHAR2(19),
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19),
STATUS VARCHAR2(7),
TEMPORARY VARCHAR2(1),
GENERATED VARCHAR2(1),
SECONDARY VARCHAR2(1),
NAMESPACE NUMBER,
EDITION_NAME VARCHAR2(30)
);
create table TEST_BAD
(
ORA_ERR_NUMBER$ NUMBER,
ORA_ERR_MESG$ VARCHAR2(2000),
ORA_ERR_ROWID$ UROWID(4000),
ORA_ERR_OPTYP$ VARCHAR2(2),
ORA_ERR_TAG$ VARCHAR2(2000),
OWNER VARCHAR2(4000),
OBJECT_NAME VARCHAR2(4000),
SUBOBJECT_NAME VARCHAR2(4000),
OBJECT_ID VARCHAR2(4000),
DATA_OBJECT_ID VARCHAR2(4000),
OBJECT_TYPE VARCHAR2(4000),
CREATED VARCHAR2(4000),
LAST_DDL_TIME VARCHAR2(4000),
TIMESTAMP VARCHAR2(4000),
STATUS VARCHAR2(4000),
TEMPORARY VARCHAR2(4000),
GENERATED VARCHAR2(4000),
SECONDARY VARCHAR2(4000),
NAMESPACE VARCHAR2(4000),
EDITION_NAME VARCHAR2(4000)
);
SQL> insert into test(owner) values(lpad('1',31,'aa'))
log errors into test_bad;
insert into test(owner) values(lpad('1',31,'aa'))
*
第 1 行出现错误:
ORA-12899: 列 "LCAM_TEST"."TEST"."OWNER" 的值太大 (实际值: 31, 最大值: 30)
SQL> insert into test(owner) values(lpad('2',30,'bb'))
log errors into test_bad;
已创建 1 行。
SQL> col ORA_ERR_NUMBER format a8;
SQL> col ORA_ERR_MESG$ format a50;
SQL> col OWNER format a20;
SQL> select to_char(ORA_ERR_NUMBER$) as ORA_ERR_NUMBER, ORA_ERR_MESG$, OWNER from test_bad;
ORA_ERR_ ORA_ERR_MESG$ OWNER
-------- -------------------------------------------------- --------------------
12899 ORA-12899: 列 "LCAM_TEST"."TEST"."OWNER" 的值太大 aaaaaaaaaaaaaaaaaaaa
(实际值: 31, 最大值: 30) aaaaaaaaaa1
SQL> select count(1) from test;
COUNT(1)
----------
1
SQL> drop table test1 purge;
SQL> drop table test_bad1 purge;
SQL> create table test1 as select * from dba_objects where 11;
SQL> alter table test1 modify object_id number(2);
SQL> execute dbms_errlog.create_error_log('test1','test_bad1');
SQL> insert into test1 select * from dba_objects
log errors into test_bad1;
insert into test1 select * from dba_objects
*
第 1 行出现错误:
ORA-01438: 值大于为此列指定的允许精度
SQL> select count(1) from test1;
COUNT(1)
----------
0
SQL> select count(1) from dba_objects where length(object_id) COUNT(1)
----------
106
--可以看到,上面的语句一有错误就回滚,需要写出下列语句
SQL> insert into test1 select * from dba_objects
log errors into test_bad1
reject limit unlimited;
已创建106行。
SQL> select count(1) from test1;
COUNT(1)
----------
106
SQL> select count(1) from dba_objects where length(object_id) COUNT(1)
----------
106
需要说明的是:
1.插入到错误日志是自治事务,不会影响主事务。
2.使用log error并不会使append失效,但写error不会使用直接路径插入。
3.违反唯一键或约束的更新运算会导致失败回滚。
Oracle DML流程
PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决
MySQL常用DDL、DML、DCL语言整理(附样例)
Oracle基本事务和ForAll执行批量DML练习
Oracle DML语句(insert,update,delete) 回滚开销估算
本文永久更新链接地址:

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











SQL*Plus 외에도 Oracle Database : SQL 개발자 : 무료 도구, 인터페이스 친화적 및 지원 그래픽 작업 및 디버깅을위한 도구가 있습니다. 두꺼비 : 비즈니스 도구, 기능이 풍부하며 데이터베이스 관리 및 튜닝이 우수합니다. PL/SQL 개발자 : PL/SQL 개발, 코드 편집 및 디버깅을위한 강력한 도구. DBeaver : 무료 오픈 소스 도구, 여러 데이터베이스를 지원하며 간단한 인터페이스가 있습니다.

Oracle Rac Hard Disk New 및 교체 작업 : 하드 디스크 추가 : 새 디스크 추가, ASM 디스크 그룹 생성, 클러스터에 추가하고 데이터 파일을 이동합니다. 하드 디스크 교체 : 실패 하드 디스크 식별, 디스크 그룹을 닫고, 하드 디스크를 교체하고, 디스크 그룹을 다시 열고, 실패한 디스크를 수리하고, 데이터 파일을 이동하십시오.

Oracle 테이블에 대한 여정 참조 프로세스 : 직접 방법 : All_dependencies 또는 User_ddictencies 데이터 사전보기를 사용하여 참조 된 테이블에 대한 저장된 절차, 기능 및 트리거를 찾습니다. 고급 기술 : PL/SQL 절차를 쓰기 위해 의존성을 재귀 적으로 찾을 수는 있지만 높은 비용으로. 동적 참조 : 위의 방법으로 동적 SQL 참조를 사용하는 것은 감지 할 수 없으며 추가 분석이 필요합니다. 성능 최적화 : 적절한보기 (all_dependencies 또는 user_dependencies)를 선택하고 인덱스를 추가하십시오. 좋은 습관 : 의존성이 찾는 것을 방지하기 위해 이름 지정 규칙, 모듈 식 코드 및 의견을 따르십시오.

Oracle Database는 신뢰할 수 있고 확장 가능하며 기능이 풍부한 관계형 데이터베이스 관리 시스템 (RDBMS)입니다. 이 아키텍처는 서버 측 구성 요소 (Oracle Net), 인스턴스, 공유 메모리 영역 (SGA), 배경 프로세스 및 데이터를 저장하는 데이터베이스 파일을 포함한 클라이언트 서버 모델을 따릅니다. 기본 개념에는 테이블, 행, 열, 기본 키, 외국 키, 인덱스 및 커서가 포함됩니다. 데이터베이스는 고 가용성, 빅 데이터 지원, 풍부한 기능, 강력한 보안 및 사용 편의성과 같은 장점으로 유명합니다.

Oracle 문자 세트를 수정하려면 다음을 수행해야합니다. 데이터베이스 백업; init.ora 파일에서 문자 세트 설정을 수정합니다. 데이터베이스를 다시 시작하십시오. 기존 테이블과 열을 수정하여 새 문자 세트를 사용하십시오. 데이터를 다시로드하십시오. 데이터베이스 링크 (선택 사항)를 수정하십시오.

Oracle은 여러 가지 중복 제거 쿼리 방법을 제공합니다. 별개의 키워드는 각 열에 고유 한 값을 반환합니다. 그룹 별 조항은 결과를 그룹화하고 각 그룹에 대해 비 반복 값을 반환합니다. 고유 한 키워드는 고유 한 행만 포함 된 인덱스를 만드는 데 사용되며 인덱스 쿼리는 자동으로 망상됩니다. row_number () 함수는 고유 한 숫자를 할당하고 1 행 만 포함하는 결과를 필터링합니다. 최소 () 또는 max () 함수는 숫자 열의 비 반복 값을 반환합니다. 교차 연산자는 두 결과 세트의 공통 값을 반환합니다 (중복 없음).

Oracle에는 시간을 얻는 방법이 있습니다. current_timestamp : 현재 시스템 시간을 반환합니다. Systimestamp : current_timestamp보다 나노 초보다 더 정확합니다. sysdate : 시간 부분을 제외하고 현재 시스템 날짜를 반환합니다. to_char (sysdate, 'yyy-mm-dd hh24 : mi : ss') : 현재 시스템 날짜와 시간을 특정 형식으로 변환합니다. 추출 : 1 년, 월 또는 시간과 같은 시간 값에서 특정 부분을 추출합니다.

Oracle에서 자동 백업을 활성화하려면 다음 단계를 따르십시오. 1. 백업 계획을 작성하십시오. 2. 백업 계획을 활성화합니다. 3. 백업 창을 예약하십시오. 자동 백업은 데이터베이스에 자동으로 연결하고, 변경 사항을 식별하고, 증분 백업을 만들고, 백업을 저장하고, 백업을 저장하고, 오래된 백업을 정리하여 관리 부담을 줄이고, 데이터 보호를 개선하고, 버전 제어를 제공하고, 성능을 최적화하고, 준수 지원을 지원합니다.
