user و schema در پستگرس و اوراکل

همانطور که می دانید، user به منظور اتصال و مدیریت دیتابیس ایجاد می شود و schema هم مجموعه ای از objectها نظیر جدول، ایندکس، ویو و … تحت یک نام می باشد در این مطلب تفاوتهای user و schema را در دو دیتابیس پستگرس و اوراکل تشریح خواهیم کرد.

در دیتابیس اوراکل، با ایجاد user، به صورت خودکار schema هم ایجاد خواهد شد و به عبارتی دقیق تر، با ایجاد اولین object برای یک user، به آن user، اسکیما(schema) هم گفته می شود و دستور مجزایی برای ساخت schema وجود ندارد.

البته دستور CREATE SCHEMA که در اوراکل وجود دارد عملا schemaای را ایجاد نخواهد کرد و صرفا امکان ساخت چندین شی را از طریق یک دستور فراهم می سازد برای مثال با توجه به آنکه کاربر usef2 در دیتابیس موجود نیست، دستور زیر با خطا متوقف خواهد شد:

SQL> create schema authorization usef2

create table t1 (c1 number)

create table t2 (c2 number); 

ORA-02421: missing or invalid schema authorization identifier

(بیشتر…)

SMON و Transaction Recovery

همانطور که در مطلب Direct path vs Conventional insert بیان شد، زمانی که با اجرای دستور DMLای، تغییری را در جدولی ایجاد می کنیم، قبل از اجرای دستور commit، اوراکل بلاکهای جدول را به حافظه منتقل کرده و سپس اطلاعات جدید تایید نشده را در این بلاکها درج/حذف/اصلاح می کند(در حالت Conventional) همچنین شکل قبلی رکوردها در undo segment و یا rollback segment ثبت خواهد شد.

(بیشتر…)

اوراکل؛پستگرس – نمایش حجم جداول و دیتابیس بصورت Human-Readable

در سیستم عامل لینوکس به همراه دستوراتی که فضای مصرفی فایلها، دایرکتوریها و پارتیشنها را نمایش می دهند (نظیر df و du) می توان از سوییچ h برای نمایش خواناتر خروجی استفاده کرد که کلمه h مخفف عبارت Human-Readable می باشد.

مثال:

[oracle@host ~]$ df

Filesystem            1K-blocks       Used  Available Use% Mounted on

/dev/sda3             543928992  169894132  346381740  33% /

tmpfs                 178257920     351512  177906408   1% /dev/shm

/dev/sda1                499656     144960     318000  32% /boot

 

[oracle@host ~]$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3             519G  163G  331G  33% /

tmpfs                 170G  344M  170G   1% /dev/shm

/dev/sda1             488M  142M  311M  32% /boot

در محیط دیتابیس هم توابعی وجود دارند که بتوان از طریق آنها حجم مصرفی segmentها و دیتابیس را به صورت خوانا نمایش داد.

(بیشتر…)

آموزش PL/SQL قسمت دهم – رکورد در اوراکل PL/SQL

در این قسمت رکورد (RECORD) در PL/SQL و روش استفاده از آن را توضیح می دهیم. رکورد یک ساختمان داده است که آیتم های متفاوت را کنار هم نگه می دارد. یعنی بر خلاف آرایه، این آیتم ها نوع داده متفاوت دارند. به همین جهت، هر سطر از جدول را یک رکورد می نامند زیرا معمولا سطرها از ستون های با نوع داده متفاوت تشکیل شده اند.

برای مثال می خواهیم اطلاعات کتاب های یک کتابخانه را بررسی کنیم. برای این کتاب ها مشخصات مختلف از جمله عنوان، نام نویسنده، موضوع کتاب و شماره کتاب وجود دارد. بنابراین برای آن ها یک رکورد با فیلدهای مورد نیاز تعریف می کنیم و اطلاعات مورد نظر را به شیوه بهتر دسته بندی کرده و نمایش می دهیم.

در PL/SQL می توان رکورد را به سه روش زیر تعریف کرد که در ادامه توضیح می دهیم.

(بیشتر…)

برقراری ارتباط بین دو دیتابیس بدون استفاده از DBlink

در محیط SQLcl می توان با کمک دستور bridge بین دو دیتابیس ارتباط برقرار کرد.

ابتدا فرمت کلی دستور bridge را مرور می کنیم:

BRIDGE <targetTableName> as “<jdbcURL>”(<sqlQuery>);

به عنوان مثال، با دستور زیر، جدولی را از دیتابیس db19c، در دیتابیس جاری ایجاد می کنیم:

SQL> tables
no rows selected

SQL> bridge tbl2 as “jdbc:oracle:thin:usef/a@192.168.1.20:1521/orcl”(select * from TBL1);

Created table tbl2 and inserted 9 row(s)

SQL> tables
TABLES                                                                         
———–
TBL2

علاوه بر دستور bridge دستور copy هم به عنوان یک دستور قدیمی برای برقراری ارتباط بین چند دیتابیس قابل استفاده است. البته این دستور علاوه بر محیط SQLcl، در محیط sqlplus قابل اجرا است:

SQL> copy from usef/a@192.168.1.20:1521/db1  to usef/a@192.168.1.22:1521/db2 create tbl7 using select * from tbl1; 

Array fetch/bind size is 15. (arraysize is 15)

Will commit when done. (copycommit is 0)

Maximum long size is 80. (long is 80)

Table TBL7 created.

   9 rows selected from usef@192.168.1.22:1521/db2.

   9 rows inserted into TBL7.

   9 rows committed into TBL7 at usef@192.168.1.20:1521/db1.

آشنایی با محیط SQLcl

ابزار SQLcl در سال 2014 توسط تیم Oracle SQLDeveloper ارائه شد، این ابزار مشابه sqlplus محیطی command lineی را برای DBA فراهم  می سازد با این تفاوت که قابلیت و راحتی های فراوانی را نسبت به sqlplus  به همراه دارد.

نمونه هایی از مزیتهای این ابزار را نسبت به sqlplus مشاهده می کنید:

1.برای استفاده از SQLcl نیازی به نصب اوراکل کلاینت نخواهیم داشت همچنین این ابزار نصب بسیار راحتی دارد.

2.دستورات کاربردی فراوانی توسط این ابزار ارائه شده اند نظیر HISTORY، DDL، CTAS، Spool To CSV و ….

3.کار کردن با خط فرمان در این محیط نسبت به sqlplus راحت تر است(به دلیل ویژگی هایی چون TAB COMPELETION ). همچنین خروجی پرس و جوها به شکل خواناتری نمایش داده می شوند.

4.SQLcl امکان اتصال بین دو دیتابیس را بدون استفاده از database link فراهم می کند.

و …

(بیشتر…)

انتقال خودکار Restore Point از primary به standby

تا قبل از نسخه 19c، ایجاد restore point در محیط primary، منجر به ایجاد آن در محیط standby نمی شد. در سناریوی زیر که در اوراکل نسخه 18cR3 اجرا شده است این مسئله را می بینید:

Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production

Version 18.3.0.0.0

–Primary

SQL> select * from v$restore_point;

no rows selected

–Standby

SQL> select * from v$restore_point;

no rows selected

–Primary

SQL> create restore point before_upg;

Restore point created.

SQL>  select NAME,SCN from v$restore_point;

NAME                   SCN

———-                 —————

BEFORE_UPG    870272395791

SQL> alter system switch logfile;

System altered.

–Standby

SQL> select NAME,SCN from v$restore_point;

no rows selected

(بیشتر…)

مروری بر ویژگی های جدید DG Broker در اوراکل 19c

در این متن به ویژگی های جدید Data Guard Broker که در اوراکل نسخه 19c اضافه شده اند، خواهیم پرداخت.

Export و Import از پیکربندی DG Broker

در نسخه 19c می توان از فایل پیکربندی DG Broker دامپی را در قالب فایل متنی ایجاد کرد و در صورت نیاز، اقدام به بازسای فایل پیکربندی DG Broker کرد.

دستور زیر broker configuration را در فایل متنی mybrokerfile.txt قرار خواهد داد:

[oracle@RAC1 ~]$ dgmgrl sys/sys@tehran

DGMGRL for Linux: Release 19.0.0.0.0 – Production on Thu Oct 22 13:15:42 2020

Version 19.6.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type “help” for information.

Connected to “orcl”

Connected as SYSDBA.

DGMGRL>  EXPORT CONFIGURATION TO ‘mybrokerfile.txt’;

Succeeded.

(بیشتر…)

مشاهده تاریخچه‏ ‏‏تغییرات پسورد کاربران با تنظیم PASSWORD_REUSE_MAX و PASSWORD_REUSE_TIME

اگر پارامترهای PASSWORD_REUSE_MAX و یا PASSWORD_REUSE_TIME را برای پروفایلی تنظیم کنیم، شکل hash شده پسورد کاربرانی که عضو ان پروفایل هستند در جدولی از دیتابیس به نام $user_history ثبت خواهد شد و از این طریق امکان برگرداندن پسورد کاربر به مقدار قبلی هم به وجود خواهد آمد:

SQL> alter profile default limit PASSWORD_REUSE_TIME  10;

Profile altered

SQL> alter user usef identified  by d;

User altered

SQL> select user#,substr(password,1,12) password ,password_date from user_history$;

     USER# PASSWORD     PASSWORD_DATE

———- ————————–

       120 T:0A20744AD0 09/20/2020 09

       120 T:E5A3AF0A52 09/20/2020 09

       120 T:CBCAAC7888 09/20/2020 09

برای برگرداندن پسورد کاربر به مقدار قبلی، می توان دستور alter user را به همراه عبارت  identified by values اجرا کرد.

alter user user_name identified by values “user_history$.passowrd”;

با تنظیم پارامترهای *_PASSWORD_REUSE به مقدار unlimited، پسورد جدیدی در جدول $user_history  ذخیره نخواهد شد.

 

اتصال به PDB با مجوز sysdba بدون تعیین پسورد(اوراکل 19.7)

همانطور که می دانید، با اجرای دستور  “sqlplus “/as sysdba در محیط container database، به صورت پیش فرض به root container متصل خواهیم شد:

 [oracle@OL7 ~]$ sqlplus “/as sysdba”

SQL*Plus: Release 18.0.0.0.0 – Production on Sun Sep 13 15:52:16 2020

Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production

Version 18.5.0.0.0

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         3 PDB1                         READ WRITE NO

         4 PDB2                         READ WRITE NO

SQL> show con_id

CON_ID

——————————

1

(بیشتر…)