Làm thế nào để tạo một lược đồ mới / người dùng mới trong Cơ sở dữ liệu Oracle 11g?


86

Tôi đã nộp đơn xin thực tập trong một công ty và họ đã yêu cầu tôi tạo một lược đồ cho công ty của họ với các yêu cầu nhất định và gửi tệp DDL qua thư cho họ . Tôi đã cài đặt cơ sở dữ liệu Oracle 11g phiên bản Express, nhưng làm cách nào để tạo một lược đồ mới trong cơ sở dữ liệu Oracle 11g? Tôi đã tìm kiếm trên mạng để tìm giải pháp nhưng tôi không thể hiểu phải làm gì. Và sau khi tạo một lược đồ, tôi nên gửi tệp nào cho chúng?


create user foo .... Xin vui lòng đọc manual-
a_horse_with_no_name

Tôi có thể biết cụm quản lý lưu trữ tự động oracle là gì không?
acoder

4
Trang web này không thay thế cho việc bạn tự nghiên cứu và học hỏi từ tài liệu sản phẩm. Tìm kiếm liên kết mà Ben đưa ra cho thuật ngữ đó cũng sẽ cho bạn biết ASM là gì. Bạn cần bắt đầu ngay từ đầu. Bạn không thể mong đợi những người ở đây giải thích toàn bộ Oracle, một chủ đề quá lớn của nó; hoặc thậm chí giải thích mọi thuật ngữ mới mà bạn bắt gặp. Có lẽ bạn nên giải thích với công ty rằng bạn không có bất kỳ kiến ​​thức nào về Oracle nhưng muốn tìm hiểu và xem họ có thể đào tạo cho bạn hay không.
Alex Poole,

1
Đối với những người mới hoàn toàn sử dụng Oracle, quy trình được đơn giản hóa nếu bạn có thể sử dụng Oracle Database XE. XE cung cấp giao diện người dùng Web để tạo người dùng / lược đồ mới (hay còn gọi là "Application Express Workspace"). Tôi đã thử điều này trong XE 11.2. Ghi có cho @vitfo cho câu trả lời dài 11g đầy đủ bên dưới.
Paul

Câu trả lời:


239

Nói chung một lược đồ trong oracle cũng giống như một người dùng. Cơ sở dữ liệu Oracle tự động tạo một lược đồ khi bạn tạo một người dùng. Tệp có phần mở rộng tệp DDL là tệp Ngôn ngữ Định nghĩa Dữ liệu SQL.

Tạo người dùng mới (sử dụng SQL Plus)

Các lệnh SQL Plus cơ bản:

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

Mở SQL Plus và đăng nhập:

/ as sysdba

Sysdba là một vai trò và giống như "root" trên unix hoặc "Administrator" trên Windows. Nó nhìn thấy tất cả, có thể làm tất cả. Trong nội bộ, nếu bạn kết nối dưới dạng sysdba, tên giản đồ của bạn sẽ có vẻ là SYS.

Tạo người dùng:

SQL> create user johny identified by 1234;

Xem tất cả người dùng và kiểm tra xem người dùng johny có ở đó không:

SQL> select username from dba_users;

Nếu bạn cố gắng đăng nhập bằng johny ngay bây giờ, bạn sẽ gặp lỗi:

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

Người dùng để đăng nhập cần ít nhất tạo phiên riêng tư, vì vậy chúng tôi phải cấp đặc quyền này cho người dùng:

SQL> grant create session to johny;

Bây giờ bạn có thể kết nối với tư cách là người dùng johny:

username: johny
password: 1234

Để loại bỏ người dùng, bạn có thể loại bỏ nó:

SQL> drop user johny;

Đó là ví dụ cơ bản để chỉ ra cách tạo người dùng. Nó có thể phức tạp hơn. Ở trên, chúng tôi đã tạo một người dùng có các đối tượng được lưu trữ trong vùng bảng mặc định của cơ sở dữ liệu. Để cơ sở dữ liệu gọn gàng, chúng ta nên đặt các đối tượng người dùng vào không gian riêng của anh ta (không gian bảng là một phân bổ không gian trong cơ sở dữ liệu có thể chứa các đối tượng lược đồ).

Hiển thị các không gian bảng đã được tạo:

SQL> select tablespace_name from dba_tablespaces;

Tạo vùng bảng:

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

Tạo không gian bảng tạm thời (Không gian bảng tạm thời là một phân bổ không gian trong cơ sở dữ liệu có thể chứa dữ liệu tạm thời chỉ tồn tại trong khoảng thời gian của phiên. Dữ liệu tạm thời này không thể được phục hồi sau lỗi quy trình hoặc phiên bản.):

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

Tạo người dùng:

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

Cấp một số đặc quyền:

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

Đăng nhập với tư cách johny và kiểm tra những đặc quyền mà anh ấy có:

SQL> select * from session_privs;

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

Với đặc quyền tạo bảng, người dùng có thể tạo bảng:

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

Chèn dữ liệu:

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

Lựa chọn:

SQL> select * from johny_table;

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

Để lấy dữ liệu DDL, bạn có thể sử dụng gói DBMS_METADATA "cung cấp một cách để bạn truy xuất siêu dữ liệu từ từ điển cơ sở dữ liệu dưới dạng XML hoặc tạo DDL và gửi XML để tạo lại đối tượng." (với sự trợ giúp từ http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

Đối với bảng:

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;

Kết quả:

  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"

Đối với chỉ mục:

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;

Kết quả:

  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"

Thêm thông tin:

DDL

DBMS_METADATA

Đối tượng lược đồ

Sự khác biệt giữa giản đồ và người dùng

Đặc quyền

Tạo người dùng / lược đồ

Tạo vùng bảng

Lệnh SQL Plus


3
/ as sysdbaphần đầu có nghĩa là chạy " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" từ trình bao lệnh Windows.
Uwe Keim

3
Cũng tiện dụng khi có: CẤP TẠO XEM CHO <người dùng>; CẤP TẠO YÊU CẦU CHO <người dùng>;
Witold Kaczurba

Tôi đã kết nối bằng cách sử dụng sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))và sau đó nhập tất cả các lệnh này của bạn. Nhưng sau đó, connect myusertôi nhận được lỗiORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane

Bạn có thể cho chúng tôi toàn sqlplusquyền không? Giống như, dựa trên người dùng vừa tạo ở trên, có lệnh đầy đủsqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane

Tôi gặp lỗi ORA-65096: invalid common user or role namekhi chạy create user ... default tablespace ...lệnh
cryanbhu


15

Hãy bắt đầu. Bạn có kiến ​​thức nào về Oracle không?

Trước tiên, bạn cần hiểu SCHEMA là gì. Lược đồ là một tập hợp các cấu trúc logic của dữ liệu hoặc các đối tượng lược đồ. Một lược đồ thuộc sở hữu của người dùng cơ sở dữ liệu và có cùng tên với người dùng đó. Mỗi người dùng sở hữu một giản đồ. Các đối tượng lược đồ có thể được tạo và thao tác với SQL.

  1. TẠO bộ ghi mã USER; - bất cứ khi nào bạn tạo một người dùng mới trong Oracle, một lược đồ có cùng tên với tên người dùng sẽ được tạo để lưu trữ tất cả các đối tượng của anh ta.
  2. CẤP PHIÊN TẠO PHẦN CHO bộ mã hóa; - Không làm được điều này bạn không thể làm được gì.

Để truy cập vào lược đồ của người dùng khác, bạn cần được cấp đặc quyền trên đối tượng cụ thể trên lược đồ đó hoặc được gán vai trò SYSDBA theo tùy chọn.

Điều đó sẽ giúp bạn bắt đầu.


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

Từ nhà phát triển oracle Sql, hãy thực thi phần dưới đây trong trang tính sql:

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

sau đó nhấp chuột phải vào "Kết nối Oracle" -> kết nối mới, sau đó thực hiện mọi thứ khó khăn nhất từ ​​tên kết nối đến mật khẩu tên người dùng. Kết nối thử nghiệm sẽ đạt. Sau đó, sau khi kết nối, bạn sẽ thấy lược đồ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.