Oracle Database 11g'de yeni bir şema / yeni kullanıcı nasıl oluşturulur?


86

Bir şirkette staj başvurusunda bulundum ve soru olarak benden şirketleri için belirli gereksinimleri olan bir şema oluşturmamı ve onlara DDL dosyasını postalamamı istediler . Oracle veritabanı 11g Express sürümünü kurdum, ancak Oracle veritabanı 11g'de nasıl yeni bir şema oluşturabilirim? İnternette bir çözüm aradım ama ne yapacağımı anlayamadım. Ve bir şema oluşturduktan sonra onlara hangi dosyayı postalamalıyım?


create user foo .... Lütfen
kılavuzu okuyun-

oracle otomatik depolama yönetimi kümesinin ne olduğunu öğrenebilir miyim?
acoder

4
Bu site, kendi araştırmanızı yapmanın ve ürün belgelerinden bir şeyler öğrenmenin yerini tutmaz. Ben'in o terim için verdiği bağlantıyı araştırmak, ASM'nin de ne olduğunu size söyleyecektir. Baştan başlamalısın. Buradaki insanların Oracle'ın tamamını açıklamasını bekleyemezsiniz, çok büyük bir konu; hatta karşılaştığınız her yeni terimi açıklayın. Belki de Oracle bilgisine sahip olmadığınızı ancak öğrenmek ve sizin için eğitim sağlayıp sağlayamayacaklarını görmek istediğinizi şirkete açıklamalısınız.
Alex Poole

1
Oracle'a yeni katılanların tamamı için, Oracle Database XE'yi kullanabiliyorsanız süreç basitleştirilmiştir. XE, yeni bir kullanıcı / şema (diğer adıyla "Application Express Workspace") oluşturmak için bir Web UI sağlar. Bunu XE 11.2'de denedim. Aşağıdaki tam ayrıntılı 11g yanıtı için @vitfo'ya kredi verin.
Paul

Yanıtlar:


242

Genel olarak oracle'daki bir şema, bir kullanıcı ile aynıdır. Oracle Database, bir kullanıcı oluşturduğunuzda otomatik olarak bir şema oluşturur. DDL dosya uzantısına sahip bir dosya, bir SQL Veri Tanımlama Dili dosyasıdır.

Yeni kullanıcı oluşturma (SQL Plus kullanarak)

Temel SQL Plus komutları:

  - connect: connects to a database
  - disconnect: logs off but does not exit
  - exit: exists

SQL Plus'ı açın ve günlüğe kaydedin:

/ as sysdba

Sysdba bir roldür ve unix'te "kök" veya Windows'ta "Yönetici" gibidir. Her şeyi görür, her şeyi yapabilir. Dahili olarak, sysdba olarak bağlanırsanız, şema adınız SYS olarak görünecektir.

Bir kullanıcı oluşturun:

SQL> create user johny identified by 1234;

Tüm kullanıcıları görüntüleyin ve johny kullanıcısının orada olup olmadığını kontrol edin:

SQL> select username from dba_users;

Şimdi johny olarak giriş yapmaya çalışırsanız bir hata alırsınız:

ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied

Oturum açacak kullanıcının en azından oturum ayrıcalığı oluşturması gerekir, bu nedenle kullanıcıya bu ayrıcalıkları vermeliyiz:

SQL> grant create session to johny;

Artık johny kullanıcısı olarak bağlanabilirsiniz:

username: johny
password: 1234

Kullanıcıdan kurtulmak için onu bırakabilirsiniz:

SQL> drop user johny;

Bu, bir kullanıcının nasıl yaratılacağını gösteren temel bir örnekti. Daha karmaşık olabilir. Yukarıda, nesneleri veritabanı varsayılan tablo alanında depolanan bir kullanıcı oluşturduk. Veritabanının düzenli olması için kullanıcı nesnelerini kendi alanına yerleştirmeliyiz (tablo alanı, veritabanında şema nesnelerini içerebilen bir alan tahsisidir).

Önceden oluşturulmuş tablo alanlarını göster:

SQL> select tablespace_name from dba_tablespaces;

Tablo alanı oluşturun:

SQL> create tablespace johny_tabspace
  2  datafile 'johny_tabspace.dat'
  3  size 10M autoextend on;

Geçici tablo alanı oluşturun (Geçici tablo alanı, veritabanında yalnızca bir oturum süresince devam eden geçici verileri içerebilen bir alan tahsisidir. Bu geçici veriler, işlem veya örnek hatasından sonra kurtarılamaz.):

SQL> create temporary tablespace johny_tabspace_temp
  2  tempfile 'johny_tabspace_temp.dat'
  3  size 5M autoextend on;

Kullanıcıyı oluşturun:

SQL> create user johny
  2  identified by 1234
  3  default tablespace johny_tabspace
  4  temporary tablespace johny_tabspace_temp;

Bazı ayrıcalıklar verin:

SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;

Johny olarak giriş yapın ve sahip olduğu ayrıcalıkları kontrol edin:

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Tablo oluşturma ayrıcalığı ile kullanıcı tablo oluşturabilir:

SQL> create table johny_table
  2  (
  3     id int not null,
  4     text varchar2(1000),
  5     primary key (id)
  6  );

Veri ekle:

SQL> insert into johny_table (id, text)
  2  values (1, 'This is some text.');

Seçin:

SQL> select * from johny_table;

ID  TEXT
--------------------------
1   This is some text.

DDL verilerini almak için, "meta verileri veritabanı sözlüğünden XML olarak almanıza veya DDL oluşturmanıza ve nesneyi yeniden oluşturmak için XML göndermenize bir yol sağlayan" DBMS_METADATA paketini kullanabilirsiniz. ( http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm yardımıyla )

Tablo için:

SQL> set pagesize 0
SQL> set long 90000
SQL> set feedback off
SQL> set echo off
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;

Sonuç:

  CREATE TABLE "JOHNY"."JOHNY_TABLE"
   (    "ID" NUMBER(*,0) NOT NULL ENABLE,
        "TEXT" VARCHAR2(1000),
         PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "JOHNY_TABSPACE"  ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "JOHNY_TABSPACE"

Dizin için:

SQL> set pagesize 0
SQL> set long 90000
SQL> set feedback off
SQL> set echo off
SQL> SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) FROM USER_INDEXES u;

Sonuç:

  CREATE UNIQUE INDEX "JOHNY"."SYS_C0013353" ON "JOHNY"."JOHNY_TABLE" ("ID")
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "JOHNY_TABSPACE"

Daha fazla bilgi:

DDL

DBMS_METADATA

Şema nesneleri

Şema ve kullanıcı arasındaki farklar

Ayrıcalıklar

Kullanıcı / şema oluşturma

Tablo alanı oluşturma

SQL Plus komutları


3
/ as sysdbaBaşlayan vasıtası ile "çalıştırmak için c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdbaWindows komut kabuğu".
Uwe Keim

3
Ayrıca sahip olmak için de kullanışlıdır: GRANT CREATE VIEW TO <user>; <Kullanıcı> 'ya SIRA OLUŞTURMA;
Witold Kaczurba

Kullanarak bağlandım sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))ve sonra tüm bu komutlarınızı yazdım . Ama sonra, connect myuserhatayı alıyorumORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane

Bize tam sqlplusemri verebilir misiniz ? Gibi, yukarıda oluşturulmuş kullanıcıya dayalı olarak, tam komuta sahipsqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane

Komutu ORA-65096: invalid common user or role nameçalıştırırken hata alıyorumcreate user ... default tablespace ...
cryanbhu


15

Başlayalım. Oracle konusunda herhangi bir bilginiz var mı?

Öncelikle SCHEMA'nın ne olduğunu anlamanız gerekir. Şema, mantıksal veri yapılarının veya şema nesnelerinin bir koleksiyonudur. Bir şema, bir veritabanı kullanıcısına aittir ve bu kullanıcıyla aynı ada sahiptir. Her kullanıcının tek bir şeması vardır. Şema nesneleri SQL ile oluşturulabilir ve değiştirilebilir.

  1. KULLANICI kodlayıcı OLUŞTUR; - Oracle'da yeni bir kullanıcı oluşturduğunuzda, tüm nesnelerinin depolandığı kullanıcı adıyla aynı ada sahip bir şema oluşturulur.
  2. Acoder'a OTURUM OLUŞTURMA VERİN; - Bunu yapmazsanız hiçbir şey yapamazsınız.

Başka bir kullanıcının şemasına erişmek için, o şema üzerindeki belirli nesnelerde ayrıcalıklara sahip olmanız veya isteğe bağlı olarak SYSDBA rolünün atanmış olması gerekir.

Bu başlamanı sağlamalı.


4
SQL> select Username from dba_users
  2  ;

USERNAME
------------------------------
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
ORACLE_OCM
XS$NULL
MDSYS

USERNAME
------------------------------
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR

16 rows selected.

SQL> create user testdb identified by password;

User created.

SQL> select username from dba_users;

USERNAME
------------------------------
TESTDB
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
ORACLE_OCM
XS$NULL

USERNAME
------------------------------
MDSYS
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR

17 rows selected.

SQL> grant create session to testdb;

Grant succeeded.

SQL> create tablespace testdb_tablespace
  2  datafile 'testdb_tabspace.dat'
  3  size 10M autoextend on;

Tablespace created.

SQL> create temporary tablespace testdb_tablespace_temp
  2  tempfile 'testdb_tabspace_temp.dat'
  3  size 5M autoextend on;

Tablespace created.

SQL> drop user testdb;

User dropped.

SQL> create user testdb
  2  identified by password
  3  default tablespace testdb_tablespace
  4  temporary tablespace testdb_tablespace_temp;

User created.

SQL> grant create session to testdb;

Grant succeeded.

SQL> grant create table to testdb;

Grant succeeded.

SQL> grant unlimited tablespace to testdb;

Grant succeeded.

SQL>

0

Oracle Sql geliştiricisinden, aşağıdakileri sql çalışma sayfasında yürütün:

create user lctest identified by lctest;
grant dba to lctest;

ardından "Oracle bağlantısı" -> yeni bağlantıya sağ tıklayın, ardından bağlantı adından kullanıcı adı şifresine kadar her şeyi en iyi şekilde yapın. Test bağlantısı geçecektir. Daha sonra bağlandıktan sonra şemayı göreceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.