Managing Tables

Het beheer van tabellen om de te herstellen20 Tafels beheren

over Tables

Tafels zijn de basiseenheid van gegevensopslag in een Oracle Database. Gegevens worden opgeslagen in rijen en kolommen. U definieert een tafel met een tafel naam, zoals werknemers. en een set van kolommen. Je geeft elke kolom een ​​naam kolom, zoals employee_id. achternaam. en job_id; een gegevenstype, zoals VARCHAR2. DATUM. of NUMBER; en een breedte. De breedte kan worden bepaald door het type gegevens, zoals in DATE. Als kolommen van de NUMMER data type te definiëren precisie en schaal in plaats van breedte. Een rij is een verzameling van kolom correspondeert met een enkele plaat.

U kunt regels opgeven voor elke kolom van een tabel. Deze regels worden genoemd integriteit constraints. Een voorbeeld is een NOT NULL integriteit beperking. Deze beperking dwingt de kolom een ​​waarde in elke rij bevatten.


U kunt transparante data-encryptie te roepen om gegevens te coderen voordat u deze opbergt. Als gebruikers proberen om de toegang tot de database controlemechanismen te omzeilen door te kijken binnen Oracle data bestanden rechtstreeks met het besturingssysteem gereedschappen, encryptie voorkomt dat deze gebruikers in het bekijken van gevoelige gegevens.

Tabellen kunnen ook virtuele columns. Een virtuele column is net als iedere andere tafel kolom, met dien verstande dat de waarde ervan wordt afgeleid door het evalueren van een expressie. De expressie kan omvatten kolommen uit dezelfde tabel, constanten, SQL functies en door de gebruiker gedefinieerde PL / SQL-functies. Je kunt niet expliciet schrijven naar een virtuele kolom.

Sommige soorten kolom, bijvoorbeeld LOB s, varrays en geneste tabellen worden opgeslagen in hun segmenten. LOB’s en varrays opgeslagen in LOB segmenten, terwijl geneste tabellen worden opgeslagen in opslag tabellen. U kunt een OPSLAG clausule voor deze segmenten dat de opslag parameters die aan de tafel niveau zal overslaan.

Nadat u een tabel te maken, je plaatst rijen van gegevens met behulp van SQL-instructies of het gebruik van een Oracle bulk load utility. Tabel gegevens kunnen vervolgens worden opgevraagd, verwijderd of bijgewerkt met SQL.

Hoofdstuk 18, "Managing schemaobjecten" voor meer informatie over andere aspecten van het beheer van tabellen, zoals het opgeven van integriteit beperkingen en analyseren van tabellen

Design Tables voor hen creëren

Het werken met de applicatie ontwikkelaar, overweeg dan de volgende richtlijnen bij het ontwerpen van tabellen:

Gebruik beschrijvende namen voor tabellen, kolommen, indexen en clusters.

Wees consistent in afkortingen en in het gebruik van enkelvoud en meervoud vormen van tafel namen en columns.

Documenteer de betekenis van elke tafel en zijn kolommen met de COMMENT commando.

Normaliseren elke tafel.

Kies het juiste datatype voor elke kolom.

Overweeg of uw toepassingen zou profiteren van het toevoegen van één of meer virtuele kolommen paar tafels.

Definieer kolommen die het mogelijk maken nullen laatste, om opslagruimte te besparen.

Cluster tafels waar nodig, om opslagruimte te besparen en het optimaliseren van de prestaties van SQL-statements.

Voordat u een tafel, moet je ook bepalen of de integriteit beperkingen te gebruiken. Integriteit beperkingen kan worden gedefinieerd op de kolommen van een tabel om de business rules van uw database automatisch af te dwingen.

Geef het type van tabel aanmaken

Hier zijn de soorten tabellen die u kunt maken:

Dit is de basis, voor algemene doeleinden soort tafel die is de voornaamste onderwerp van dit hoofdstuk. De gegevens worden opgeslagen als een ongeordende verzameling (hoop).

Een cluster is een tabel die deel uitmaakt van een cluster. Een cluster is een groep van tabellen die dezelfde datablokken delen omdat zij gemeenschappelijke kolommen en worden vaak gebruikt.

Clusters en geclusterde tabellen worden besproken in hoofdstuk 22, "Managing Clusters" .

In tegenstelling tot een gewone (-heap georganiseerde) tabel, worden de gegevens voor een index-georganiseerde tabel opgeslagen in een B-tree index structuur in een primaire sleutel gesorteerd manier. Naast het opslaan van de primaire sleutel kolom waarden van een index-georganiseerde tabel rij, elke index vermelding in de B-boom slaat de nonkey kolomwaarden ook.

Geef de locatie van elke tafel

Het is raadzaam om de TABLESPACE clausule in een CREATE TABLE opgeven om de tablespace die naar de nieuwe tabel op te slaan te identificeren. Voor gepartitioneerde tabellen, kunt u desgewenst de tablespace die moet elke partitie op te slaan te identificeren. Zorg ervoor dat u de juiste machtigingen en quota voor elke tablespaces die u gebruikt. Als u geen tablespace in een CREATE TABLE opgeeft, wordt de tabel gemaakt in uw standaard tablespace.

De volgende situaties illustreren hoe het niet opgeven van een tablespace, of het opgeven van een ongepast one, kan de prestaties beïnvloeden:

Als gebruikers ‘ voorwerpen zijn gecreëerd in het systeem tablespace, kunnen de prestaties van de database te lijden, aangezien beide data dictionary-objecten en gebruikersobjecten moeten strijden voor het zelfde gegevensbestanden. voorwerpen vastgesteld moeten niet worden opgeslagen in het systeem eetlepel. Om dit te voorkomen, ervoor te zorgen dat alle gebruikers standaard tablespaces worden toegewezen wanneer ze zijn gemaakt in de database.

Overweeg parallelizing Table Creation

U kunt parallel uitvoeren gebruiken bij het maken van tabellen met behulp van een subquery (AS SELECT) in de instructie CREATE TABLE. Omdat meerdere processen samenwerken om de tabel te maken, worden de prestaties van de tafel creatie operatie verbeterd.

Parallelizing tafel creatie wordt besproken in de sectie "Parallelizing Table Creation" .

Overweeg het gebruik van NOLOGGING Wanneer Tabellen aanmaken

Een tabel maken het meest efficiënt gebruik maken van de NOLOGGING clausule in de CREATE LIJST. AS SELECT-instructie. De NOLOGGING clausule veroorzaakt minimale redo informatie die moet worden gegenereerd tijdens de tafel schepping. Dit heeft de volgende voordelen:

Space wordt opgeslagen in de redo log files.

De tijd die het duurt om de tafel te creëren wordt verminderd.

Prestaties verbeteren voor parallelle creatie van grote tafels.

De NOLOGGING clausule bepaalt ook dat volgend direct ladingen met behulp van SQL * Loader en directe belasting INSERT operaties niet ingelogd. Latere DML statements (UPDATE. DELETE. En conventionele pad insert) worden niet beïnvloed door de NOLOGGING attribuut van de tafel en het genereren van redo.

Als je niet kan veroorloven om de tafel te verliezen nadat u deze hebt gemaakt (bijvoorbeeld, heb je geen toegang meer tot het wordt gebruikt om de tabel te maken van gegevens) moet u een back-up onmiddellijk na de tabel wordt gemaakt. In sommige situaties, zoals tabellen die zijn gemaakt voor tijdelijk gebruik, kan deze voorzorgsmaatregel niet nodig.

In het algemeen is de relatieve prestatieverbetering specificeren NOLOGGING groter voor groter tabellen dan voor kleinere tafels. Voor kleine tafels, NOLOGGING weinig effect op de tijd die nodig is om een ​​tabel. Echter, voor grotere tafels de prestatieverbetering aanzienlijk kunnen zijn, zeker als ook parallelizing de tafel schepping.

Overweeg het gebruik van Table Compression

Als uw database groeit in omvang, overwegen gebruik te maken tafel compressie. Compressie bespaart schijfruimte, vermindert het geheugengebruik in de database buffer cache, en kan aanzienlijk versnellen uitvoeren van query tijdens leest. Compression heeft een kostprijs CPU overhead voor data laden en DML. Echter, kan dit de kosten worden gecompenseerd door lagere I / O-eisen.

Tabel compressie is volledig transparant voor applicaties. Het is nuttig in beslissingsondersteunende systemen (DSS), online transaction processing (OLTP) systemen, en archivering systemen.

U kunt compressie opgeven voor een tablespace, een tafel of een partitie. Als gespecificeerd op de tablespace niveau, dan alle tabellen die in dat tablespace worden standaard gecomprimeerd.

Compressie kan plaatsvinden terwijl de gegevens worden opgenomen, bijgewerkt of bulk geladen in een tabel. Bewerkingen die compressie mogelijk maken omvatten:

Single-rij of matrix inserts en updates

De volgende directe-pad INSERT methoden:

Direct pad SQL * Loader

CREATE TABLE AS SELECT-instructies

Parallel INSERT statements

INSERT statements met een APPEND of APPEND_VALUES hint

Oracle Database ondersteunt verschillende methoden van tafel compressie. Zij worden samengevat in Tabel 20-1.

Tabel 20-1 tafel compressiemethoden

Als je basic compressie, magazijn compressie, of archief compressie, compressie treedt alleen op wanneer de gegevens is bulk geladen in een tabel.

Wanneer u OLTP compressie, compressie optreedt terwijl gegevens worden ingevoegd, bijgewerkt of bulk geladen in een tabel. Bewerkingen die compressie mogelijk maken omvatten:

Single-rij of matrix inserts en updates

Inserts en updates worden niet onmiddellijk gecomprimeerd. Bij het bijwerken van een reeds gecomprimeerd blok, blijven geen kolommen die meestal niet worden bijgewerkt gecomprimeerd. Bijwerken kolommen in een niet gecomprimeerd formaat vergelijkbaar met elke gecomprimeerde blok. De bijgewerkte waarden worden opnieuw gecomprimeerd wanneer het blok van een database gestuurde drempel bereikt. Ingevoegde gegevens wordt ook gecomprimeerd wanneer de gegevens in het blok een database gestuurde drempel bereikt.

De volgende directe-pad INSERT methoden:

Direct pad SQL * Loader

CREATE TABLE AS SELECT-instructies

Parallel INSERT statements

INSERT statements met een APPEND of APPEND_VALUES hint

Basic compressie comprimeert gegevens ingebracht door directe belasting pad alleen en ondersteunt beperkte data types en SQL-bewerkingen. OLTP compressie bedoeld voor OLTP applicaties en comprimeert gemanipuleerd door een SQL-bewerking.

Warehouse compressie en archief compressie bereiken van de hoogste compressie niveaus, omdat ze gebruik maken van Hybrid Zuilvormige compressie technologie. Hybride Zuilvormige Compression-technologie maakt gebruik van een gewijzigde vorm van zuilvormige opslag in plaats van rij-grote opslag. Hierdoor kan de database gelijkwaardig bewaren samen, die de effectiviteit van compressie algoritmen verbetert. Voor gegevens die worden bijgewerkt, Hybrid zuilvormige compressie gebruikt meer CPU en beweegt de bijgewerkte rij naar rij-formaat, zodat toekomstige updates zijn sneller. Als gevolg van deze optimalisatie, je moet het alleen gebruiken voor data die niet vaak wordt bijgewerkt.

De hogere compressie niveaus van Hybrid Zuilvormige compressie worden alleen bereikt met de gegevens die direct-pad geplaatst. Conventionele inserts en updates worden ondersteund, maar oorzaak rijen te worden verplaatst van zuilvormige tot formaat roeien, en het compressieniveau te verminderen.

Ongeacht de compressiemethode, DELETE operaties op een gecomprimeerd blok zijn identiek aan operaties DELETE op een niet-gecomprimeerde block. Elke ruimte verkregen op een data blok, veroorzaakt door SQL DELETE operaties, wordt hergebruikt door latere SQL INSERT operaties. Hybrid zuilvormige compressietechnologie, wanneer alle rijen in een drukeenheid worden verwijderd, de ruimte in de drukeenheid beschikbaar voor hergebruik.

Tabel 20-2 geeft kenmerken van elke tafel compressiemethode.

Tabel 20-2 tafel compressie Kenmerken

Table Compression Method

Deze compressie methode kan resulteren in een hoge CPU-overhead.

Bijgewerkte rijen en rijen ingevoegd zonder directe pad insert worden opgeslagen in de rij-indeling in plaats van de kolommen formaat, en hebben dus een lager compressieniveau.

U specificeert tafel compressie met de COMPRESS clausule van de instructie CREATE TABLE. U kunt compressie voor een bestaande tabel mogelijk te maken door het gebruik van deze clausules in een ALTER TABLE. In dit geval wordt alleen gegevens die worden ingevoegd of bijgewerkt na compressie ingeschakeld wordt samengedrukt. Op dezelfde manier kun je tafel compressie voor een bestaande gecomprimeerd tafel met de ALTER TABLE uit te schakelen. Nocompress verklaring. In dit geval worden alle gegevens die reeds gecomprimeerd blijft samengedrukt en nieuwe data ongecomprimeerde geplaatst.

Het kompres voor de zoekopdracht HIGH optie is de standaard data warehouse-compressie-modus. Het zorgt voor een goede compressie en de prestaties bij het gebruik van hybride Zuilvormige Compression op Exadata opslag. De optie COMPRESS voor de zoekopdracht LOW dient te worden gebruikt in omgevingen waar de belasting prestaties is van cruciaal belang. Het laadt sneller dan de gegevens gecomprimeerd met de COMPRESS voor de zoekopdracht HIGH optie.

De COMPRESS voor Archive LOW optie is de standaard-archief compressie-modus. Het zorgt voor een hoge compressie-niveau en is ideaal voor niet vaak benaderde data. De COMPRESS voor Archive HIGH optie moet worden gebruikt voor data die zelden wordt benaderd.

Een compressie adviseur, die door de DBMS_COMPRESSION pakket, helpt u om de verwachte compressieniveau voor een bepaalde tafel met een bepaalde compressiemethode te bepalen.

Zuilvormige hybride compressie is afhankelijk van het onderliggende opslagsysteem. Zie Oracle Database Licensing Informatie voor meer informatie.

Oracle Database concepten voor een overzicht van tafel compressie

Voorbeeld 20-1 Een Tafel met OLTP Table Compression

Het volgende voorbeeld maakt OLTP tafel compressie op de tafel bestellingen:

Gegevens voor de tabel Orders wordt gecomprimeerd tijdens zowel directe pad INSERT en conventionele DML.

Voorbeeld 20-2 Een Tafel met Basistabel Compression

De volgende verklaringen, die gelijkwaardig zijn, in staat elementaire tafel compressie op de sales_history tafel, dat is een feit tafel in een data warehouse:

Frequente zoekopdrachten worden uitgevoerd tegen deze tafel, maar geen DML wordt verwacht.

Voorbeeld 20-3 Met behulp van Direct-Pad invoegen om Rijen invoegen in een tabel

Dit voorbeeld toont het gebruik van de APPEND hint om rijen in de sales_history tafel met behulp van direct-pad in te voegen.

Voorbeeld 20-4 Het creëren van een tabel met Warehouse Compression

Dit voorbeeld maakt Hybrid Zuilvormige Compression op tafel sales_history:

De tafel is gemaakt met de standaard COMPRESS voor de zoekopdracht HIGH optie. Deze optie biedt een hogere mate van compressie dan basis- of OLTP compressie. Het werkt goed als de belasting prestaties is van cruciaal belang, vaak query’s worden uitgevoerd voor deze tabel, en er geen DML wordt verwacht.

Voorbeeld 20-5 Het creëren van een tabel met Archive Compression

Het volgende voorbeeld maakt Hybrid Zuilvormige Compression op tafel sales_history:

De tafel is gemaakt met de standaard COMPRESS voor Archive LOW optie. Deze optie biedt het hoogste niveau van compressie en werkt goed voor onregelmatig benaderde data.

Compressie en gepartitioneerde tabellen

Een tabel kan zowel gecomprimeerde en ongecomprimeerde partities en verschillende partities kunnen verschillende compressiemethoden te gebruiken. Als de compressie-instellingen voor een tafel en een van de wanden niet overeenkomen, dan is de scheidingswand instelling voorrang voor de partitie.

Om de compressie-methode te veranderen voor een partitie, een van de volgende:

Om de compressiemethode voor nieuwe gegevens alleen te veranderen, gebruik ALTER LIJST. WIJZIGING partitie. SAMENDRUKKEN.

Om de compressiemethode voor zowel nieuwe als bestaande gegevens te wijzigen, gebruikt u een ALTER TABLE. MOVE partitie. SAMENDRUKKEN. of online tafel herdefiniëring.

Bepalen of een tabel wordt gecomprimeerd

In het * _TABLES standpunten data dictionary, hebben gecomprimeerd tabellen ingeschakeld in de COMPRESSION kolom. Voor gepartitioneerde tabellen, deze kolom is null, en de COMPRESSION kolom van de * _TAB_PARTITIONS uitzicht geeft aan de partities die worden gecomprimeerd. Bovendien, de kolom COMPRESS_FOR geeft de compressiemethode gebruikt voor de tafel of partitie.

Het bepalen welke rijen worden gecomprimeerd

Wanneer Hybride zuilvormige compressie tabellen zijn bijgewerkt, de rijen overgaan op een lager compressieniveau, zoals van compressie magazijn (QUERY HIGH) naar OLTP compressie of geen compressie. Om het compressieniveau van een rij te bepalen, gebruikt u de GET_COMPRESSION_TYPE functie in de DBMS_COMPRESSION pakket.

Bijvoorbeeld de volgende query retourneert het type compressie voor een rij in de hr.employees tabel:

Door het bemonsteren van de tabel rijen, kunt u het percentage van de rijen die niet langer op de hogere compressie-niveau vast te stellen. U kunt ALTER TABLE of MOVE PARTITION gebruiken om een ​​hogere compressie niveau op te geven. Bijvoorbeeld, als 10 procent van de rijen niet meer op het hoogste compressieniveau, dan kun je de tafel te wijzigen of verplaats de partitie naar een hoger compressieniveau opgeven.

Het veranderen van het compressieniveau

U kunt het compressieniveau voor een partitie, tafel of tablespace veranderen. Stel bijvoorbeeld dat een bedrijf maakt gebruik van warehouse compressie voor de verkoop van gegevens, maar de verkoop van gegevens die ouder zijn dan zes maanden is zelden toegankelijk. Indien de verkoopgegevens worden opgeslagen in een tabel die is verdeeld op basis van de leeftijd van de gegevens en vervolgens het compressieniveau voor de oudere gegevens worden veranderd naar archief compressie om schijfruimte vrij.

Als een tabel wordt gepartitioneerd, dan is de DBMS_REDEFINITION pakket kan het compressieniveau van de tabel te wijzigen. Dit pakket voert online herdefiniëring van een tafel bij het creëren van een tijdelijke kopie van de tabel die de tabel gegevens bevat terwijl het wordt geherdefinieerd. De tafel wordt geherdefinieerd beschikbaar blijft voor vragen en DML-instructies tijdens de herdefiniëring. De hoeveelheid vrije ruimte voor online tafel herdefiniëring afhankelijk van de relatieve compressie niveau van de bestaande tabel en de nieuwe tabel. Zorg ervoor dat u voldoende schijfruimte op uw systeem voordat u de DBMS_REDEFINITION pakket.

Als een tabel niet is gepartitioneerd, dan kunt u de ALTER tabel gebruiken. MOVE. COMPRESS VOOR. verklaring aan het compressieniveau te veranderen. De ALTER TABLE. MOVE verklaring is niet van DML statements toe ten opzichte van de tafel, terwijl de opdracht wordt uitgevoerd.

Om het compressieniveau voor een partitie te veranderen, gebruik maken van de ALTER TABLE. WIJZIGING PARTITION verklaring. Om het compressieniveau voor een tablespace wijzigen, gebruikt u de instructie ALTER TABLESPACE.

"Het verplaatsen van een tafel om een ​​nieuw segment of Tablespace" voor aanvullende informatie over de ALTER TABLE opdracht

Oracle Database PL / SQL-pakketten en types Verzoek om aanvullende informatie over de DBMS_REDEFINITION pakket

Het toevoegen en Dropping Kolommen in gecomprimeerde tabellen

De volgende beperkingen zijn van toepassing bij het toevoegen van kolommen van gecomprimeerde tabellen:

Basic compressie—U kunt een standaardwaarde voor een extra kolom niet opgeeft.

OLTP-compressie—Als een standaardwaarde is opgegeven voor een extra kolom, dan moet de kolom NOT NULL. Toegevoegd nullable kolommen met standaardwaarden worden niet ondersteund.

De volgende beperkingen zijn van toepassing wanneer het laten vallen van kolommen in gecomprimeerde tabellen:

Basic compressie—Het laten vallen van een kolom wordt niet ondersteund.

OLTP-compressie— DROP COLUMN wordt ondersteund, maar intern de database wordt de kolom niet gewend aan langlopende decompressie en hercompressie operaties te voorkomen.

Exporteren en importeren Hybrid Zuilvorm Compression Tables

Hybride Zuilvormige Compressie tabellen kunnen worden geïmporteerd met behulp van de impdp bevel van het nut Pump Gegevens importeren. Standaard wordt de impdp commando behoudt de tafel eigenschappen, en de geïmporteerde tafel is een hybride Zuilvormige Compression tafel. Op tablespaces niet ondersteunen Hybrid Zuilvorm Compression, de impdp opdracht mislukt met een fout. De tafels kunnen ook worden geëxporteerd met behulp van de expdp commando.

U kunt de Hybrid zuilvormige Compression tafel te importeren als een ongecomprimeerde tafel met behulp van de transformatie: SEGMENT_ATTRIBUTES = n optie clausule van de impdp commando.

Een ongecomprimeerde of-OLTP gecomprimeerde tafel kan worden omgezet in Hybrid Zuilvormige Compressieformaat tijdens het importeren. Om een ​​niet-hybride Zuilvorm Compression tafel om te zetten in een hybride Zuilvorm Compression tafel, het volgende doen:

Geef standaard compressie voor de tablespace met behulp van de ALTER TABLESPACE. SET DEFAULT COMPRESS commando.

Voorrang op de optie SEGMENT_ATTRIBUTES van de geïmporteerde tafel tijdens het importeren.

Oracle Database Utilities voor meer informatie over het hulpprogramma Pump Gegevens importeren

Oracle Database SQL Taal Verzoek om meer informatie over de opdracht ALTER TABLESPACE

Het herstellen van een hybride Zuilvorm Compression Table

Er kunnen momenten zijn wanneer een hybride Zuilvormige compressie tabel moet worden hersteld vanaf een back-up. De tafel kan worden hersteld naar een systeem dat Hybrid Zuilvorm Compression ondersteunt, of een systeem dat niet ondersteunt Hybrid Zuilvorm Compression. Bij het herstellen van een tafel met Hybrid Zuilvormige Compression naar een systeem dat Hybrid Zuilvorm Compression ondersteunt, het herstel van het bestand met behulp van Oracle Recovery Manager (RMAN) zoals gewoonlijk.

Wanneer een hybride Zuilvormige Compression tafel is hersteld van een systeem dat niet ondersteunt Hybrid Zuilvorm compressie, moet u de lijst te zetten van Hybrid Zuilvormige Compression aan OLTP-compressie of een niet-gecomprimeerd formaat. Om de tabel te herstellen, doet u het volgende:

Zorg dat er voldoende opslag in de omgeving van de gegevens in ongecomprimeerde of OLTP-compressieformaat te houden.

Gebruik RMAN de Hybrid zuilvormige Compression tablespace te herstellen.

Voer een van de volgende handelingen uit om de tafel te zetten van Hybrid Zuilvormige Compression aan compressie of een niet-gecomprimeerd formaat OLTP:

Gebruik de volgende verklaring aan de datacompressie te veranderen van Hybrid Zuilvormige compressie te comprimeren VOOR OLTP:

Gebruik de volgende verklaring aan de datacompressie te veranderen van Hybrid Zuilvormige Compressie naar nocompress:

Gebruik de volgende verklaring aan elke partitie veranderen nocompress:

Verander elke partitie afzonderlijk.

Gebruik de volgende verklaring om de gegevens te verplaatsen naar nocompress parallel:

Overweeg versleutelen kolommen bevatten gevoelige gegevens

U kunt afzonderlijke tabelkolommen dat gevoelige gegevens bevatten te versleutelen. Voorbeelden van vertrouwelijke gegevens omvatten sofi-nummers, credit card nummers, en medische dossiers. Column encryptie is transparant voor uw toepassingen, met enkele beperkingen.

Hoewel encryptie niet is bedoeld om alle security problemen op te lossen, het doet uw gegevens van gebruikers die proberen om de echtheidskenmerken van de database en toegang tot de database-bestanden direct te omzeilen via het besturingssysteem te beschermen systeem bestandssysteem.

Column encryptie maakt gebruik van de transparante data-encryptie kenmerk van Oracle Database, die vereist dat u maakt een Oracle-portefeuille naar de master encryptie sleutel voor de database op te slaan. De portemonnee moet open zijn voordat u een lijst met gecodeerde kolommen kunnen maken en voordat u kunt opslaan of versleutelde gegevens op te halen. Wanneer u de portefeuille opent, is het beschikbaar voor alle sessies, en het blijft open tot u expliciet sluit of totdat de database is stilgelegd.

Transparante data-encryptie ondersteunt industrie-standaard encryptie-algoritmen, waaronder de volgende Advanced Encryption Standard (AES) en Triple Data Encryption Standard (3DES) algoritmen:

U kiest het algoritme te gebruiken wanneer u de tabel te maken. Alle gecodeerde kolommen in de tabel gebruikt hetzelfde algoritme. De standaard is AES192. De lengte encryptiesleutel wordt geïmpliceerd door de naam algoritme. Bijvoorbeeld, de AES128 algoritme 128-bits sleutels.

Als u van plan op het versleutelen van een groot aantal kolommen in een of meer tabellen, wilt u misschien overwegen het versleutelen van een hele tablespace plaats en het opslaan van deze tafels in dat tablespace. Tablespace encryptie, die ook gebruik maakt van de transparante data-encryptie-functie, maar versleutelt op het fysieke blokniveau, kan beter zijn dan het versleutelen van veel kolommen uit te voeren. Een andere reden om te versleutelen op de tablespace niveau is om de volgende beperkingen van kolom encryptie te pakken:

Als de VERENIGBAAR initialisatie parameter op 10.2.0, die het minimum transparante gegevenscodering mogelijk gegevens uit gecodeerde kolommen die betrokken is bij een soort of hash-join en die moeten worden geschreven naar een tijdelijke tablespace wordt in duidelijke tekst en derhalve blootgesteld aan aanvallen. U moet compatibel zijn ingesteld op 11.1.0 of hoger om ervoor te zorgen dat de gecodeerde gegevens geschreven naar een tijdelijke tablespace blijft versleuteld. Merk op dat voor zover verenigbaar is ingesteld op 10.2.0 of hoger, gegevens uit gecodeerde kolommen blijft gecodeerd wanneer geschreven aan de undo tablespace of redo log.

Bepaalde typen data, zoals type gegevensobject, worden niet ondersteund voor kolom encryptie.

U kunt geen gebruik maken van de vervoerbare tablespace functie voor een tablespace die tafels met gecodeerde kolommen omvat.

Dit zorgt voor een tijdelijke tabel die transactie specifiek. Een sessie wordt gebonden aan de tijdelijke tabel met een eerste transacties te voegen in de tabel. De binding verdwijnt aan het einde van de transactie. De database kapt de tafel (alle rijen verwijderen) na iedere commit.

Dit zorgt voor een tijdelijke tabel die sessie specifiek. Een sessie wordt gebonden aan de tijdelijke tabel met de eerste inzetstuk in de tabel in de sessie. Deze binding verdwijnt aan het eind van de sessie of door de uitgifte van een TRUNCATE van de tabel in de sessie. De database kapt de tafel wanneer u de sessie beëindigen.

Deze instructie maakt een tijdelijke tabel die transactie specifiek:

Indexen kunnen worden gemaakt op tijdelijke tabellen. Ze zijn ook tijdelijk en de gegevens in het register dezelfde sessie of transactiebereik als de gegevens in de onderliggende tabel.

Standaard worden de rijen in een tijdelijke tabel opgeslagen in de standaard tijdelijke tablespace van de gebruiker die het creëert. Echter, kunt u een tijdelijke tabel naar een andere tablespace over de schepping van de tijdelijke tabel toe te wijzen met behulp van de TABLESPACE clausule van CREATE GLOBAL tijdelijke tabel. U kunt deze functie gebruiken om de ruimte die wordt gebruikt door tijdelijke tabellen te behouden. Bijvoorbeeld, als je moet veel kleine tijdelijke tabel operaties uit te voeren en de standaard tijdelijke tablespace is geconfigureerd voor soort operaties en maakt dus een groot deel grootte, zullen deze kleine operaties verbruiken veel onnodige schijfruimte. In dit geval is het beter om een ​​tweede tijdelijke tablespace toe met een kleinere mate maat.

De volgende twee verklaringen maken een tijdelijke tablespace met een 64 KB mate grootte, en vervolgens een nieuwe tijdelijke tabel in die tablespace.

In tegenstelling tot de vaste tafels, tijdelijke tabellen en hun indexen niet automatisch een segment toe te wijzen wanneer ze worden gemaakt. In plaats daarvan worden de segmenten toegewezen wanneer de eerste INSERT (of CREATE TABLE AS SELECT) wordt uitgevoerd. Daarom, als een SELECT. BIJWERKEN. of DELETE wordt uitgevoerd vóór de eerste INSERT. Vervolgens wordt de tafel leeg.

DDL operaties (behalve TRUNCATE) zijn toegestaan ​​op een bestaande tijdelijke tabel alleen als er geen sessie moment is gebonden aan die tijdelijke tabel.

Als u een transactie terugdraaien, wordt de ingevoerde gegevens verloren, hoewel de tafel definitie aanhoudt.

Een transactie-specifieke tijdelijke tabel kan slechts één transactie tegelijk. Als er meerdere autonome transacties in één transactiebereik, kan elke autonome transactie de tabel alleen als de vorige begaat gebruiken.

Omdat de gegevens in een tijdelijke tabel is per definitie tijdelijk, back-up en herstel van tijdelijke tabelgegevens niet beschikbaar bij een systeemfout. Ter voorbereiding van een dergelijke storing, moet je alternatieve methoden voor het behoud van tijdelijke tabel gegevens te ontwikkelen.

Parallelizing Table Creation

Wanneer u de AS SELECT-clausule om een ​​tafel te maken en te vullen met gegevens uit een andere tabel opgeven, kunt u parallel uitvoeren gebruiken. De CREATE LIJST. AS SELECT-instructie bestaat uit twee delen: een deel CREATE (DDL) en een SELECT deel (vraag). Oracle Database kunt beide delen van de verklaring in parallel. CREATE deel parallelized indien een van de volgende voorwaarden wordt voldaan:

Een PARALLEL clausule is opgenomen in de CREATE LIJST. AS SELECT-instructie

Een ALTER SESSION kracht evenwijdig DDL-instructie is opgegeven

De query deel is geparalleliseerd als aan alle volgende voorwaarden is voldaan:

De query bevat een parallel hint specificatie (parallel of PARALLEL_INDEX) of de CREATE deel omvat de PARALLEL clausule of de in de vraag bedoelde schema objecten hebben een parallelle verklaring in verband met hen.

Ten minste één van de in de querytabellen vereist een volledige tabel scan of een indexlijst scan over meerdere partities.

Als u het creëren van een tabel in parallel, die tafel heeft dan een parallelle verklaring (de PARALLEL-clausule) die ermee verbonden zijn. Elke volgende DML of vragen op tafel, waarvan parallellisatie mogelijk is, zal proberen om parallel uitvoeren gebruiken.

De volgende eenvoudige verklaring parallelizes de oprichting van een tafel en slaat het resultaat in een gecomprimeerd formaat, met behulp van tabel compressie:

In dit geval, de PARALLEL clausule vertelt de database naar een optimaal aantal parallelle uitvoering servers selecteren wanneer de tabel.

Oracle Database VLDB en partitioneren voor gedetailleerde informatie over het gebruik van parallelle uitvoering

Over Direct-Path INSERT

Oracle Database voegt gegevens in een tabel op twee manieren:

Tijdens conventionele INSERT operaties. de databank hergebruikt vrije ruimte in de tabel, tussenvoeging nieuw ingevoegde gegevens met bestaande data. Tijdens dergelijke operaties, de database onderhoudt ook referentiële integriteit.

Tijdens directe pad INSERT operaties. database voegt de ingevoegde gegevens na bestaande gegevens in de tabel. Gegevens worden direct geschreven in gegevensbestanden, het omzeilen van de buffer cache. Vrije ruimte in de tabel wordt niet hergebruikt, en referentiële integriteit worden genegeerd. Direct-path INSERT kan aanzienlijk beter dan conventionele insert uit te voeren.

De database kan gegevens, hetzij in de seriële modus, waarbij het ene proces voert de verklaring, of parallel-modus, waarin meerdere processen tegelijk werken samen om één SQL-instructie draaien invoegen. Dit laatste wordt aangeduid als parallel uitvoeren.

De volgende zijn de voordelen van direct-pad INSERT:

Tijdens de direct-pad in te voegen. U kunt de registratie van redo uit te schakelen en inzendingen ongedaan te maken om de belasting te verminderen. Conventionele insert operaties, in tegenstelling, moet altijd aanmelden zoals inzendingen, omdat die activiteiten hergebruiken vrije ruimte en referentiële integriteit te behouden.

Direct-path INSERT operaties te waarborgen atomiciteit van de transactie, zelfs wanneer deze wordt uitgevoerd in parallel mode. Atomiciteit kan niet tijdens parallel ladingen direct-pad (met behulp van SQL * Loader) worden gegarandeerd.

Bij het uitvoeren van parallelle directe pad belastingen, een opmerkelijk verschil tussen de SQL * Loader en INSERT statements is het volgende: Als er fouten optreden tijdens parallel ladingen directe pad met SQL * Loader, de lading is voltooid, maar sommige indexen kon ONBRUIKBAAR aan het einde gemarkeerd van de last. Parallel met directe pad INSERT. in tegenstelling teruggedraaid de verklaring als er fouten optreden tijdens het index-update.

Een conventionele INSERT operatie controleert voor schendingen van de NOT NULL beperkingen tijdens de insert. Daarom, als een NOT NULL constraint wordt overtreden voor een conventionele INSERT operatie, dan is de fout geretourneerd tijdens het inzetstuk. Een directe pad INSERT operatie controleert voor schendingen van de NOT NULL beperkingen voor de insert. Daarom, als een NOT NULL constraint wordt overtreden voor een directe pad INSERT operatie, dan is de fout wordt geretourneerd voordat de insert.

Hoe Direct-Path INSERT Works

U kunt direct-pad INSERT te gebruiken op zowel gepartitioneerde en niet-gepartitioneerde tabellen.

Serial Direct-Pad invoegen in Gepartitioneerde of gepartitioneerde tabellen

De single proces voegt die verder gaat dan de huidige high water mark van de tafel segment of van elke partitie segment. (De high-water mark is het niveau waarop blokken nooit zijn geformatteerd om gegevens te ontvangen.) Wanneer een COMMIT wordt uitgevoerd, is de high-water mark aangepast aan de nieuwe waarde, waardoor de gegevens zichtbaar voor gebruikers.

Parallel Direct-Pad invoegen in gepartitioneerde tabellen

Deze situatie is vergelijkbaar met seriële INSERT direct-pad. Elk parallel uitvoeren server is toegewezen één of meer partities, met niet meer dan één proces aan één partitie. Elk parallel uitvoeren server voegt die verder gaat dan de huidige high-water mark van de toegewezen partitie segment (s). Wanneer een COMMIT wordt uitgevoerd, is de high-water mark van elke partitie segment bijgewerkt om de nieuwe waarde, waardoor de gegevens zichtbaar voor gebruikers.

Parallel Direct-Pad invoegen in gepartitioneerde tabellen

Elk parallel uitvoeren server wijst een nieuwe tijdelijke segment en voegt gegevens in die tijdelijke segment. Wanneer een COMMIT loopt, het parallel uitvoeren coördinator voegt de nieuwe tijdelijke segmenten in de primaire tabel segment, waar het toegankelijk voor gebruikers.

Laden van gegevens met Direct-Path INSERT

U kunt gegevens met direct-path INSERT te laden met behulp van directe pad INSERT SQL-statements, het invoegen van gegevens in de parallel-modus, of met behulp van de Oracle SQL * Loader nut in de modus direct-pad. Een directe pad INSERT kan in zowel serieel als parallel gebruikt.

Serial Mode Voegt met SQL-instructies

U kunt direct-pad INSERT in de seriële mode met SQL op de volgende manieren activeren:

Als u het uitvoeren van een INSERT met een subquery, geeft u de APPEND hint in elke INSERT, hetzij onmiddellijk na de INSERT trefwoord, of onmiddellijk na de SELECT zoekwoord in de subquery van de INSERT-instructie.

Als u het uitvoeren van een INSERT met de waarden clausule, geeft u de APPEND_VALUES hint in elke INSERT onmiddellijk na de INSERT trefwoord. Direct-pad INSERT met de waarden die clausule wordt het best gebruikt wanneer er honderdduizenden of miljoenen rijen te laden. Het typische gebruiksscenario is voor array-inserts met behulp van OCI. Een ander gebruik scenario zou kunnen zijn inserts in een FORALL statement in PL / SQL.

Als u de APPEND hint te geven (in tegenstelling tot de APPEND_VALUES hint) in een INSERT verklaring met een VALUES-clausule, is de APPEND hint genegeerd en een conventionele insert wordt uitgevoerd.

Het volgende is een voorbeeld van het gebruik van de APPEND hint naar een directe pad INSERT uit te voeren:

De volgende PL / SQL codefragment is een voorbeeld van het gebruik van de APPEND_VALUES hint:

Parallelle modus voegt met SQL-instructies

Wanneer u het invoegen van parallel-modus, met directe pad INSERT is de standaard. U kunt echter te voegen in parallel-modus met behulp van conventionele invoegen met behulp van de NOAPPEND PARALLEL hint.

Om te draaien in parallel DML-modus, moet aan de volgende eisen worden voldaan:

U moet Oracle Enterprise Edition geïnstalleerd.

U moet parallel DML te schakelen in uw sessie. Om dit te doen, dienen de volgende verklaring:

U moet voldoen aan minstens één van de volgende eisen:

Geef de parallel-attribuut voor de doelgroep tafel, hetzij op het moment te creëren of later

Geef de PARALLELLE tip voor elke insert operatie

Stel de database initialisatie parameter PARALLEL_DEGREE_POLICY op AUTO

Met directe pad INSERT te schakelen. geef de NOAPPEND hint in elke INSERT. Doen dus voorrang parallel DML-modus.

U kunt geen query of gegevens ingevoegd met direct-pad INSERT direct na de insert is voltooid wijzigen. Als u probeert om dit te doen, is een ORA-12838 fout gegenereerd. U moet eerst afgifte van een COMMIT verklaring voordat u de nieuw ingevoegde gegevens te lezen of te wijzigen.

Oracle Database SQL Taal Reference voor meer informatie over de subquery syntaxis van INSERT statements en voor bijkomende beperkingen op het gebruik van direct-pad INSERT

Onder vermelding van de Logmodus voor Direct-Path INSERT

Direct-path INSERT kunt u kiezen of u redo log en ongedaan te maken informatie tijdens de insert operatie.

U kunt de logmodus opgeven voor een tafel, partitie, index of LOB opslag op het moment te maken (in een CREATE statement) of later (in een ALTER statement).

Als u ook niet LOGGING of NOLOGGING opgeven in deze tijden:

Het loggen attribuut van een partitie standaard de logging attribuut van de tabel.

Het loggen attribuut van een tabel of index standaard de logging attribuut van de tablespace waar hij woont.

Het loggen attribuut van LOB opslag standaard ingesteld op LOGGING als u opgeeft CACHE voor LOB opslag. Als u niet in de cache opgeven. dan het loggen attributen standaard die van de tablespace waarin de LOB waarden verblijft.

U stelt de logging kenmerk van een eetlepel in een CREATE TABLESPACE of ALTER TABLESPACE statements.

Als de database of tablespace is voor CE logging-mode, dan direct INSERT pad logt altijd, ongeacht de logging instelling.

Direct-Pad INSERT met Logging

In deze modus, Oracle Database voert volledige redo logging voor de aanleg en het herstel media. Als de database is in ARCHIVELOG modus, dan kunt u redo logs archiveren op tape. Als de database is in NOARCHIVELOG modus, dan kunt u bijvoorbeeld crashes, maar niet schijf uitval te herstellen.

Direct-Path INSERT zonder in te loggen

In deze modus, Oracle Database voegt gegevens zonder overdoen of ongedaan te maken logging. In plaats daarvan, de database registreert een klein aantal block range ongeldigverklaring redo platen en periodiek updates van de controle-bestand met informatie over de meest recente directe schrijven.

Direct-path INSERT zonder logging verbetert de prestaties. Echter, als je moet vervolgens media herstel uitvoeren, de ongeldigverklaring redo records markeren een reeks van blokken als logisch corrupt, omdat er geen redo gegevens werden aangemeld voor hen. Daarom is het belangrijk dat u een back-up van de gegevens na een dergelijke insert operatie.

Beginnend met versie 11.2.0.2 van Oracle Database, kunt u een aanzienlijke verbetering van de prestaties van onherstelbare direct inserts pad door het uitschakelen van de periodieke controle van de bestanden. Dit doet u door het instellen van de initialisatie parameter DB_UNRECOVERABLE_SCN_TRACKING op false. Echter, als je een onherstelbare Direct invoegen pad met deze control file-updates uitgeschakeld te voeren, zal u niet langer in staat zijn om nauwkeurig te vragen de databank om te bepalen of er gegevensbestanden zijn hersteld.

Het deel "Bepalen of een back-up is vereist na Onherstelbare Operations" in Oracle Data Guard Concepts and Administration

Aanvullende overwegingen voor Direct-Path INSERT

De volgende zijn een aantal aanvullende overwegingen bij het gebruik van direct-pad in te voegen.

Compressed Tables

Als een tabel is gemaakt met de basis-compressie, dan moet je directe pad INSERT gebruiken om tafel gegevens comprimeren als het wordt geladen. Als een tabel is gemaakt met OLTP, magazijn of archief compressie, dan is de beste compressie worden bereikt met directe pad INSERT.

Index Onderhoud met Direct-Path INSERT

Oracle Database presteert index onderhoud aan het eind van directe pad INSERT operaties op tabellen (gepartitioneerd of niet-gepartitioneerde) die indexen. Deze index onderhoud wordt uitgevoerd door het parallel uitvoeren servers parallel INSERT directe pad of de enkel proces voor seriële INSERT directe pad. U kunt de invloed op de prestaties van de index onderhoud te vermijden door het maken van de index onbruikbaar voor de INSERT operatie en dan opnieuw gaan daarna.

Space Overwegingen met Direct-Path INSERT

Direct-path INSERT vereist meer ruimte dan conventionele-pad in te voegen.

Alle seriële directe pad INSERT operaties, evenals parallelle INSERT directe pad in gepartitioneerde tabellen, plaatst de gegevens boven de high-water mark van het aangetaste segment. Dit vereist enige extra ruimte.

Parallel met directe pad in te voegen in gepartitioneerde tabellen vergt nog meer ruimte, want het creëert een tijdelijke segment voor elke graad van parallellisme. Als de niet-gepartitioneerde tabel is niet in een lokaal beheerd tablespace in automatische segment-space management-modus kunt u de waarden van de opslag parameter NEXT en PCTINCREASE en minimum beperkt tablespace parameter te wijzigen om voldoende (maar niet teveel) bieden opslag voor de tijdelijke segmenten. Kiezen waarden voor deze parameters zodat:

De grootte van elke omvang niet te klein is (niet minder dan 1 MB). Dit beïnvloedt het aantal uitsteeksels in het object.

De grootte van elke omvang is niet zo groot dat de parallelle INSERT leidt tot verspilde ruimte op segmenten die groter zijn dan nodig.

Na de direct-pad INSERT operatie is voltooid, kunt u deze parameters teruggezet naar de instellingen meer geschikt voor seriële operaties.

Vergrendeling Overwegingen met Direct-Path INSERT

Tijdens de direct-pad in te voegen. de database verkrijgt exclusieve sloten op de tafel (of alle partities van een gepartitioneerde tabel). Als gevolg daarvan kunnen de gebruikers eventuele gelijktijdige invoegen, bijwerken niet uitvoeren, of verrichtingen te verwijderen op de tafel, en de gelijktijdige index creatie en bouwen operaties zijn niet toegestaan. Concurrent queries echter worden ondersteund, maar de vraag zal alleen de informatie voor de insert operatie terug te keren.

Met behulp van Conventionele Voegt de tabellen laden

Tijdens conventionele INSERT operaties. de databank hergebruikt vrije ruimte in de tabel, tussenvoeging nieuw ingevoegde gegevens met bestaande data. Tijdens dergelijke operaties, de database onderhoudt ook referentiële integriteit. In tegenstelling tot de directe pad INSERT operaties, hoeft conventionele INSERT operaties niet een exclusieve vergrendeling op de tafel nodig.

Verscheidene andere beperkingen gelden voor direct-pad INSERT operaties die niet van toepassing op conventionele INSERT operaties. Zie Oracle Database SQL Taal Reference voor meer informatie over deze beperkingen.

U kunt een conventionele INSERT uitvoeren in de seriële modus of parallel modus met de NOAPPEND hint.

Het volgende is een voorbeeld van het gebruik van de NOAPPEND hint naar een conventionele INSERT in seriële modus uit te voeren:

Het volgende is een voorbeeld van het gebruik van de NOAPPEND hint naar een conventionele INSERT parallel-modus uit te voeren:

Om te draaien in parallel DML-modus, moet aan de volgende eisen worden voldaan:

U moet Oracle Enterprise Edition geïnstalleerd.

U moet parallel DML te schakelen in uw sessie. Om dit te doen, dienen de volgende verklaring:

U moet voldoen aan minstens één van de volgende eisen:

Geef de parallel-attribuut voor de doelgroep tafel, hetzij op het moment te creëren of later

Geef de PARALLELLE tip voor elke insert operatie

Stel de database initialisatie parameter PARALLEL_DEGREE_POLICY op AUTO

Het vermijden van bulktussenvoegsel Failures wit h DML Error Logging

Wanneer u een tabel te laden met behulp van een INSERT verklaring met subquery, als er een fout optreedt, wordt de verklaring is beëindigd en rolde terug in haar geheel. Dit kan verspilling van tijd en systeembronnen zijn. Voor dergelijke INSERT statements, kunt u deze situatie te voorkomen door gebruik te maken van de DML error logging functie.

Om DML error logging gebruiken, hebt u een verklaring clausule die de naam van een fout logging tabel waarin de database registreert fouten die tijdens de DML operaties specificeert toe te voegen. Wanneer je deze fout logging clausule toe te voegen aan de INSERT, bepaalde soorten fouten niet meer te beëindigen en terugdraaien van de verklaring. In plaats daarvan wordt elke fout geregistreerd en de verklaring verder. Vervolgens neemt u corrigerende maatregelen op de onjuiste rijen op een later tijdstip.

DML error logging werkt met insert. BIJWERKEN. Samenvoegen. en DELETE statements. Deze sectie richt zich op INSERT statements.

Als u gegevens met DML error logging in te voegen:

Maak een fout logging tafel. (Optioneel)

U kunt de tabel handmatig maken of gebruik de DBMS_ERRLOG pakket om het automatisch voor u. Zien "Het creëren van een fout Logging Table" voor details.

Uitvoeren van een INSERT-instructie en beschikken over een fout logging clausule. Deze clausule:

Eventueel verwijst naar de fout logging tabel die u hebt gemaakt. Als u geen zorgen voor een fout logging tabel naam, de database logs om een ​​fout logging tafel met een standaardnaam. De standaard fout logging tabel naam is ERR $ _ gevolgd door de eerste 25 tekens van de naam van de tabel die wordt in wordt gestoken.

Optioneel is voorzien van een tag (een numerieke of letterlijke tekenreeks tussen haakjes), die wordt toegevoegd aan de error log te helpen identificeren van de verklaring dat de fouten die worden veroorzaakt. Als de tag wordt weggelaten, wordt een NULL-waarde gebruikt.

Optioneel is voorzien van een REJECT LIMIT bijzin.

Deze bijzin geeft het maximale aantal fouten die kunnen worden aangetroffen voor de INSERT beëindigt en rolt terug. U kunt ook UNLIMITED opgeven. De standaard afwijzen limiet is nul, wat betekent dat na de ontmoeting met de eerste fout, de fout is aangemeld en de verklaring teruggedraaid. Voor parallelle DML operaties, het verwerpen limiet wordt toegepast op elke parallelle server.

Als de uitspraak hoger is dan de limiet te verwerpen en rolt terug, de fout logging tafel behoudt de loggegevens tot nu toe opgenomen.

Zie Oracle Database SQL Taal Verzoek om error logging clausule syntax informatie.

Vraag de fout logging tafel en neem corrigerende maatregelen voor de rijen die fouten gegenereerd.

Zien "Error Logging Tabelopmaak". verderop in dit hoofdstuk, voor meer informatie over de fout logging tabel structuur.

Voorbeeld De volgende verklaring voegt rijen in de DW_EMPL tafel en logt fouten in de ERR_EMPL tafel. De tag ‘daily_load’ wordt gekopieerd naar elke logboekvermelding. De verklaring eindigt en rolt terug als het aantal fouten groter is dan 25.

Error Logging Tabelopmaak

De fout logging tafel bestaat uit twee delen:

Een verplichte set van kolommen die de fout te beschrijven. Bijvoorbeeld, een kolom bevat de Oracle foutnummer.

Tabel 20-3 geeft de volgende omschrijving van de fout columns.

Een optionele set van kolommen die de gegevens van de rij die de fout heeft veroorzaakt bevatten. De kolom namen overeenkomen met de kolomnamen van de tabel in (het wordt ingebracht "DML tafel").

Het aantal kolommen in dit deel van de fout logboektabel kan nul, een, of meer, tot het aantal kolommen in de tabel DML. Als een kolom in de fout logging tabel die dezelfde naam heeft als een kolom in de DML tabel bestaat, wordt de bijbehorende gegevens van de overtredende rij wordt ingebracht geschreven om deze fout te loggen kolom van de tabel. Als een DML tabelkolom een ​​overeenkomstige kolom in de fout logging tafel heeft, wordt de kolom niet ingelogd. Als de fout logging tabel een kolom met een naam die niet overeenkomt met een DML kolom van de tabel bevat, wordt de kolom genegeerd.

Omdat de conversie fouten zijn een soort fout die zich kunnen voordoen, moet de data types van de optionele kolommen in de fout logging tabel types die enige waarde, zonder verlies van gegevens of conversie fouten kunnen vastleggen. (Als de optionele log kolommen waren van hetzelfde type als de DML tabelkolommen, het vastleggen van de problematische gegevens in het logboek kan dezelfde data conversie probleem dat de fout heeft veroorzaakt lijden.) De database maakt een beste poging om een ​​zinvolle waarde voor data loggen die veroorzaakt omzettingsfouten. Als een waarde niet kan worden afgeleid, wordt NULL aangemeld voor de kolom. Een fout op het inbrengen in de fout logging tafel zorgt ervoor dat de verklaring te beëindigen.

Tabel 20-4 geeft de aanbevolen fout logging tafel kolomgegevenstypen te gebruiken voor elk type gegevens uit de DML tafel. Deze aanbevolen types data worden gebruikt wanneer u het fout logboek tafel automatisch met de DBMS_ERRLOG pakket te maken.

Tabel 20-3 Verplichte Foutomschrijving Columns

Het creëren van een fout Logging Table

U kunt een fout logging tabel handmatig maken, of u kunt een PL / SQL-pakket te gebruiken om automatisch één voor u.

Het creëren van een fout Logging tabel Automatisch

U gebruikt de DBMS_ERRLOG pakket een fout logging tabel automatisch. De CREATE_ERROR_LOG procedure maakt een fout logging tabel met alle verplichte fout beschrijving kolommen plus alle van de kolommen van de genoemde DML tafel, en voert het type data mappings weergegeven in tabel 20-4.

De volgende verklaring maakt de fout logging tabel gebruikt in het vorige voorbeeld.

Het creëren van een fout Logging Table Handmatig

U gebruikt standaard DDL om de fout logging tabel handmatig maken. Zien "Error Logging Tabelopmaak" voor tabelstructuur eisen. U moet alle verplichte foutbeschrijving columns. Ze kunnen in willekeurige volgorde, maar moet de eerste kolom in de tabel.

Error Logging Beperkingen en Voorbehoud

Oracle Database registreert de volgende fouten tijdens DML operaties:

Column waarden die te groot zijn

Constraint overtredingen (NOT NULL. Uniek, referentiële, en check constraints)

Fouten die tijdens de uitvoering trekker

Fouten door conversie tussen een kolom in een subquery en de overeenkomstige kolom van de tabel

Partition mapping fouten

Bepaalde MERGE bedieningsfouten (ORA-30926. Kan geen stabiele set rijen voor Merge operatie te krijgen.)

Sommige fouten worden niet ingelogd, en ervoor zorgen dat de DML operatie te beëindigen en terug te draaien. Voor een lijst van deze fouten en andere DML logging beperkingen, zie de bespreking van de error_logging_clause in de INSERT-sectie van Oracle Database SQL Language Reference.

Space Overwegingen

Zorg ervoor dat je bedenkt benodigde ruimte voor het gebruik van DML error logging. Benodigde ruimte niet alleen voor de tafel in, maar ook voor de fout logboektabel ingebracht.

Veiligheid

De gebruiker die de INSERT statement met DML error logging kwesties moeten INSERT bevoegdheden op het fout logboek tafel.

Automatisch verzamelen van statistieken over tabellen

De PL / SQL-pakket DBMS_STATS kunt u het genereren en beheren van statistieken voor kosten gebaseerde optimalisatie. U kunt dit pakket gebruiken om te verzamelen, te wijzigen, bekijken, exporteren, importeren en verwijderen statistieken. U kunt ook gebruik maken van dit pakket de statistieken die zijn verzameld te identificeren of naam.

Vroeger, kon u DBMS_STATS automatisch statistieken te verzamelen voor een tabel door de Monitoring zoekwoord in de CREATE (of ALTER) TABLE. Te beginnen met Oracle Database 11 g. Het toezicht op en NOMONITORING zoekwoorden zijn gedeprecieerd en statistieken worden automatisch verzameld. Als je opgeeft deze zoekwoorden, worden ze genegeerd.

Monitoring volgt het geschatte aantal INSERT. BIJWERKEN. en DELETE operaties voor de tabel sinds de laatste keer statistieken werden verzameld. Informatie over hoeveel rijen zijn getroffen wordt gehandhaafd in de SGA, totdat periodiek (ongeveer om de drie uur) SMON de gegevens verwerkt in de data dictionary. Deze data dictionary informatie wordt zichtbaar gemaakt door de DBA_TAB_MODIFICATIONS, ALL_TAB_MODIFICATIONS. of USER_TAB_MODIFICATIONS uitzicht. De database maakt gebruik van deze standpunten aan tafels met verouderde statistieken te identificeren.

De standaard voor de parameter STATISTICS_LEVEL initialisatie is typisch. waardoor automatische verzameling van statistieken. Automatische verzameling van statistieken en de DBMS_STATS pakket kan de optimizer om nauwkeurige uitvoeringsplannen te genereren. de STATISTICS_LEVEL initialisatie parameter basisinstelling schakelt het verzamelen van veel van de belangrijke statistieken die door Oracle Database functies en functionaliteit. Om monitoring van alle tafels uit te schakelen, stelt u de STATISTICS_LEVEL initialisatie parameter BASIC. Automatische verzameling van statistieken en de DBMS_STATS pakket kan de optimizer om nauwkeurige uitvoeringsplannen te genereren.

Oracle Database Reference voor meer informatie over de parameter STATISTICS_LEVEL initialisatie

"Over Geautomatiseerde Onderhoudstaken" voor meer informatie over het gebruik van de Scheduler om statistische gegevens automatisch te verzamelen

Het veranderen van de tabellen

Je verandert een tafel met behulp van de instructie ALTER TABLE. Om een ​​tabel te wijzigen, moet de tabel worden opgenomen in uw schema, of moet je ofwel de ALTER object privilege voor de tabel of ALTER een tabel systeem privilege hebben.

Veel van de gebruiksmogelijkheden van de instructie ALTER TABLE worden gepresenteerd in de volgende onderdelen:

Voordat het veranderen van een tafel, vertrouwd te maken met de gevolgen hiervan. De Oracle Database SQL Language Reference bevat veel van deze gevolgen in de beschrijvingen van de ALTER TABLE-clausules.

Als het oog, gematerialiseerde mening, trigger, domein index, functie-gebaseerde index, check constraint, functie, procedure van het pakket afhankelijk is van een basistabel, kan de wijziging van de basis tabel of zijn kolommen de afhankelijke object beïnvloeden. Zien "Managing Object Dependencies" voor meer informatie over de manier waarop de database beheert afhankelijkheden.

Redenen voor het gebruik van de instructie ALTER TABLE

U kunt de instructie ALTER TABLE gebruiken om een ​​van de volgende acties die een tafel invloed uit te voeren:

Wijzigen fysieke kenmerken (INITRANS of opslag parameters)

Verplaats de tafel om een ​​nieuw segment of eetlepel

Expliciet te wijzen op zekere hoogte of vrijgeven ongebruikte ruimte

Voeg, drop, of hernoemen kolommen of wijzigen van een bestaande kolomdefinitie (data type, lengte, standaard waarde, NOT NULL constraint integriteit, kolomuitdrukking (voor virtuele kolommen), en encryptie eigenschappen.)

Wijzig de logging attributen van de tabel

Wijzig de cache / nocache attributen

Toe te voegen, te wijzigen of te laten vallen integriteit beperkingen in verband met de tafel

Inschakelen of integriteit beperkingen uitschakelen of triggers in verband met de tafel

Wijzig de mate van parallellisme voor de tafel

Zet een tafel in de modus alleen-lezen en terug te sturen naar read / write-modus

Toevoegen of-index georganiseerde tafel kenmerken wijzigen

Veranderen de eigenschappen van een externe tabel

Toevoegen of LOB kolommen aanpassen

Toevoegen of wijzigen van het type object, geneste tabel of VARRAY kolommen

Vele van deze operaties worden in volgende secties.

Het veranderen van fysieke eigenschappen van een tabel

Bij de wijziging van het invoeren van een transactie instelling INITRANS van een tabel, er rekening mee dat er een nieuwe instelling voor INITRANS alleen van toepassing op datablokken vervolgens gedurende de tafel toegewezen.

De opslag parameters begin- en MINEXTENTS kan niet worden gewijzigd. Alle nieuwe instellingen voor de andere opslag parameters (bijvoorbeeld NEXT. PCTINCREASE) hebben alleen invloed op mate vervolgens ter tafel toegewezen. De omvang van de volgende mate verdeeld wordt bepaald door de huidige waarden van NEXT en PCTINCREASE. en is niet gebaseerd op de eerdere waarden van deze parameters.

De besprekingen van de fysieke kenmerken clausule en de opslag clausule in Oracle Database SQL Taal Referentie

Het verplaatsen van een tafel om een ​​nieuw segment of Tablespace

De ALTER TABLE. MOVE verklaring stelt u in staat te verhuizen gegevens van een niet-gepartitioneerde tabel of een partitie van een gepartitioneerde tabel in een nieuw segment, en eventueel in een andere tablespace waarvoor u quota. Deze verklaring kunt u ook een van de opslag attributen van de tabel of partitie, met inbegrip van die die niet kunnen worden gewijzigd met behulp van ALTER TABLE wijzigen. U kunt ook de ALTER tabel gebruiken. MOVE verklaring met een kompres clausule aan het nieuwe segment op te slaan met behulp van tafel compressie.

Een belangrijke reden om een ​​tafel om een ​​nieuwe tablespace bewegen (met een nieuwe data-bestand) is om de mogelijkheid te elimineren dat oude versies van kolomgegevens—versies links op nu ongebruikte delen van de schijf te wijten aan segment krimpen, reorganisatie of vorige tafel beweegt—kan worden bekeken door het omzeilen van de toegangscontrole van de database (bijvoorbeeld met een hulpprogramma van het besturingssysteem). Dit is vooral belangrijk met kolommen dat u van plan te wijzigen door het toevoegen van transparante data-encryptie.

De ALTER TABLE. MOVE verklaring is DML niet toe ten opzichte van de tafel, terwijl de verklaring wordt uitgevoerd. Om de tafel beschikbaar voor DML laten tijdens het verplaatsen, zie "Redefining Tables Online" .

Een tafel verplaatsen verandert de rowids van de rijen in de tabel. Hierdoor indexen op de tafel onbruikbaar worden gemarkeerd. en DML toegang tot de tafel met behulp van deze indices zal een ORA-01502 fout ontvangen. De indexen op de tabel moet worden verwijderd of herbouwd. Ook geen statistieken voor de tabel ongeldig en nieuwe statistieken moeten worden verzameld na het verplaatsen van de tafel.

Als de tabel bevat LOB kolom (men), kan deze instructie worden gebruikt om de tafel te bewegen samen met LOB databank LOB index segmenten (waaraan deze tabel) die de gebruiker expliciet opgegeven. Indien niet opgegeven, de standaard is om de LOB-gegevens en LOB-index segmenten niet bewegen.

Handmatig toewijzen Opslag voor een tafel

Oracle Database dynamisch alloceert additionele mate het datasegment van een tafel, zoals vereist. Maar misschien wilt u een extra mate toe te wijzen voor een tafel expliciet. Bijvoorbeeld, in een Oracle Real Application Clusters milieu, een hoeveelheid van een tabel kan expliciet bestemd voor een specifiek geval.

Een nieuwe mate kan worden toegewezen voor een tafel met behulp van de instructie ALTER TABLE. ALLOCATE ZOVER clausule.

U kunt ook expliciet vrijgeven ongebruikte ruimte met behulp van de DEALLOCATE NIET clausule van ALTER TABLE. Dit wordt beschreven in "Reclaiming Wasted Space" .

Het wijzigen van een bestaande kolom Definition

Gebruik de ALTER TABLE. AANPASSEN statement om een ​​bestaande kolomdefinitie wijzigen. U kunt wijzigen kolom datatype, standaard waarde, kolom constraint, kolomuitdrukking (voor virtuele kolommen) en de kolom encryptie.

U kunt de lengte van een bestaande kolom te verhogen of te verlagen, als alle bestaande gegevens voldoet aan de nieuwe lengte. U kunt een kolom te veranderen van byte semantiek semantiek of vice versa CHAR. Moet de initialisatie parameter BLANK_TRIMMING = TRUE ingesteld op de lengte van een niet-lege CHAR kolom verlagen.

Als u het wijzigen van een tabel om de lengte van een kolom van het type data CHAR te verhogen. realiseren dat dit een tijdrovende bewerking kan zijn en er aanzienlijke extra opslagruimte nodig, vooral als de tabel bevat veel rijen. Dit komt omdat het CHAR waarde in elke rij leeg gepolsterde de nieuwe kolomlengte voldoen moet.

Oracle Database SQL Taal Verzoek om meer informatie over het wijzigen van tafel kolommen en bijkomende beperkingen

Het toevoegen van Table Columns

Om een ​​kolom aan een bestaande lijst toe te voegen, gebruik maken van de ALTER TABLE. ADD verklaring.

Als er een nieuwe kolom wordt toegevoegd aan een tafel, de kolom is in eerste instantie NULL, tenzij u de standaard-clausule op te geven. Wanneer u een standaardwaarde opgeeft, wordt het database-updates onmiddellijk elke rij met de standaardwaarde. Merk op dat dit kan enige tijd duren, en dat tijdens de update, is er een exclusieve DML slot op de tafel. Voor sommige soorten tabellen (bijvoorbeeld tafels zonder LOB kolommen), als je zowel een NOT NULL en een standaardwaarde opgeven, de database kan de kolom optimaliseren voegen werking en de tijd sterk verminderen dat de tafel is vergrendeld DML .

U kunt een kolom toe te voegen met een NOT NULL constraint alleen als de tabel geen rijen bevat, of als u een standaardwaarde opgeven.

Oracle Database SQL Taal Verzoek om aanvullende regels en beperkingen voor het toevoegen van kolommen van de tabel

Het toevoegen van een Col UMN een gecomprimeerde Table

Als je basic compressie in te schakelen op een tafel, kunt u kolommen toevoegen alleen als u geen standaardwaarden opgeven.

Als u OLTP compressie in te schakelen op een tafel, kunt u kolommen toevoegen aan die tafel, met of zonder standaardwaarden. Als een standaardwaarde is opgegeven, moet de kolom NOT NULL zijn.

Het toevoegen van een Virtual Column

Als de nieuwe kolom een ​​virtuele kolom, wordt de waarde bepaald door de kolomuitdrukking. (Merk op dat de waarde van een virtuele kolom alleen berekend wanneer het wordt opgevraagd.)

Hernoemen Table Columns

Oracle Database kunt u de naam van bestaande kolommen in een tabel. Gebruik de RENAME COLUMN clausule van de ALTER TABLE om een ​​kolom te wijzigen. De nieuwe naam mag niet in strijd zijn met de naam van een bestaande kolom in de tabel. Geen andere clausules zijn toegestaan, met de RENAME COLUMN-clausule.

Zoals eerder opgemerkt, het veranderen van een tabel kolom kan afhankelijke objecten ongeldig. Echter, wanneer u een kolom hernoemen, de database updates bijbehorende data dictionary tabellen om ervoor te zorgen dat de functie gebaseerde indexen en controleer beperkingen geldig blijven.

Oracle Database kunt u ook een andere naam geven column beperkingen. Dit wordt besproken in "hernoemen Constraints" .

De RENAME TO clausule van ALTER TABLE lijkt vergelijkbaar met de syntaxis van de RENAME COLUMN-clausule, maar wordt gebruikt voor het hernoemen van de tabel zelf.

Dropping Table Columns

U kunt kolommen die niet langer nodig zijn uit een tabel, met inbegrip van een index-georganiseerde tafel laten vallen. Dit is een handige manier om vrije ruimte in een database, en vermijdt je hoeft te exporteren / importeren van gegevens dan opnieuw te maken indexen en beperkingen.

Je kunt niet alle kolommen vallen uit een tabel, noch kan u kolommen dalen van een tabel in handen van SYS. Elke poging om dit te doen resulteert in een fout.

Oracle Database SQL Taal Verzoek om informatie over andere beperkingen en mogelijkheden voor het laten vallen kolommen uit een tabel

Het verwijderen van kolommen van de tabellen

Wanneer u geven een ALTER TABLE. DROP COLUMN verklaring, de kolom descriptor en de gegevens in verband met de doelkolom worden verwijderd uit elke rij in de tabel. U kunt meerdere kolommen druppel met een statement.

De volgende verklaring daalt zowel de bonus en comm kolommen:

Markering Columns Ongebruikte

Als u zich zorgen over de lengte van de tijd zijn zij kunnen nemen om kolomgegevens dalen van alle rijen in een grote tafel, kunt u de ALTER tabel gebruiken. SET UNUSED verklaring. Deze uitspraak betekent een of meer kolommen als ongebruikt, maar niet daadwerkelijk de doelkolom gegevens te verwijderen of te herstellen van de schijfruimte die wordt ingenomen door deze kolommen. Er is echter een kolom die is gemarkeerd als ongebruikt niet weergegeven in vragen of standpunten data dictionary, en zijn naam wordt verwijderd, zodat een nieuwe kolom die naam kunnen hergebruiken. In de meeste gevallen zijn beperkingen, indexen en statistieken gedefinieerd op de kolom ook verwijderd. De uitzondering is dat de interne indexen voor LOB-kolommen die ongebruikt zijn gemarkeerd niet worden verwijderd.

Om de HireDate en mgr kolommen als ongebruikt te markeren, voert u de volgende verklaring:

U kunt later verwijderen kolommen die zijn gemarkeerd als ongebruikt door de uitgifte van een ALTER TABLE. DROP UNUSED COLUMNS statement. Ongebruikte kolommen worden ook verwijderd uit de doeltabel wanneer een expliciete daling van een bepaalde kolom of kolommen van de tabel wordt afgegeven.

De uitzichten data dictionary USER_UNUSED_COL_TABS. ALL_UNUSED_COL_TABS. of DBA_UNUSED_COL_TABS kan worden gebruikt om een ​​lijst van alle tabellen met ongebruikte kolommen. De Graaf veld toont het aantal ongebruikte kolommen in de tabel.

Voor de externe tafels, is de SET NIET verklaring transparant omgezet in een ALTER TABLE DROP COLUMN statement. Omdat externe tafels bestaan ​​uit metadata alleen in de database, de DROP COLUMN verklaring presteert gelijkwaardig aan de SET NIET statement.

Het verwijderen van niet-gebruikte Columns

De ALTER TABLE. DROP UNUSED KOLOMMEN verklaring is de enige actie toegestaan ​​op ongebruikte kolommen. Het verwijdert fysiek ongebruikte kolommen van de tafel en reclames schijfruimte.

In de instructie ALTER TABLE die volgt, wordt de facultatieve clausule CHECKPOINT gespecificeerd. Deze clausule veroorzaakt een checkpoint worden aangebracht na het verwerken van het opgegeven aantal rijen, in dit geval 250. checkpointing bezuinigingen op de hoeveelheid ongedaan logs ophopen tijdens de operatie druppel kolom tot potentiële uitputting undo ruimte voorkomen.

Dropping Co lumns in gecomprimeerde tabellen

Als u OLTP compressie in te schakelen op een tafel, kan je er bij neervalt tabelkolommen. Als je basic compressie alleen inschakelt, kunt u geen kolommen laten vallen.

Het plaatsen van een tafel in Read-Only modus

U kunt een tabel plaatsen in alleen-lezen modus met de ALTER TABLE. READ ONLY statement, en terug te sturen naar read / write-modus met de ALTER TABLE. Lezen Schrijven verklaring. Een voorbeeld van een tabel die op lees-modus zinvol is een configuratietabel. Als uw applicatie bevat configuratie tabellen die niet worden gewijzigd na de installatie en dat moet niet worden gewijzigd door de gebruikers, kan uw applicatie installatie scripts deze tabellen in de alleen-lezen-modus te plaatsen.

Om een ​​tafel in read-only modus, dient u de ALTER TABLE privilege op de tafel of de ALTER iedere tafel privilege hebben. Bovendien moet de VERENIGBAAR initialisatie parameter ingesteld 11.1.0 of hoger.

Het volgende voorbeeld legt de SALES tabel in alleen-lezen-modus:

Het volgende voorbeeld geeft de tabel te lezen / schrijven-modus:

Wanneer een tabel is alleen-lezen-modus, worden de activiteiten van die proberen om tafel gegevens te wijzigen niet toegestaan. De volgende bewerkingen zijn niet toegestaan ​​op een alleen-lezen tabel:

Alle DML operaties op de tafel of een van de partities

SELECT FOR UPDATE

ALTER TABLE ADD / wijzigen / RENAME / DROP COLUMN

ALTER LIJSTREEKS COLUMN UNUSED

ALTER TABLE DROP / TRUNCATE / EXCHANGE (SUB) PARTITION

ALTER TABLE UPGRADE met inbegrip van gegevens of ALTER TYPE CASCADE met inbegrip van tabel gegevens voor een type met alleen-lezen tabel afhankelijke

De volgende handelingen zijn toegestaan ​​op een alleen-lezen tabel:

CREATE / ALTER / DROP INDEX

ALTER TABLE ADD / wijzigen / DROP / inschakelen / uitschakelen CONSTRAINT

ALTER TABLE voor fysieke veranderingen woning

ALTER TABLE DROP NIET KOLOMMEN

ALTER TABLE ADD / COALESCE / samenvoegen / wijzigen / hernoemen / verplaatsen / SPLIT (SUB) PARTITION

ALTER TABLE MOVE

ALTER TABLE ENABLE ROW MOVEMENT en ALTER TABLE SHRINK

RENAME TABLE en ALTER TABLE hernoemen naar

ALTER TABLE DEALLOCATE UNUSED

ALTER TABLE ADD / DROP EXTRA LOG

Oracle Database SQL Taal Reference voor meer informatie over de instructie ALTER TABLE

Redefinin g Tafels Online

In een database systeem, is het soms noodzakelijk om de logische of fysieke structuur van een tabel te wijzigen:

Het verbeteren van de prestaties van de vragen of DML

Geschikt voor veranderingen applicatie

Oracle Database biedt een mechanisme om tafel structuur wijzigingen aan te brengen, zonder significante gevolgen voor de beschikbaarheid van de tafel. Het mechanisme heet online tafel herdefiniëring. Herdefiniëren tafels online levert een aanzienlijke toename van de beschikbaarheid in vergelijking met traditionele methoden herdefiniëren tabellen.

Wanneer een tabel online wordt opnieuw gedefinieerd, het is toegankelijk voor zowel vragen en DML gedurende een groot deel van de herdefiniëring proces. Typisch wordt de tabel vergrendeld in de exclusieve modus in een klein venster dat onafhankelijk is van de grootte van de tabel en de complexiteit van de herdefinitie, en is volledig transparant voor de gebruiker. Echter, als er veel gelijktijdige DML operaties tijdens herdefiniëring, dan is een langere wachttijd kan het nodig zijn voordat de tafel kan worden vergrendeld. Door het wachten, zijn meer veranderingen toegewijd aan de oorspronkelijke tabel, waarin de verversingsfrequentie en de hoeveelheid tijd dat de tafel vergrendeld verhoogt.

Online tafel herdefiniëring vereist een hoeveelheid vrije ruimte, dat is ongeveer gelijk aan de ruimte die wordt gebruikt door de tabel wordt geherdefinieerd. Meer ruimte kan nodig zijn als nieuwe kolommen worden toegevoegd.

U kunt online tafel herdefiniëring uit te voeren met de Enterprise Manager Reorganisatie Objects-wizard of met de DBMS_REDEFINITION pakket.

Om de Reorganisatie Objects-wizard te roepen:

Op de tabellen pagina van Enterprise Manager, klikt u in de kolom Selecteren om de tabel te selecteren om te herdefiniëren.

In de lijst Acties de optie te reorganiseren.

Dit deel beschrijft online herdefiniëring van de DBMS_REDEFINITION pakket. Het bevat de volgende onderwerpen:

Om een ​​tabel die u niet meer nodig hebt laten vallen, gebruik maken van de DROP TABLE. De tabel moet worden opgenomen in uw schema of moet u de DROP een tabel systeem privilege hebben.

Voordat laten vallen van een tafel. vertrouwd te maken met de gevolgen van dit te doen:

Het laten vallen van een tafel verwijdert de tabeldefinitie uit de data dictionary. Alle rijen van de tabel zijn niet meer toegankelijk.

Alle indexen en triggers in verband met een tafel worden gedropt.

Alle standpunten en PL / SQL programma units afhankelijk van een gedaald tafel blijven, maar toch ongeldig (niet bruikbaar). Zien "Managing Object Dependencies" voor meer informatie over de manier waarop de database beheert afhankelijkheden.

Alle synoniemen voor een gedaald tafel blijven, maar terug te keren een fout bij gebruik.

Alle mate voor een tafel die valt toegewezen worden teruggegeven aan de vrije ruimte van de eetlepel en kan worden gebruikt door andere objecten die nieuwe mate of nieuwe objecten. Alle rijen die overeenkomen met een geclusterde tabel worden uit de blokken van het cluster. Geclusterd tafels zijn het onderwerp van hoofdstuk 22, "Managing Clusters" .

Als de tabel te laten vallen bevat elke primaire of unieke sleutels verwezen door buitenlandse sleutels van andere tafels en je van plan om de externe sleutel beperkingen van het kind tafels laten vallen, dan zijn de CASCADE clausule in de DROP TABLE, zoals hieronder weergegeven:

Wanneer u een tabel laten vallen, normaal gesproken de database niet direct de ruimte in verband met de tafel vrij te geven. Integendeel, de database hernoemt de tafel en plaatst het in een prullenbak, waar het later kan worden hersteld met de FLASHBACK TABLE als u vindt dat u de tafel laten vallen in de fout. Als je zou willen om de ruimte in verband met de tafel op het moment dat u de DROP TABLE statement af te geven, onmiddellijk vrij te laten onder meer de PURGE clausule, zoals aangegeven in de volgende verklaring:

Misschien in plaats van het laten vallen van een tafel, je wilt het afkappen. De TRUNCATE verklaring biedt een snelle, efficiënte methode voor het verwijderen van alle rijen van een tafel, maar het heeft geen invloed op structuren in verband met de tabel wordt afgekapt (kolom definities, beperkingen, triggers, enzovoort) of toelatingen. De TRUNCATE verklaring wordt besproken in "Afkappen Tafels en Clusters" .

Met behulp van Flashback Drop en Beheer van de Prullenbak

Wanneer u een tabel te laten vallen, is de database niet onmiddellijk verwijderen van de ruimte in verband met de tafel. De database hernoemt de tafel en plaatst deze en alle bijbehorende objecten in een prullenbak, waarbij, in het geval de tabel in de fout was gedaald, kan het worden hersteld op een later tijdstip. Deze functie heet Flashback Drop, en de FLASHBACK TABLE wordt gebruikt om de tafel te herstellen. Alvorens in te gaan het gebruik van de FLASHBACK TABLE voor dit doel, is het belangrijk om te begrijpen hoe de prullenbak werkt, en hoe u de inhoud beheren.

Dit gedeelte bevat de volgende onderwerpen:

Wat is de Prullenbak?

De prullenbak is eigenlijk een data dictionary tabel met informatie over gedaald objecten. Dropped tafels en alle bijbehorende objecten, zoals indexen, beperkingen, geneste tabellen, en dergelijke worden niet verwijderd en nog steeds ruimte innemen. Ze blijven rekenen tegen gebruikersruimte quota, totdat specifiek verwijderd uit de prullenbak of het onwaarschijnlijke situatie waarin ze moeten worden gezuiverd door de database als gevolg van tablespace beperkte ruimte.

Elke gebruiker kan worden gezien als het hebben van zijn eigen prullenbak, omdat, tenzij een gebruiker de SYSDBA privilege heeft, de enige objecten die de gebruiker toegang heeft tot in de prullenbak zijn die de gebruiker eigenaar is. Een gebruiker kan zijn objecten in de prullenbak met de volgende verklaring te geven:

Wanneer u een eetlepel met inbegrip van de inhoud ervan te laten vallen, worden de objecten in de tablespace niet in de prullenbak geplaatst en de database zuiveringen alle items in de prullenbak voor objecten die zich in de tablespace. De database zuivert ook eventuele prullenbak inzendingen voor objecten in een tablespace wanneer u de tablespace laten vallen, niet met inbegrip van de inhoud, en de tablespace is anders leeg. Hetzelfde:

Wanneer u een gebruiker te laten vallen, worden alle objecten die behoren tot de gebruiker niet in de prullenbak geplaatst en alle objecten in de prullenbak worden gespoeld.

Wanneer u een cluster vallen, worden de leden-tabellen niet in de prullenbak geplaatst en een ex-lid tabellen in de prullenbak worden gespoeld.

Wanneer u een type laten vallen, worden alle afhankelijke objecten zoals subtypen niet in de prullenbak geplaatst en alle ex-afhankelijke objecten in de prullenbak worden gespoeld.

Object Naming in de Prullenbak

Wanneer een gevallen tafel wordt verplaatst naar de prullenbak, worden de tabel en de bijbehorende objecten gegeven door het systeem gegenereerde namen. Dit is nodig om conflicten die zich kunnen voordoen als meerdere tabellen dezelfde naam voorkomen. Dit kan zich voordoen in de volgende situaties:

Een gebruiker druppels een tafel, re-creëert met dezelfde naam, daalt dan weer.

Twee gebruikers hebben tafels met dezelfde naam, en zowel de gebruikers laten hun tafels.

De Hernoemen conventie is als volgt:

unique_id is een 26-karakter globally unique identifier van dit object, dat de naam prullenbak uniek voor alle databases maakt

versie is een versienummer toegekend door de database

In- en uitschakelen van de Prullenbak

Als de prullenbak is ingeschakeld, liet tabellen en hun afhankelijke objecten worden in de prullenbak geplaatst. Als de prullenbak is uitgeschakeld, liet tabellen en hun afhankelijke objecten worden niet in de prullenbak geplaatst; ze zijn gewoon gedropt en moet je andere middelen gebruiken om ze terug te krijgen (zoals het herstellen van back-up).

Het uitschakelen van de prullenbak niet zuiveren of anderszins bezwaar maakt al invloed in de prullenbak. De prullenbak is standaard ingeschakeld.

U inschakelen en de prullenbak uitschakelen door het veranderen van de parameter recyclebin initialisatie. Deze parameter is niet dynamisch, zodat een database opnieuw moet worden opgestart wanneer u het te veranderen met een ALTER SYSTEM statement.

Naar de prullenbak te schakelen:

Uitgifte van een van de volgende uitspraken:

Als je gewend ALTER SYSTEM. database herstart.

Naar de prullenbak te schakelen:

Uitgifte van een van de volgende uitspraken:

Als je gewend ALTER SYSTEM. database herstart.

Wat zijn-Index Organized Tables?

Een geïndexeerde georganiseerd tafel heeft een magazijnorganisatie die een variant van een primaire B-boom. In tegenstelling tot een gewone (-heap georganiseerde) tabel waarvan de gegevens worden opgeslagen als een ongeordende verzameling (hoop), worden de gegevens voor een index-georganiseerde tabel opgeslagen in een B-tree index structuur in een primaire sleutel gesorteerd manier. Elk blad blok in de index structuur slaat zowel de sleutel en nonkey columns.

De structuur van een index-georganiseerde tabel geeft de volgende voordelen:

Snelle random access op de primaire sleutel omdat een index-scan alleen is voldoende. En, want er is geen afzonderlijke tabel opslagruimte, wijzigingen in de tabel van gegevens (zoals het toevoegen van nieuwe rijen, rijen updaten of verwijderen rijen) resulteren alleen in het bijwerken van de index structuur.

Snelle range toegang op de primaire sleutel, omdat de rijen zijn geclusterd in primaire sleutel volgorde.

Lagere eisen vanwege de verdubbeling van primaire sleutels opslag wordt vermeden. Zij niet beide opgeslagen in de index en onderliggende tabel, zoals geldt voor heap georganiseerde tabellen.

-Index georganiseerde tafels hebben volledige tabel functionaliteit. Ze ondersteunen functies zoals beperkingen, triggers, LOB en object columns, partitioneren, parallel operaties, online reorganisatie en replicatie. En, ze bieden deze extra functies:

Overloop opslagruimte en specifieke plaatsing kolom

Secundaire indexen, waaronder bitmap indexen.

-Index georganiseerde tafels zijn ideaal voor OLTP-applicaties, die snel primaire sleutel toegang en hoge beschikbaarheid vereisen. Zo worden vragen en DML op orders tafel gebruikt in elektronische orderverwerking voornamelijk gebaseerd op de primaire sleutel toegang, en zware volume van de gelijktijdige DML kunnen rij chaining en inefficiënt ruimtegebruik in indexen, met als gevolg een frequente noodzaak om te reorganiseren. Omdat een index-georganiseerde tabel kan worden gereorganiseerd online en zonder ongeldig zijn secundaire indexen, wordt het venster van onbeschikbaarheid sterk verminderd of geëlimineerd.

-Index georganiseerde tafels zijn geschikt voor het modelleren van toepassingsspecifieke index structuren. Bijvoorbeeld, content-based information retrieval toepassingen van tekst, beeld en geluid met data vereisen omgekeerd indexen die effectief kan worden gemodelleerd met behulp van-index georganiseerde tafels. Een fundamenteel onderdeel van een zoekmachine op internet is een omgekeerde index die kan worden gemodelleerd met behulp van-index georganiseerde tafels.

Dit zijn maar een paar van de aanvragen voor-index georganiseerde tafels.

Oracle Database concepten voor een meer diepgaande beschrijving van-index georganiseerde tafels

Oracle Database VLDB en partitioneren voor informatie over het partitioneren-index georganiseerde tafels

Het creëren-Index Organized Tables

U gebruikt de instructie CREATE TABLE to-index georganiseerde tabellen te maken, maar je moet aanvullende informatie te verstrekken:

Een organisatie INDEX qualifier, wat aangeeft dat dit een-index georganiseerde tafel

Een primaire sleutel, aangegeven door een kolom constraint clausule (voor een enkele primaire sleutel kolom) of een tabel constraint clausule (voor een primaire sleutel met meerdere kolommen).

Optioneel kunt u de volgende informatie bevatten:

Een overloop clausule die dichte clustering van de B-tree index behoudt doordat de opslag van enkele nonkey kolommen in een separate overflow gegevenssegment.

Een PCTTHRESHOLD waarde, die, wanneer een overloop segment wordt gebruikt, definieert de maximale grootte van de portie van de rij die is opgeslagen in de index blok, als percentage van blokgrootte. Rijen kolommen die zou zorgen dat de rijgrootte om dit maximum overschreden worden opgeslagen in de overloop segment. De rij wordt afgebroken op een kolom grens in twee stukken, een kopstuk en staartstuk. Het kopstuk past in de opgegeven drempel en wordt opgeslagen, samen met de sleutel in de index blad blok. Het staartstuk wordt opgeslagen in het overloopgebied een of meer records stukken. Dus de indexitem bevat de sleutelwaarde, de nonkey kolomwaarden dat de vastgestelde drempel passen, en een verwijzing naar de rest van de rij.

INCLUSIEF een clausule die kan worden gebruikt om de nonkey kolommen die aangeven worden opgeslagen in de index blok met de primaire sleutel.

Voorbeeld: Het creëren van een-Index Organized Table

De volgende instructie maakt een index-georganiseerde tabel:

Oracle Database SQL Taal Reference voor meer informatie over de syntaxis om een ​​index-georganiseerde tabel te maken

Beperkingen voor-Index Organized Tables

De volgende zijn de beperkingen op het creëren-index georganiseerde tafels.

Het maximum aantal kolommen 1000.

Het maximum aantal kolommen in de index deel van een rij 255, zowel sleutel en nonkey kolommen. Als er meer dan 255 kolommen nodig zijn, moet u een overflow segment te gebruiken.

Het maximum aantal kolommen die u kunt opnemen in de primaire sleutel is 32.

PCTTHRESHOLD moet in het traject van 1–50. De standaard is 50.

Alle belangrijke kolommen moet passen binnen de vastgestelde drempel.

Als de maximale grootte van een rij meer dan 50% van de index blokgrootte en je hoeft niet een overloop segment opgeeft, de instructie CREATE TABLE mislukt.

-Index georganiseerde tabellen kunnen geen virtuele kolommen.

Het creëren-Index Organized Tabellen die Objecttypen bevatten

U kunt ook een index-georganiseerde tabel object types te creëren. Bijvoorbeeld:

Een ander voorbeeld, die volgt, laat zien dat-index georganiseerde tafels efficiënt op te slaan geneste tabellen. Voor een geneste tabelkolom, de database intern creëert een opslag tafel om alle geneste tabel rijen te houden.

De rijen die behoren tot een enkele geneste tabel bijvoorbeeld worden geïdentificeerd door een nested_table_id kolom. Als een gewone tafel wordt gebruikt om geneste tabel kolommen op te slaan, de geneste tabel rijen krijgen meestal de-geclusterd. Maar wanneer u een-index georganiseerde tabel te gebruiken, kan de geneste tabel rijen worden gegroepeerd op basis van de nested_table_id kolom.

Oracle Database SQL Language Reference voor meer informatie over de syntaxis gebruikt voor het maken-index georganiseerde tafels

Oracle Database VLDB en partitioneren voor informatie over het maken van gepartitioneerd-index georganiseerde tafels

Het kiezen en Monitoring een drempelwaarde

Kies een drempelwaarde die plaats biedt aan uw sleutel kolommen, evenals de eerste paar nonkey kolommen (als ze vaak worden benaderd).

Na het kiezen van een drempelwaarde, kunt u tabellen controleren om te controleren of de waarde die u opgegeven geschikt is. U kunt de ANALYSE tabel gebruiken. LIJST GEKETENDE RIJEN verklaring het aantal en de identiteit van rijen boven de drempelwaarde te bepalen.

Met behulp van de INCLUSIEF Clause

In aanvulling op het opgeven van PCTTHRESHOLD. kunt u de INCLUSIEF clausule te gebruiken om te bepalen welke nonkey kolommen worden opgeslagen met de sleutel kolommen. De database is geschikt voor alle nonkey kolommen tot en met de kolom opgegeven in de INCLUSIEF clausule in de index blad blok, op voorwaarde dat het niet de opgegeven drempel overschrijden. Alle nonkey kolommen boven de kolom opgegeven in de clausule INBEGRIP worden opgeslagen in de overloop segment. Als de INCLUSIEF en PCTTHRESHOLD clausules conflict, PCTTHRESHOLD voorrang.

Oracle Database beweegt alle primaire sleutel kolommen van een geïndexeerde-georganiseerde tabel om het begin van de tabel (in hun sleutel volgorde) om een ​​efficiënte primaire sleutel op te geven–gebaseerde toegang. Als voorbeeld:

De opgeslagen kolom volgorde is: c b a d (in plaats van: a b c d). De laatste primaire sleutel kolom b. basis van de opgeslagen kolomvolgorde. De INCLUSIEF kolom kan de laatste primaire sleutel kolom (b in dit voorbeeld), of een nonkey kolom (dat wil zeggen, een kolom na b in de opgeslagen kolomvolgorde).

De volgende CREATE TABLE is vergelijkbaar met het eerder aangetoond "Voorbeeld: Het creëren van een-Index Organized Table" maar gemodificeerd om een ​​index-georganiseerde tafel waar de waarde token_offsets veld voortaan in het overloopgebied opgeslagen maken:

Hier slechts nonkey kolommen vóór token_offsets (in dit geval een enkele kolom) met opgeslagen met de sleutelkolom waarden in de index blad blok.

Parallelizing-Index Organized Table Creation

De CREATE LIJST. AS SELECT-instructie kunt u een-index georganiseerde tafel en gegevens laden van een bestaande tabel te maken in. Door daaronder begrepen de clausule kan de belasting parallel worden uitgevoerd.

De volgende instructie maakt een index-georganiseerde tabel in parallel door rijen te selecteren uit de conventionele tabel hr.jobs:

Deze verklaring biedt een alternatief voor bulk-load parallel met behulp van SQL * Loader.

Met behulp van Key Compression

Het creëren van een index-georganiseerde tafel met behulp van key-compressie kunt u herhaalde voorvallen van de belangrijkste prefix kolomwaarden te elimineren.

Key compressie breekt een index sleutel in een prefix en een suffix binnenkomst. Compressie wordt bereikt door onder alle suffix items in een index blok delen van het voorvoegsel inzendingen. Dit delen kan leiden tot enorme besparingen in de ruimte, zodat u meer sleutels op te slaan in elke index blok terwijl het verbeteren van prestaties.

U kunt de sleutel compressie mogelijk te maken met behulp van de clausule COMPRESS terwijl:

Het creëren van een index-georganiseerde tafel

Verplaatsen van een index-georganiseerde tafel

U kunt ook de lengte van het voorvoegsel (zoals het aantal van de belangrijkste kolommen), waarin wordt aangegeven hoe de key kolommen zijn onderverdeeld in een prefix en achtervoegsel toegang opgeven.

De voorgaande verklaring komt overeen met de volgende verklaring:

Voor de lijst van waarden (1,2,3), (1,2,4), (1,2,7), (1,3,5), (1,3,4), (1,4, 4) de herhaalde gevallen van (1,2), (1,3) worden samengedrukt weg.

U kunt ook voorrang op de standaard prefixlengte gebruikt voor compressie als volgt:

Voor de lijst van waarden (1,2,3), (1,2,4), (1,2,7), (1,3,5), (1,3,4), (1,4, 4), de herhaalde voorvallen van 1 samengedrukt weg.

U kunt compressie als volgt uit:

Een toepassing van de belangrijkste compressie is in een tijd-serie applicatie die een set met tijdsaanduiding rijen die behoren tot een enkel item, gebruikt zoals een aandelenkoers. -Index georganiseerde tafels zijn aantrekkelijk voor toepassingen vanwege het vermogen rijen op basis van de primaire sleutel cluster. Door het definiëren van een index-georganiseerde tafel met primaire sleutel (voorraad symbool, tijdstempel) kunt u opslaan en tijdreeksen data efficiënt te manipuleren. Meer opslagruimte besparen door het comprimeren van de zich herhalende itemidentificator (bijvoorbeeld de beurssymbool) in een tijdreeks met behulp van een index-georganiseerde lijst met sleutel compressie.

Oracle Database concepten voor meer informatie over de belangrijkste compressie

Het handhaven-Index Organized Tables

-Index georganiseerde tafels verschillen van gewone tafels alleen in de fysieke organisatie. Logischerwijs worden ze gemanipuleerd op dezelfde wijze als gewone tafels. U kunt een index-georganiseerde tabel opgeven, net zoals u een gewone tafel zou geven in INSERT. SELECT. DELETE. en UPDATE verklaringen.

Het veranderen van-Index Organized Tables

Al het alter opties beschikbaar voor gewone tafels zijn beschikbaar voor-index georganiseerde tafels. Dit omvat ADD. WIJZIGEN. en drop KOLOMMEN en beperkingen. Echter, de primaire sleutel constraint voor een index-georganiseerde tabel niet worden verwijderd, uitgesteld, of uitgeschakeld

U kunt de instructie ALTER TABLE gebruiken om aan te passen fysieke en opslag attributen voor zowel de primaire sleutel index en overflow data segmenten. Alle opgegeven vóór de overloop sleutelwoord attributen van toepassing op de primaire sleutelindex segment. Alle attributen opgegeven na de overloop sleutelwoord zijn van toepassing op de overloop gegevens segment. Zo kunt u de INITRANS van de primaire sleutel index segment tot en met 4 en de overloop van de data segment INITRANS tot 6 te stellen als volgt:

Door het instellen van de INCLUSIEF kolom DOC_ID. alle kolommen die token_frequency en token_offsets volgen. worden opgeslagen in de overloop gegevenssegment.

Moving (Herbouwen)-Index Organized Tables

Omdat-index georganiseerde tafels voornamelijk opgeslagen in een B-tree index, kan fragmentatie ondervinden als gevolg van incrementele updates. Echter, kunt u de ALTER tabel gebruiken. MOVE verklaring aan de index weer op te bouwen en deze versnippering te verminderen.

In deze laatste verklaring wordt een index-georganiseerde tabel met een LOB-kolom (CLOB) gecreëerd. Later, wordt de tafel bewogen met de LOB-index en data segment herbouwd en verplaatst naar een nieuwe tablespace.

Het creëren van Secundaire Indexes on-Index Organized Tables

U kunt secundaire indexen te maken op een index-georganiseerde tafels om meerdere toegangspaden bieden. Secundaire indexen op-index georganiseerde tafels afwijken van indexen op gewone tafels op twee manieren:

Ze slaan logische rowids in plaats van fysieke rowids. Dit is nodig omdat de inherente beweeglijkheid rijen in een B-tree index resultaten in de rijen die geen vaste fysieke adressen. Als de fysieke locatie van een rij verandert de logische rowid geldig. Een gevolg hiervan is dat een tafel onderhoudsbeurt, zoals ALTER TABLE. MOVE. niet de secundaire index onbruikbaar te maken.

De logische rowid omvat ook een fysieke gok die de database blok adres waar de rij is waarschijnlijk te vinden identificeert. Als de fysieke gok juist is, zou een secundaire index scan een enkele extra I / O oplopen zodra de secundaire sleutel is gevonden. De prestatie zou vergelijkbaar met die van een secundaire index-scan op een gewone tafel.

Unieke en niet-unieke secundaire indexen,-functie op basis van secundaire indexen en bitmap indexen worden ondersteund als secundaire indexen op-index georganiseerde tafels.

Syntax voor het maken van de secundaire Index

De volgende verklaring toont de oprichting van een secundaire index op de docindex-index georganiseerd tafel waar doc_id en token zijn de belangrijkste kolommen:

Deze secundaire index zal de database een query zoals de volgende, het gaat om een ​​predikaat doc_id efficiënt te verwerken:

Het handhaven Fysieke Gissingen in Logical Rowids

Een logische rowid kan een schatting dat het blok van locatie identificeert een rij op het moment dat de schatting wordt gemaakt. In plaats van het doen van een volledige sleutel te zoeken, de database gebruikt de gok om het blok direct te doorzoeken. Echter, zoals nieuwe rijen worden ingevoegd, gissingen kan muf. De indexen nog wel gebruikt door de primaire sleutel-component van de logische rowid, maar de toegang tot rijen is langzamer.

Verzamel index statistieken met de DBMS_STATS pakket om de staleness gissingen te bewaken. De database controleert of de bestaande gissingen zijn nog steeds geldig en registreert het percentage van de rijen met geldige gissingen in de data dictionary. Deze statistiek is opgeslagen in de kolom van de PCT_DIRECT_ACCESS dba_indexes weergave (en bijbehorende views).

Om vers gissingen krijgen, kunt u de secundaire index opnieuw op te bouwen. Merk op dat de wederopbouw van een secundaire index op een index-georganiseerde tabel omvat het lezen van de basis tabel, in tegenstelling tot het herbouwen van een index op een gewone tafel. Een snellere, meer licht van gewicht betekent van de vaststelling van de gissingen is om de ALTER INDEX gebruiken. UPDATE regelverwijzingen statement. Deze verklaring is online uitgevoerd, terwijl DML is nog steeds toegelaten op de onderliggende index georganiseerd tafel.

Nadat u weer op te bouwen van een secundaire index, of op andere wijze het blok verwijzingen in de schattingen te actualiseren, verzamel index statistieken weer.

bitmap Indexes

Bitmap indexen op-index georganiseerde tafels worden ondersteund, op voorwaarde dat de index-georganiseerde tabel is gemaakt met een mapping tafel. Dit wordt gedaan door het specificeren van de mapping-tabel clausule in de CREATE TABLE die u gebruikt om de index-georganiseerde tabel te maken, of in een ALTER TABLE om het in kaart brengen tafel later toevoegen.

Oracle Database concepten voor een beschrijving van toewijzingstabellen

Het analyseren-Index Organized Tables

Net als gewone tafels, zijn-index georganiseerd tafels geanalyseerd met behulp van de DBMS_STATS pakket, of de ANALYSE verklaring.

Verzamelen Optimizer Statistieken voor-Index Organized Tables

Om optimizer statistieken verzamelen, gebruiken de DBMS_STATS pakket.

Bijvoorbeeld, de volgende verklaring verzamelt statistieken voor de tabel-index georganiseerde landen in de hr-schema:

De DBMS_STATS pakket analyseert zowel de primaire sleutel index segment en de overloop data segment, en berekent logische en fysieke statistieken voor de tafel.

De logische statistieken kunnen worden opgevraagd met behulp van user_tables. ALL_TABLES of dba_tables.

Oracle Database Performance Tuning Guide voor meer informatie over het verzamelen van statistieken optimizer

Valideren van de structuur van-Index Organized Tables

Gebruik de ANALYSE verklaring aan de structuur van uw-index georganiseerd tafel te valideren of aan een geketend rijen lijst. Deze handelingen worden besproken in de volgende paragrafen elders in dit boek:

Er zijn speciale overwegingen bij de opsomming geketend rijen voor-index georganiseerde tafels. Deze worden besproken in de Oracle Database SQL Language Reference.

Met behulp van de ORDER BY clausule met-Index Organized Tables

Als een ORDER BY-clausule alleen verwijst naar de primaire sleutel kolom of een voorvoegsel van het, dan is de optimizer vermijdt het sorteercentrum overhead, omdat de rijen worden geretourneerd gesorteerd op de primaire sleutel kolommen.

De volgende query’s te voorkomen sorteren overhead omdat de gegevens al wordt gesorteerd op de primaire sleutel:

Als u echter een ORDER BY-component op een achtervoegsel van de primaire sleutel kolom of niet-primaire-key kolommen, is extra sortering vereist (ervan uitgaande dat er geen andere secundaire indexen worden gedefinieerd).

Het omzetten-Index Organized Tables naar Regular Tables

U kunt-index georganiseerde tafels om te zetten in reguliere (heap georganiseerde) tabellen met behulp van de Oracle import of export hulpprogramma’s of de CREATE LIJST. AS SELECT-instructie.

Om een ​​index-georganiseerde tabel converteren naar een vaste tafel:

Exporteer de-index georganiseerde tabel gegevens met behulp van conventionele pad.

Maak een vaste tafel definitie met dezelfde definitie.

Importeer de-index georganiseerde tafel gegevens, om ervoor te zorgen NEGEREN = y (zorgt ervoor dat object bestaat fout wordt genegeerd).

Voor het omzetten van een index-georganiseerde tafel om een ​​vaste tafel, zich ervan bewust dat-index georganiseerde tafels niet kan worden uitgevoerd met behulp van pre-Oracle8 versies van het hulpprogramma Export.

Oracle Database Utilities voor meer informatie over het gebruik van de oorspronkelijke IMP en EXP nutsbedrijven en de Data Pump import en export nutsbedrijven

Managing External Tables

Dit gedeelte bevat:

Over Externe Tables

Oracle Database kunt u alleen-lezen toegang tot de gegevens in de externe tafels. Externe tabellen gedefinieerd als tabellen die niet bevinden in de database, en kan in elk formaat waarvoor toegang is verschaft. Door de database metagegevens een externe tabel, de database kan de gegevens bloot externe tabel alsof het data die zich in een normale databasetabel. De externe gegevens kunnen direct en in parallel worden opgevraagd met behulp van SQL.

U kunt bijvoorbeeld selecteren, te sluiten, of externe tafel gegevens te sorteren. U kunt ook uitzicht en synoniemen voor externe tabellen te maken. Er zijn echter geen DML operaties (UPDATE. INSERT. Of DELETE) zijn mogelijk, en er geen indexen kunnen worden gemaakt, over de externe tafels.

Externe tabellen bieden een kader om het resultaat van een willekeurige SELECT-instructie in een platform-onafhankelijke Oracle-eigen formaat dat gebruikt kan worden door Oracle Data Pump lossen. Externe tabellen geven een waardevol middel voor het uitvoeren van eenvoudige extractie, transformatie en laden (ETL) taken die gemeenschappelijk voor data warehousing zijn.

De middelen van het definiëren van de metadata voor externe tabellen is via de CREATE LIJST. ORGANISATIE EXTERNE verklaring. Deze externe tabeldefinitie kan worden gezien als een uitzicht dat elke SQL-query tegen externe data maakt het lopen zonder dat de externe gegevens eerst in de database worden geladen. Een toegangspunt stuurprogramma het eigenlijke mechanisme om de externe gegevens in de tabel gelezen. Wanneer u externe tabellen gebruiken om gegevens te lossen, wordt de metadata automatisch gemaakt op basis van het soort data in de SELECT-instructie.

Oracle Database biedt twee toegang drivers voor externe tafels. De standaard toegang voor de bestuurder is ORACLE_LOADER. die het mogelijk maakt het lezen van gegevens uit externe bestanden met behulp van de Oracle-loader-technologie. De toegang ORACLE_LOADER driver biedt data mapping-mogelijkheden die een subset van de control file syntaxis van SQL * Loader nut zijn. De tweede toegang voor de bestuurder, ORACLE_DATAPUMP. Hiermee kunt u gegevens uit te laden—dat wil zeggen, data lezen uit de database en plaats deze in een externe tabel, weergegeven door één of meer externe bestanden—en dan het opnieuw in een Oracle Database.

De ANALYSE verklaring wordt niet ondersteund voor het verzamelen van statistieken voor externe tafels. Gebruik de DBMS_STATS pakket plaats.

Oracle Database Utilities voor meer informatie over de toegang drivers

Oracle Database Data Warehousing Guide voor informatie over het gebruik van externe tafels voor ETL in een data warehousing omgeving

Oracle Database Performance Tuning Guide voor informatie over het gebruik van de DBMS_STATS pakket

Externe Table Beperkingen

De volgende zijn beperkingen op de externe tabellen:

De ANALYSE verklaring wordt niet ondersteund voor het verzamelen van statistieken voor externe tafels. Gebruik de DBMS_STATS pakket plaats.

Virtual kolommen worden niet ondersteund

Oracle Database Utilities voor meer informatie over de toegang drivers

Oracle Database Data Warehousing Guide voor informatie over het gebruik van externe tafels voor ETL in een data warehousing omgeving

Oracle Database Performance Tuning Guide voor informatie over het gebruik van de DBMS_STATS pakket

Het creëren van externe Tables

U maakt externe tabellen met behulp van de instructie CREATE TABLE met een organisatie EXTERNE clausule. Deze instructie maakt alleen metagegevens in de data dictionary.

Externe tabellen kunnen geen virtuele kolommen.

Het volgende voorbeeld wordt een externe tabel en vervolgens uploadt de gegevens naar een database tabel. Als alternatief kunt u gegevens via de externe tabel kader lossen door het opgeven van de AS subquery clausule van de instructie CREATE TABLE. Externe tabelgegevens pomp lossen kan alleen de toegang ORACLE_DATAPUMP driver te gebruiken.

Voorbeeld: Het creëren van een externe tabel en laden van data

In dit voorbeeld worden de gegevens voor de externe tabel bevindt in de twee tekstbestanden empxt1.dat en empxt2.dat.

Het bestand empxt1.dat de volgende voorbeeld gegevens bevat:

Het bestand empxt2.dat de volgende voorbeeld gegevens bevat:

De volgende paragrafen bevatten beschrijvende informatie over dit voorbeeld.

De eerste paar verklaringen in dit voorbeeld maakt u de directory-objecten voor het besturingssysteem mappen die de gegevensbronnen bevatten, en voor de slechte plaat en logbestanden opgegeven in de toegang tot parameters. U moet ook LEES verlenen of SCHRIJF directory object privileges, naargelang het geval.

Bij het maken van een map object of BFILEs, ervoor te zorgen dat de volgende voorwaarden wordt voldaan:

Het besturingssysteem bestand mag geen symbolische of harde koppeling zijn.

Het besturingssysteem pad genoemd in de Oracle Database directory object moet een bestaande OS pad zijn.

Het besturingssysteem pad genoemd in de map object mag geen symbolische koppelingen in zijn onderdelen bevatten.

De TYPE-specificatie geeft de toegang voor de bestuurder van de externe tabel. De toegang voor de bestuurder is de API die de externe gegevens interpreteert voor de database. Als u het specificatie weglaat, ORACLE_LOADER is de standaard toegang voor de bestuurder. U moet de ORACLE_DATAPUMP toegang voor de bestuurder te geven of u de AS-clausule subquery om gegevens te laden van de ene Oracle Database en plaats het in dezelfde of een andere Oracle Database opgeven.

De toegang tot parameters, vermeld in de ACCESS PARAMETERS clausule, zijn ondoorzichtig aan de database. Deze toegang parameters worden bepaald door de toegang voor de bestuurder en de toegang stuurprogramma van het gegevensbestand wanneer de externe tabel wordt geopend. Zie Oracle Database Utilities voor een beschrijving van de toegang ORACLE_LOADER parameters.

De parallelle clausule maakt het mogelijk parallel query op het gegevensbronnen. Het granulaat van parallellisme is standaard een gegevensbron, maar parallel toegang binnen een gegevensbron wordt uitgevoerd waar mogelijk. Bijvoorbeeld, als PARALLEL = 3 werden opgegeven, wordt meerdere parallelle uitvoering servers zou kunnen worden gewerkt aan een gegevensbron. Maar, wordt parallel toegang binnen een gegevensbron die door de toegang voor de bestuurder alleen als aan alle onderstaande voorwaarden wordt voldaan:

De media laat willekeurige positionering binnen een gegevensbron

Het is mogelijk om een ​​recordgrens een willekeurige plaats vinden

De gegevensbestanden zijn groot genoeg om het de moeite waard te breken in meerdere brokken maken

Het opgeven van een PARALLEL clausule is alleen van waarde als het gaat om grote hoeveelheden data. Anders is het niet aan te raden om een ​​parallelle clausule specificeren, en hij doet dat kan schadelijk zijn.

De REJECT LIMIT clausule geeft aan dat er geen limiet op het aantal fouten die kunnen optreden tijdens een query van de externe gegevens. Voor parallelle toegang, de REJECT LIMIT geldt voor elk parallel uitvoeren server onafhankelijk van elkaar. Bijvoorbeeld, als een VERWERPEN limiet van 10 is opgegeven, dan is elk parallel queryproces kan laten 10 afwijzingen. Daarom, met een parallelle mate van twee en een REJECT limiet van 10, zou de verklaring niet met tussen de 10 en 20 afwijzingen. Als een parallel server verwerkt alle 10 afwijzingen, dan is de limiet is bereikt, en de verklaring is beëindigd. Echter, een parallel uitvoeren server kan verwerken negen afwijzingen en een andere parallel uitvoeren server kan negen afwijzingen verwerken en de verklaring zal slagen met 18 afwijzingen. Vandaar dat de enige juist afgedwongen waarden voor REJECT LIMIT op parallelle query 0 en onbeperkt.

In dit voorbeeld is het inzetstuk in TABLE genereert een gegevensstroom van de externe gegevensbron de Oracle Database SQL engine waarin gegevens worden verwerkt. Als data wordt ontleed door de toegang voor de bestuurder van de externe tabel bronnen en verstrekt aan de externe tabel-interface, wordt de externe gegevens geconverteerd van haar externe vertegenwoordiging zijn Oracle Database interne data type.

Oracle Database SQL Language Reference geeft details over de syntaxis van de instructie CREATE TABLE voor het maken van externe tabellen en specificeert de beperkingen op het gebruik van clausules

Het veranderen van externe Tables

U kunt alle ALTER TABLE clausules in tabel 20-5 om de kenmerken van een externe tabel wijzigen. Geen andere clausules zijn niet toegestaan.

Tabel 20-5 ALTER LIJST Clausules Buitenlandse Tables

Bepaalt hoe de toegang voor de bestuurder valideert rijen in de volgende zoekopdrachten:

PROJECT COLUMN verwezen. de toegang voor de bestuurder processen alleen de kolommen in de selecte lijst van de query. Deze instelling kan niet zorgen voor een consistente set van rijen bij het opvragen van een andere lijst kolom uit dezelfde externe tafel.

PROJECT COLUMN ALL. de toegang voor de bestuurder verwerkt alle gedefinieerd op de externe tabel kolommen. Deze instelling zorgt altijd voor een consistente set van rijen bij het opvragen van een externe tafel. Dit is de standaard.

Verandert de standaard directory-specificatie

Preprocessing Externe Tables

Er zijn security implicaties te overwegen bij het gebruik van de preprocessor clausule. Zie Oracle Database Security Guide voor meer informatie.

Externe tabellen kunnen worden voorbewerkt door gebruiker geleverde preprocessor’s. Met behulp van een voorbewerking programma kunnen gebruikers gegevens uit een bestand dat zit niet in een formaat dat wordt ondersteund door de bestuurder. Bijvoorbeeld kan een gebruiker wenst te bekijken die zijn opgeslagen in een gecomprimeerd formaat. Het opgeven van een decompressie programma voor de toegang ORACLE_LOADER bestuurder kan de gegevens die moeten worden uitgepakt als de toegang voor de bestuurder verwerkt de gegevens.

Om het voorbewerken functie te kunnen gebruiken, moet u de preprocessor clausule in de toegang tot de parameters van de toegang ORACLE_LOADER driver te specificeren. De preprocessor moet een directory-object te zijn, en de gebruiker de toegang tot externe tabel moet UITVOEREN privileges voor de directory-object te hebben. In het volgende voorbeeld bevat de Preprocessor clausule en specificeert de directory en preprocessor programma.

De preprocessor clausule is niet beschikbaar voor databases die Oracle Database Vault te gebruiken.

Oracle Database Utilities geeft informatie meer informatie over de Preprocessor clausule

Oracle Database Security Guide voor meer informatie over de gevolgen voor de beveiliging van de preprocessor clausule

Dropping Externe Tables

Voor een externe tabel, de DROP TABLE verwijdert alleen de tafel metadata in de database. Het heeft geen invloed op het werkelijke gegevens, die zich buiten de database.

Systeem en Object voorrechten Buitenlandse Tables

System en object privileges voor externe tafels zijn een subset van die voor de vaste tafel. Alleen de volgende systeemrechten zijn van toepassing op externe tabellen:

CREATE een tabel

ALTER een tabel

SELECT een tabel

Alleen het volgende object privileges zijn van toepassing op externe tabellen:

Bron: docs.oracle.com

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

een × 2 =