Servicii baze de date

MySql 60 Solutii

SQL Server 242 Solutii

Partial Indexes for Partitioned Tables in Oracle Database

Table: INDEXING [ON | OFF] Clause

Decizia despre ce partiții sunt indexate se ia folosind INDEXING [ON | OFF] asociată fiecărei partiții, implicit fiind INDEXING ON. Creăm un tabel partiționat cu trei partiții. Primele două partiții au indexarea activată. Una implicit și alta în mod explicit. A treia partiție are indexarea dezactivată.

— Creați și completați tabelul partiționat.

drop table t1 purge;

create table t1 (
id number,
description varchar2(50),
created_date date
)
partition by range (created_date) (
partition part_2021 values less than (date ‘2021-01-01’),
partition part_2022 values less than (date ‘2022-01-01’) indexing on,
partition part_2023 values less than (date ‘2023-01-01’) indexing off
);

insert into t1 values (1, ‘t1 one’, date ‘2021-07-01’);
insert into t1 values (2, ‘t1 two’, date ‘2023-07-01’);
insert into t1 values (3, ‘t1 three’, date ‘2023-01-01’);
commit;

Coloana INDEXING a viewului USER_TAB_PARTITIONS ne arată starea de indexare a fiecărei partiții. Doar partiția 2023 are INDEXING dezactivat.

column table_name format a20
column partition_name format a20

select table_name,
partition_name,
indexing
from user_tab_partitions
where table_name = ‘T1’
order by 1,2;

TABLE_NAME PARTITION_NAME INDE
——————– ——————– —-
T1 PART_2021 ON
T1 PART_2022 ON
T1 PART_2023 OFF

SQL>

Schimbăm clauza de indexare pentru o partiție folosind comanda ALTER TABLE … MODIFY PARTITION. Dezactivăm indexarea pentru partițiile 2021 și 2022 și activăm indexarea pentru partiția 2023.

alter table t1 modify partition part_2021 indexing off;
alter table t1 modify partition part_2022 indexing off;
alter table t1 modify partition part_2023 indexing on;

Putem vedea modificările reflectate în rezultatul din vizualizarea USER_TAB_PARTITIONS. Indexarea este dezactivată pentru partițiile 2021 și 2022. Indexarea este activată pentru partiția 2023.

select table_name,
partition_name,
indexing
from user_tab_partitions
where table_name = ‘T1’
order by 1,2;

TABLE_NAME PARTITION_NAME INDE
——————– ——————– —-
T1 PART_2021 OFF
T1 PART_2022 OFF
T1 PART_2023 ON

SQL>

Index: INDEXING [FULL | PARTIAL] Clause

Chiar și cu setările de indexare a partiției activate, în mod implicit, indecșii sunt creați ca INDEXING FULL, deci setarea partiției este ignorată.

Creăm un index local pe coloana CREATED_DATE. Dacă nu specificăm clauza INDEXING în timpul creării indexului, acțiunea implicită este INDEXING FULL.

drop index t1_local_partial_idx;

— create index t1_local_partial_idx on t1(created_date) local indexing full;
create index t1_local_partial_idx on t1(created_date) local;

Verificând coloana STATUS a viewului USER_IND_PARTITIONS, vedem că toate partițiile indexului sunt utilizabile. În mod implicit, crearea indexului ignoră setarea INDEXARE a partițiilor de tabel.

column index_name format a25

select index_name,
partition_name,
status
from user_ind_partitions
where index_name = ‘T1_LOCAL_PARTIAL_IDX’
order by 1,2;

INDEX_NAME PARTITION_NAME STATUS
————————- ——————– ——–
T1_LOCAL_PARTIAL_IDX PART_2021 USABLE
T1_LOCAL_PARTIAL_IDX PART_2022 USABLE
T1_LOCAL_PARTIAL_IDX PART_2023 USABLE

SQL>

Verificând coloana INDEXING a vizualizării USER_INDEXES, vedem că indexul este marcat ca indexare COMPLET.

column indexing format a8

select index_name,
indexing
from user_indexes
where index_name = ‘T1_LOCAL_PARTIAL_IDX’
order by 1;

INDEX_NAME INDEXING
————————- ——–
T1_LOCAL_PARTIAL_IDX FULL

SQL>

Stergem indexul și îl creăm din nou, de data aceasta folosind clauza INDEXING PARTIAL.

drop index t1_local_partial_idx;
create index t1_local_partial_idx on t1(created_date) local indexing partial;

Acum vedem că partițiile de tabel marcate ca INDEXING OFF nu sunt indexate și au partiții de index marcate ca inutilizabile. Partiția de tabel din 2023 a fost marcată ca INDEXING ON, deci este indexată și vedem o partiție de index utilizabilă.

select index_name,
partition_name,
status
from user_ind_partitions
where index_name = ‘T1_LOCAL_PARTIAL_IDX’
order by 1,2;

INDEX_NAME PARTITION_NAME STATUS
————————- ——————– ——–
T1_LOCAL_PARTIAL_IDX PART_2021 UNUSABLE
T1_LOCAL_PARTIAL_IDX PART_2022 UNUSABLE
T1_LOCAL_PARTIAL_IDX PART_2023 USABLE

SQL>

Verificând coloana INDEXING a vizualizării USER_INDEXES, vedem că indexul este marcat ca indexare PARTIAL.

column indexing format a8

select index_name,
indexing
from user_indexes
where index_name = ‘T1_LOCAL_PARTIAL_IDX’
order by 1;

INDEX_NAME INDEXING
————————- ——–
T1_LOCAL_PARTIAL_IDX PARTIAL

SQL>

Indecșii globali pot fi creați și ca indecși parțiali, doar cu partițiile marcate incluse în index.
Creăm un index global parțial. Observați utilizarea clauzei de indexare “partial”. Indexul rezultat este marcat ca INDEXING PARTIAL.

create index t1_global_partial_idx on t1(description) global indexing partial;

— Verificati statusul indexului

select index_name,
indexing
from user_indexes
where index_name like ‘T1%’
order by 1;

INDEX_NAME INDEXING
————————- ——–
T1_GLOBAL_PARTIAL_IDX PARTIAL
T1_LOCAL_PARTIAL_IDX PARTIAL

SQL>

[mai mult...]

Instalare baza de date Oracle 19c pe Oracle Linux 7 (OL7)

Acest articol descrie instalarea bazei de date Oracle 19c pe Oracle Linux 7 X64 (OL7)

1: Download Software
Download the Oracle software from OTN or My Oracle Support

2 Fișierul hosts
Fișierul „/etc/hosts” trebuie să conțină un nume complet calificat pentru server.

De exemplu.

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.1.100 oel7.localdomain oel7

Setați numele de gazdă corect în fișierul „/etc/hostname”.

oel7.localdomain

3: Cerințe preliminare de instalare Oracle ( prerechizite)

Efectuați fie Configurarea automată, fie Configurarea manuală pentru a îndeplini cerințele preliminare de bază. Configurarea suplimentară este necesară pentru toate instalările

3.1 Automatic Setup

Folosirea packetului oracle-database-preinstall-19c va instala si va configura automat o parte din cerintele necesare instalarii  bazei de date oracle 19c. Pentru instalare acestuia rulati conectat ca root urmatoarea comanda:

# yum install -y oracle-database-preinstall-19c

Configurare manuală

Dacă nu ați folosit pachetul „oracle-database-preinstall-19c” pentru a îndeplini toate cerințele preliminare, va trebui să efectuați manual următoarele configurari

Adăugați următoarele linii în fișierul „/etc/sysctl.conf” sau într-un fișier numit „/etc/sysctl.d/98-oracle.conf”.

fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

Rulați una dintre următoarele comenzi pentru a modifica parametrii systemului de operare (kernel), în funcție de fișierul pe care l-ați editat.

/sbin/sysctl -p
# Or
/sbin/sysctl -p /etc/sysctl.d/98-oracle.conf

Adăugați următoarele linii într-un fișier numit „/etc/security/limits.d/oracle-database-preinstall-19c.conf”.

oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728

Următoarele pachete sunt necesare pentru instalarea Oracle.

yum install -y bc
yum install -y binutils
yum install -y compat-libcap1
yum install -y compat-libstdc++-33
#yum install -y dtrace-modules
#yum install -y dtrace-modules-headers
#yum install -y dtrace-modules-provider-headers
yum install -y dtrace-utils
yum install -y elfutils-libelf
yum install -y elfutils-libelf-devel
yum install -y fontconfig-devel
yum install -y glibc
yum install -y glibc-devel
yum install -y ksh
yum install -y libaio
yum install -y libaio-devel
yum install -y libdtrace-ctf-devel
yum install -y libXrender
yum install -y libXrender-devel
yum install -y libX11
yum install -y libXau
yum install -y libXi
yum install -y libXtst
yum install -y libgcc
yum install -y librdmacm-devel
yum install -y libstdc++
yum install -y libstdc++-devel
yum install -y libxcb
yum install -y make
yum install -y net-tools # Clusterware
yum install -y nfs-utils # ACFS
yum install -y python # ACFS
yum install -y python-configshell # ACFS
yum install -y python-rtslib # ACFS
yum install -y python-six # ACFS
yum install -y targetcli # ACFS
yum install -y smartmontools
yum install -y sysstat

# Added by me.
yum install -y unixODBC

Creați noile grupuri de utilizatori și utilizatorii.

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
#groupadd -g 54324 backupdba
#groupadd -g 54325 dgdba
#groupadd -g 54326 kmdba
#groupadd -g 54327 asmdba
#groupadd -g 54328 asmoper
#groupadd -g 54329 asmadmin
#groupadd -g 54330 racdba

useradd -u 54321 -g oinstall -G dba,oper oracle

 

Additional Setup

Setați parola pentru utilizatorul „oracle”.

#passwd oracle

Setați Linux securizat la permisiv prin editarea fișierului „/etc/selinux/config”, asigurându-vă că marcajul SELINUX este setat după cum urmează.

SELINUX=permissive

Odată ce modificarea este completă, reporniți serverul sau executați următoarea comandă.

# setenforce Permissive

Dacă aveți paravanul de protecție Linux activat, va trebui să îl dezactivați sau sa il configurati. Pentru dezactivare folositi urmatoarele comenzi:

# systemctl stop firewalld
# systemctl disable firewalld

Creați directoarele în care va fi instalat software-ul Oracle.

mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
mkdir -p /u02/oradata
chown -R oracle:oinstall /u01 /u02
chmod -R 775 /u01 /u02

Setati variabilele de system

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/19.0.0/dbhome_1

  • Instalarea

Conectați-vă la utilizatorul Oracle. Dacă utilizați X display, setați variabila de mediu DISPLAY.

DISPLAY=<server-name>:0.0; export DISPLAY

Dezarhivați software-ul direct in foldderul ORACLE_HOME și porniți Oracle Universal Installer (OUI) lansând una dintre următoarele comenzi în directorul ORACLE_HOME. Modul interactiv va afișa ecrane de instalare a GUI pentru a permite intrarea utilizatorului, în timp ce modul silențios va instala software-ul fără a afișa niciun ecran, deoarece toate opțiunile necesare sunt deja specificate pe linia de comandă.

# Unzip software.
cd $ORACLE_HOME
unzip -oq /path/to/software/LINUX.X64_193000_db_home.zip

# Interactive mode.
./runInstaller

# Silent mode.
./runInstaller -ignorePrereq -waitforcompletion -silent \
-responseFile ${ORACLE_HOME}/install/response/db_install.rsp \
oracle.install.option=INSTALL_DB_SWONLY \
ORACLE_HOSTNAME=${ORACLE_HOSTNAME} \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=${ORA_INVENTORY} \
SELECTED_LANGUAGES=en,en_GB \
ORACLE_HOME=${ORACLE_HOME} \
ORACLE_BASE=${ORACLE_BASE} \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSBACKUPDBA_GROUP=dba \
oracle.install.db.OSDGDBA_GROUP=dba \
oracle.install.db.OSKMDBA_GROUP=dba \
oracle.install.db.OSRACDBA_GROUP=dba \
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
DECLINE_SECURITY_UPDATES=true

Rulați scripturile de administrare (root) când vi se solicită.

Ca utilizator root, executați următoarele scripturi:

1. /u01/app/oraInventory/orainstRoot.sh
2. /u01/app/oracle/product/19.0.0/dbhome_1/root.sh

Acum sunteți gata să creați o bază de date.

[mai mult...]

UTL_MAIL : Cum sa trimiti emailuri din PL/SQL in Oracle Database

Pachetul UTL_MAIL a fost introdus în Oracle 10g pentru a oferi un API simplu care să permită trimiterea e-mailurilor din  PL/SQL. În versiunile anterioare, acest lucru era posibil folosind pachetul UTL_SMTP, dar acest lucru necesita cunoștințe despre protocolul SMTP.

Setup

Pachetul este încărcat prin rularea următoarelor scripturi.

CONN sys/password AS SYSDBA
@$ORACLE_HOME/rdbms/admin/utlmail.sql
@$ORACLE_HOME/rdbms/admin/prvtmail.plb

În plus, parametrul SMTP_OUT_SERVER trebuie setat pentru a identifica serverul SMTP.

CONN sys/password AS SYSDBA
ALTER SYSTEM SET smtp_out_server=’smtp_server.domain.com’ SCOPE=SPFILE;

Restartarea bazei de date:

SHUTDOWN IMMEDIATE
STARTUP

Sugestia mea este să utilizați un mail relay pe serverul bazei de date, în loc să vă conectați direct la un server de e-mail extern.
Configurația unui mail relay poate fi simplă, cu o referință la „localhost” în parametrul SMTP_OUT_SERVER. Orice complexitate legată de conectarea la serverul dvs. de e-mail extern este apoi ascunsă în configurația mail relay

Trimiterea de e-mailuri

Odată cu finalizarea configurației, acum putem trimite un e-mail utilizând procedura SEND. Acceptă următorii parametri.

SENDER: Aceasta ar trebui să fie o adresă de e-mail validă.
RECIPIENTS: O listă de adrese de e-mail, separate prin virgulă.
CC : O listă opțională de adrese de e-mail separate prin virgulă.
BCC : o listă opțională de adrese de e-mail separate prin virgulă.
SUBJECT : linia de subiect pentru e-mail.
MESSAGE : Corpul e-mailului.
MIME_TYPE : Setat la „text/plain; charset=us-ascii’ implicit.
PRIORITY : (1-5) Setată implicit la 3.
REPLYTO: Introdus în 11gR2. O adresă de e-mail validă.

Mai jos este un exemplu de utilizare.

BEGIN
UTL_MAIL.send(sender => ‘eu@domain.com’,
recipients => ‘coleg1@domain.com,coleg2@domain.com’,
cc => ‘manager1@domain.com’,
bcc => ‘manager2@domain.com’,
subject => ‘UTL_MAIL Test’,
message => ‘Daca primesti mesajul , merge!’);
END;
/

Trimite e-mailuri cu atașamente

Pachetul acceptă și trimiterea de e-mailuri cu atașamente RAW și VARCHAR2 folosind pachetele SEND_ATTACH_RAW și, respectiv, SEND_ATTACH_VARCHAR2. Ele funcționează într-un mod similar cu procedura SEND, cu câțiva parametri suplimentari.

ATTACHMENT : Conținutul atașamentului. Acesta ar trebui să fie VARCHAR2 sau RAW, în funcție de procedura pe care o apelați.
ATT_INLINE : Indică dacă atașarea ar trebui să fie citită în linie. Implicit FALSE.
ATT_MIME_TYPE : Valoarea implicită este „text/plain; charset=us-ascii’.
ATT_FILENAME : Numele atașamentului.

Mai jos este un exemplu de trimitere a unui e-mail cu un atașament text.

BEGIN
UTL_MAIL.send_attach_varchar2 (
sender => ‘eu@domain.com’,
recipients => ‘coleg1@domain.com,coleg2@domain.com’,
cc => ‘manager1@domain.com’,
bcc => ‘manager2@domain.com’,
subject => ‘UTL_MAIL Test’,
message => ‘Daca primesti mesajul , merge!’,
attachment => ‘Acesta este conținutul atașamentului.’,
att_filename => ‘my_attachment.txt’
);
END;
/

[mai mult...]