分类: Oracle
2009-05-16 14:09:48
Oracle 用户数指什么
========================================
一般来讲,oracle授权的用户数指的是连接到DBMS的,而不是连接到DB的,不管你DB有多少个,而你的DBMS只能有一个,所以实际上就是指的的你网络上允许多少人同时访问你的DBMS。
其实一般卖软件的都不会这么较真,象国外的软件在国内卖一般都是买一般的许可就行了,例如你估计你可能最多会有20个并发访问数,你买10个一般软件商都会答应的,而且这些软件在程序内部都没有做任何限制,仅仅只是法律上的问题。况且企业版要求最低25个用户数,应该足够用了。
ORACLE实例和数据库的基本理解:
========================================
-- 什么是 instance,和SID、DBName有什么区别:
Instance其实就是指的操作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们可以新建一个Oracle的Instance,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问操作。
数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件中,但是我们无法直接进行操作。而如果只有数据库Instance,那么我们虽然可以急性操作,但是也不知道操作哪些数据,操作生成的数据也无法保存等等。所以,当一个Oracle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。
SID主要用于区分同一台计算机上的同一个数据库服务器上的不同实例(启动不同的数据库SID时,就产生不通的数据库实例,因为他们的进程、SGA、内存块都是不一样的)。
ORACLE 数据库服务器主要有两部分组成:物理数据库和数据库管理系统
数据库管理系统是用户和物理数据库之间的一个中间层,是软件层。这个软件层具有一定的结构,这个结构又被称为例程结构,即我们通常所说的实例。
在启动数据库时,oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个例程(instance),然后由该例程装载、打开数据库,最后由这个例程来访问和控制数据库的各种物理结构。
在启动数据库并使用数据库的时候,实际上是连接到该数据库的例程,通过例程来连接、使用数据库。所以例程是用户和数据库之间的一个中间层。SID 是给用户环境变量使用,instance例程则是给服务使用的。
例程是由操作系统的内存结构和一系列进程所组成的,可以启动和关闭。一台计算机上可以创建多个oracle数据库,当同时要使用这些数据库时,就要创建多个例程。为了不使这些例程相互混淆,每个例程都要用称为SID的符号来区分,即创建这些数据库时填写的数据库SID。
oracle认证方式:
========================================
oracle认证方式分为操作系统认证和口令文件认证2种方式,操作系统认证有时候也叫本地认证。
--操作系统认证:即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆
--口令文件认证:oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。
--操作系统认证:
sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS)
spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('NONE')
--口令文件认证:
sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE)
spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED')
oracle默认用户:
========================================
--用 DBCA 创建数据库的时候系统自动为该数据库添加了四个用户,分别是:SYS SYSTEM DBSNMP SYSMAN 创建过程会提示输入密码的!
--还有很多系统用户,单默认都是锁定状态,可以手动解锁!
--在连接 isqlplus 或 em 的时候就需要简历新的用户去连接。
数据库启动与关闭:
=======================================
SQL> conn /as sysdba;
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 2020224 bytes
Variable Size 104860800 bytes
Database Buffers 176160768 bytes
Redo Buffers 2170880 bytes
Database mounted.
Database opened.
SQL> conn /as sysdba
Connected.
SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL*Plus 连接操作:
========================================
-- 首先用sysdba连上去:
# su - oracle
$ sqlplus /nolog
SQL> conn /as sysdba
$ sqlplus user/pass
# su - oracle
$ sqlplus "/as sysdba"
$ sqlplus zhaohang/ztgame;
--选择要连接到的数据库:
export ORACLE_SID=accoundb;
为oracle数据库创建用户:
=======================================
--以sysdba登录,建立用户zhaohang,并赋予dba权限
SQL> select * from v$version;
SQL> create user zhaohang identified by ztgame;
SQL> grant dba to zhaohang;
SQL> conn zhaohang/ztgame;
# su - oracle
$ sqlplus /nolog
SQL> conn /as sysdba
SQL> alter user sys identified by ztgame;
SQL> conn sys/ztgame as sysdba
-- 直接连接没有重启数据库实例的权限:
sqlplus zhaohang/zhaohang;
-- 以sysdba身份连接可重启数据库:
sqlplus zhaohang/zhaohang as sysdba;
--修改用户密码:
SQL> password zhaohang;
--忘记旧密码的时候对用户密码的更改:
SQL> alter user USRNAME identified by USRPWD;
关闭、启动数据库实例:
========================================
$ sqlplus /nolog
conn sys/change_on_install as sysdba;
SQL> shutdown immediate;
SQL> startup
关闭、启动isqlplus:
========================================
$ isqlplusctl start
$ isqlplusctl stop
关闭、启动oracle em:
========================================
$ emctl start dbconsole
$ emctl stop dbconsole
oracle监听器的启动和关闭:
========================================
$ lsnrctl
> start
> stop
ORACLE 基础操作:
========================================
-- 查看当前所有数据库(ztgame):
SQL> select name from v$database;
-- 查看所有数据库实例及其详细信息:
SQL> select * from v$instance;
-- 查看当前数据库里所有表(包括系统表空间/不包括系统表空间):
SQL> select TABLE_NAME from all_tables;
SQL> select * from tab;
-- 查看表数据结构:
SQL> desc v$database;
-- 查看当前连接的用户:
SQL> show user;
--查看哪些用户拥有SYSDBA、SYSOPER权限:
SQL>select * from v$PWFILE_USERS;
-- 查看前 10 行:
SQL> select TABLE_NAME from all_tables where rownum <=10;
-- 查看以U开头的表名:
SQL> select TABLE_NAME from all_tables where TABLE_NAME like 'U%';
-- 查看记录,以-来分割两个字段:
SQL> select name||'-'||age from xinxi;
-- oracle 查看表空间:
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
输出:(单位M)
TABLESPACE_NAME TS_SIZE
SYSAUX 240
UNDOTBS1 25
USERS 5
SYSTEM 470
-- 查看 SGA PGA 大小:
show parameter sga;
show parameter pga;
表操作:
========================================
SQL> create table t1(ID number(10),NAME char(20));
SQL> desc t1;
SQL> insert into t1(ID,NAME) VALUES('1','admin');
SQL> select * from t1;
SQL> alter table t1 add(NOTE varchar2(200));
SQL> alter table t1 drop column NOTE;
SQL> drop table t1;
SQL> delete from t1 where ID=1;
SQL> update t1 set NOTE='This is my home name!' where NAME='zhaohang';
sqlplus 建表并插入数据后,退出sqlplus再次进入查询,结果数据没有写入:
========================================
--利用bengin end / 来解决问题:
--通过SQL PLUS发送的最后一次SQL语句都会保存在SQL PLUS的一个数据缓冲区内,用/来重新写入!
create table xinxi (name char(10),age char(2));
begin
insert into xinxi values ('zhaohang','27');
insert into xinxi values ('zhouzhou','27');
insert into xinxi values ('Lovely','26');
insert into xinxi values ('Droney','27');
end;
/
select * from xinxi;
Oracle底下的source:
========================================
@test.sql;
这样就可以把脚本里的内容插入到数据库了!
orcle 里的tee:
========================================
--oracle 里边有一个和mysql里tee/notee相同功能的命令spool
SQL> spool sqlhist.txt;
SQL> spool off;
SQL*PLUS 执行系统命令:
========================================
Linux:
SQL> !hostname
SQL> host hostname
Windows:
SQL> $hostname
SQL> host hostname
设置每行显示500个字符:
========================================
SQL> set linesize 500;
设置spool到文本里的信息只要数据而不要列名:
========================================
SQL> set head off
设定oracle开机自动启动(默认是N):
========================================
# vi /etc/oratab
ztgame:/orac/orahome/app/oracle/product/10.2.0/db_1:Y