1. 字符 Character (A, 1, ! 等)
抽象的最小文本单位, 没有固定的形状, 而且没有值, 仅仅代表一个符号, 没有任何实际值的意义
2. 字符集 CharacterSet (Unicode, JIS X 0208 等)
字符集合, 字符在字符集中有固定的位置 (code point, 码点)
3. 编码 Encoding (UTF-8, EUC-JP, Shift_JIS 等)
编码, 以某个字符集为基础, 为每一个字符分配一个唯一数字
UTF-8, UTF-16 -> Unicode
EUC-JP, Shift_JIS, ISO-2022-JP (JIS Code) -> JIS X 0208
4. 几种字符集编码
4-1. ASCII
字符集: 包含大小写英文, 阿拉伯数字, 标点以及一些不可见的控制符共 128 个
编码: 使用 1 个字节的低 7 位表示一个字符, 编码范围 0-127 (0x00-0x7F), 其中 0-31 (0x00-0x1F) 部分以及 127 (0x7F) 是控制符, 其余的都是些可见字符
4-2. GB2312
http://baike.baidu.com/view/25492.htm
字符集: ASCII 字符集 + 7000 左右汉字字符
编码: 兼容 ASCII 编码, 对字节进行判断, <=127, 则意义等同于 ASCII 编码, >127 则它需要跟其后的另一个字节合并表示一个字符
4-3. GBK
字符集: GB2312 字符集 + 20000 左右汉字字符
编码: 兼容 GB2312 编码, 利用了 GB2312 编码闲置的编码空间
4-4. GB18030
字符集: GBK 字符集 + 若干汉字 + 若干少数民族字符, 为目前国内最新的字符集
编码: 兼容GBK编码, 继续利用 GBK 编码闲置的编码空间, 对于超出编码空间的则采用 4 个字节表示
4-5. BIG5
字符集: ASCII 字符集 + 13000 左右汉字(繁体)
编码: 兼容 ASCII 编码, 其编码模式类似于 GB2312
4-6. UNICODE
标准: 始终使用十六进制数字, 而且在书写时在前面加上前缀 "U+", 所以 "A" 的编码书写为 "U+0041"
字符集: 目前最新版的 UNICODE 字符集中已经包含各种语言的超过 10 万的字符
UNICODE 是静态概念, 字符集 (UTF-8 等) 是动态概念, 是每一个字符传递或传输的具体形式
BMP: 基本多语言面 (Basic Multilingual Plane), 0x0000 到 0xFFFD, UCS 的 16位子集
编码: 狭义的 UNICODE 编码可能指 UCS-2, 也可能指 UTF-16, 广义的 UNICODE 编码可以指包括以下四种在内的若干种对 UNICODE 标准的编码实现 (实际在计算中的存储方式)
4-6-1. UTF-32 (Unicode Transformation Format 32-bit)
固定使用 4 个字节来表示一个字符, 存在空间利用效率的问题
4-6-2. UTF-16
对相对常用的 60000 余个字符使用两个字节进行编码, 其余的补充字符 supplementary characters 使用4字节
4-6-3. UCS-2
是对 UNICODE 早期版本的实现, 它与 UTF-16 的唯一区别是它不包括补充字符, 所以它对字符的编码只使用两个字节, 目前此编码模式已过时
4-6-4. UTF-8
兼容 ASCII 编码, 拉丁文希腊文等使用两个字节, 包括汉字在内的其它常用字符使用三个字节, 剩下的极少使用的字符使用四个字节
4-7. ISO8859-1 (ASCII 扩展字符集)
字符集: ASCII 字符集 + 若干西欧字符, 例如字母Â, Ë
编码: 使用 8 位表示一个字符, 同时移除了原 ASCII 编码中的控制符 (0-31, 127)
4-8. ISO-2022-JP
2 字节构成, JIS X 0208 内区和点转化为 16 进制, 分别加 0X20 得到 ISO-2022-JP 码
4-9. EUC-JP
2 字节构成, JIS X 0208 内区和点转化为 16 进制, 分别加 0XA0 得到 EUC-JP 码
4-10. Shift_JIS
TODO
2011年6月26日日曜日
2011年6月24日金曜日
[PHP] php 与 apache2 的安装
php & apache2 Install
http://www.yamada-lab.org/doc/linux/apache2.0/index.html
cakephp
http://www.phpbook.jp/cakephp/install/index3.html
http://www.yamada-lab.org/doc/linux/apache2.0/index.html
cakephp
http://www.phpbook.jp/cakephp/install/index3.html
2011年6月22日水曜日
2011年6月21日火曜日
2011年6月18日土曜日
数据库管理脚本
-- 段头信息查询
select header_file,header_block from dba_segments where segment_name='T' and owner = 'GO';
-- dump段头数据的Block
alter system dump datafile 4 block 18499;
在 $ORACLE/admin/sid/udump 下
-- 数据行所在数据文件ID和块ID
select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from bb;
-- 对象在Buffer Cache中的使用情况
select file#,block# from v$bh where objd=(select data_object_id from user_objects where object_name='T');
-- Session 进程查询
select username, sid, serial#, program, process from v$session;
alter system kill session 'sid serial# ';
-- 临时表空间使用状态
select x.sid, x.username, y.tablespace, y.blocks from v$session x, v$tempseg_usage y where x.saddr=y.session_addr;
-- 查看数字对应的ascii码
select chr(to_number('31', 'xx')) from dual;
-- 查询高负载的SQL
SELECT ADDRESS,substr(SQL_TEXT,1,20) Text,buffer_gets,executions,buffer_gets/executions AVG FROM v$sqlarea WHERE executions>0 AND buffer_gets > 100000 ORDER BY 5;
-- 索引包含哪些列
select * from dba_ind_columns where table_name='T';
-- 聚簇因子
select a.index_name,b.num_rows,b.blocks,a.clustering_factor from user_indexes a, user_tables b where index_name in ('INDEX_NAME') and a.table_name = b.table_name;
-- 2进制转对应10进制数值查询
select utl_raw.cast_to_number('c20b05') from dual;
select header_file,header_block from dba_segments where segment_name='T' and owner = 'GO';
-- dump段头数据的Block
alter system dump datafile 4 block 18499;
在 $ORACLE/admin/sid/udump 下
-- 数据行所在数据文件ID和块ID
select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from bb;
-- 对象在Buffer Cache中的使用情况
select file#,block# from v$bh where objd=(select data_object_id from user_objects where object_name='T');
-- Session 进程查询
select username, sid, serial#, program, process from v$session;
alter system kill session 'sid serial# ';
-- 临时表空间使用状态
select x.sid, x.username, y.tablespace, y.blocks from v$session x, v$tempseg_usage y where x.saddr=y.session_addr;
-- 查看数字对应的ascii码
select chr(to_number('31', 'xx')) from dual;
-- 查询高负载的SQL
SELECT ADDRESS,substr(SQL_TEXT,1,20) Text,buffer_gets,executions,buffer_gets/executions AVG FROM v$sqlarea WHERE executions>0 AND buffer_gets > 100000 ORDER BY 5;
-- 索引包含哪些列
select * from dba_ind_columns where table_name='T';
-- 聚簇因子
select a.index_name,b.num_rows,b.blocks,a.clustering_factor from user_indexes a, user_tables b where index_name in ('INDEX_NAME') and a.table_name = b.table_name;
-- 2进制转对应10进制数值查询
select utl_raw.cast_to_number('c20b05') from dual;
2011年6月16日木曜日
[基础知识] Table与Segment的关系
表是逻辑对象。
段是物理存储对象。
段的存在,并不是依赖于表的。
建立一些其它逻辑对象也会会创建段,如索引、物化视图。
一张普通表对应一个段。
表的建立,并不意味着段的创建,如临时表(Global Temporary Table)。
一张表也可以创建多个段,如分区表(Partition Table)。
多个表也可以共存于一个段,如簇表(Cluster Table)。
段是物理存储对象。
段的存在,并不是依赖于表的。
建立一些其它逻辑对象也会会创建段,如索引、物化视图。
一张普通表对应一个段。
表的建立,并不意味着段的创建,如临时表(Global Temporary Table)。
一张表也可以创建多个段,如分区表(Partition Table)。
多个表也可以共存于一个段,如簇表(Cluster Table)。
SQL执行计划相关
1。查询SQL在ShareedPool中的信息
select address, hash_value, executions, sql_text from v$sql where upper(sql_text) like 'SELECT * FROM T%';
2。查看SQL是否能被共享
select address, auth_check_mismatch, translation_mismatch, optimizer_mismatch from v$sql_shared_cursor where address in (select address from v$sql where upper(sql_text) like 'SELECT * FROM AA%');
TRANSLATION_MISMATCH 表示SQL游标涉及到的数据对象是不同的。
AUTH_CHECK_MISMATCH 表示对同样一条SQL语句转换是不匹配的。
optimizer_mismatch 表示会话的优化器环境是不同的。
TRANSLATION_MISMATCH 表示SQL游标涉及到的数据对象是不同的。
AUTH_CHECK_MISMATCH 表示对同样一条SQL语句转换是不匹配的。
optimizer_mismatch 表示会话的优化器环境是不同的。
2011年6月15日水曜日
[管理脚本] 查询高水位(HWM)
1. show_space
set serveroutput on
exec show_space('T');
其中HWM=Total Blocks - Unused Blocks - 1
2. analyze
analyze table go.t compute statistics;
select table_name,num_rows,blocks,empty_blocks,avg_row_len from dba_tables where table_name='T' and owner='GO';
其中HWM为blocks
3. dump segment header
select header_file,header_block from dba_segments where segment_name='T' and owner = 'GO';
alter system dump datafile 1 block min 35689 block max 35689;
udump/目录下的trc文件中
Extent Control Header
--------------------------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 20 #blocks: 639
last map 0x00000000 #maps: 0 offset: 4128
Highwater:: 0x00408f1d ext#: 19 blk#: 20 ext size: 128
#blocks in seg. hdr's freelists: 5
#blocks below: 531
mapblk 0x00000000 offset: 19
Unlocked
Map Header:: next 0x00000000 #extents: 20 obj#: 49001 flag: 0x40000000
Extent Map
--------------------------------------------------------------------------------
其中的HWM=bloks below:531
set serveroutput on
exec show_space('T');
其中HWM=Total Blocks - Unused Blocks - 1
2. analyze
analyze table go.t compute statistics;
select table_name,num_rows,blocks,empty_blocks,avg_row_len from dba_tables where table_name='T' and owner='GO';
其中HWM为blocks
3. dump segment header
select header_file,header_block from dba_segments where segment_name='T' and owner = 'GO';
alter system dump datafile 1 block min 35689 block max 35689;
udump/目录下的trc文件中
Extent Control Header
--------------------------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 20 #blocks: 639
last map 0x00000000 #maps: 0 offset: 4128
Highwater:: 0x00408f1d ext#: 19 blk#: 20 ext size: 128
#blocks in seg. hdr's freelists: 5
#blocks below: 531
mapblk 0x00000000 offset: 19
Unlocked
Map Header:: next 0x00000000 #extents: 20 obj#: 49001 flag: 0x40000000
Extent Map
--------------------------------------------------------------------------------
其中的HWM=bloks below:531
Session Waits
-- -----------------------------------------------------------------------------------
-- File Name : http://www.oracle-base.com/dba/10g/session_waits.sql
-- Author : DR Timothy S Hall
-- Description : Displays information on all database session waits.
-- Requirements : Access to the V$ views.
-- Call Syntax : @session_waits
-- Last Modified: 11/03/2005
-- -----------------------------------------------------------------------------------
SET LINESIZE 200
SET PAGESIZE 1000
COLUMN username FORMAT A20
COLUMN event FORMAT A30
COLUMN wait_class FORMAT A15
SELECT NVL(s.username, '(oracle)') AS username,
s.sid,
s.serial#,
sw.event,
sw.wait_class,
sw.wait_time,
sw.seconds_in_wait,
sw.state
FROM v$session_wait sw,
v$session s
WHERE s.sid = sw.sid
ORDER BY sw.seconds_in_wait DESC;
-- File Name : http://www.oracle-base.com/dba/10g/session_waits.sql
-- Author : DR Timothy S Hall
-- Description : Displays information on all database session waits.
-- Requirements : Access to the V$ views.
-- Call Syntax : @session_waits
-- Last Modified: 11/03/2005
-- -----------------------------------------------------------------------------------
SET LINESIZE 200
SET PAGESIZE 1000
COLUMN username FORMAT A20
COLUMN event FORMAT A30
COLUMN wait_class FORMAT A15
SELECT NVL(s.username, '(oracle)') AS username,
s.sid,
s.serial#,
sw.event,
sw.wait_class,
sw.wait_time,
sw.seconds_in_wait,
sw.state
FROM v$session_wait sw,
v$session s
WHERE s.sid = sw.sid
ORDER BY sw.seconds_in_wait DESC;
用户相关的自动化脚本
1。User创建语句
SET verify off;
SET termout off;
SET feedback off;
SET echo off;
SET pagesize 0;
SET timeing off;
SET termout on
SELECT 'Creating user build script...' FROM DUAL;
SET termout off;
CREATE TABLE usr_temp( lineno NUMBER,usr_name VARCHAR2(30),text VARCHAR2(80))
/
DECLARE
CURSOR usr_cursor
IS
SELECT username, PASSWORD, default_tablespace, temporary_tablespace, PROFILE
FROM SYS.dba_users
WHERE username != 'SYS' AND username != 'SYSTEM'
ORDER BY username;
CURSOR qta_cursor (c_usr VARCHAR2)
IS
SELECT tablespace_name, max_bytes
FROM SYS.dba_ts_quotas
WHERE username = c_usr;
lv_username SYS.dba_users.username%TYPE;
lv_password SYS.dba_users.PASSWORD%TYPE;
lv_default_tablespace SYS.dba_users.default_tablespace%TYPE;
lv_temporary_tablespace SYS.dba_users.default_tablespace%TYPE;
lv_profile SYS.dba_users.PROFILE%TYPE;
lv_tablespace_name SYS.dba_ts_quotas.tablespace_name%TYPE;
lv_max_bytes SYS.dba_ts_quotas.max_bytes%TYPE;
lv_string VARCHAR2 (80);
lv_lineno NUMBER := 0;
PROCEDURE write_out (p_line INTEGER, p_name VARCHAR2, p_string VARCHAR2)
IS
BEGIN
INSERT INTO usr_temp (lineno, usr_name, text)
VALUES (p_line, p_name, p_string);
END;
BEGIN
OPEN usr_cursor;
LOOP
FETCH usr_cursor
INTO lv_username, lv_password, lv_default_tablespace, lv_temporary_tablespace, lv_profile;
EXIT WHEN usr_cursor%NOTFOUND;
lv_lineno := 1;
lv_string := ('CREATE USER ' || LOWER (lv_username));
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
IF lv_password IS NULL
THEN
lv_string := 'IDENTIFIED EXTERNALLY';
ELSE
lv_string := ('IDENTIFIED BY VALUES ''' || lv_password || '''');
END IF;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := 'DEFAULT TABLESPACE ' || lv_default_tablespace;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := 'TEMPORARY TABLESPACE ' || lv_temporary_tablespace;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
OPEN qta_cursor (lv_username);
LOOP
FETCH qta_cursor
INTO lv_tablespace_name, lv_max_bytes;
EXIT WHEN qta_cursor%NOTFOUND;
lv_lineno := lv_lineno + 1;
IF lv_max_bytes IS NULL
THEN
lv_string := 'QUOTA UNLIMITED ON ' || lv_tablespace_name;
ELSE
lv_string :=
'QUOTA ' || lv_max_bytes || ' ON ' || lv_tablespace_name;
END IF;
write_out (lv_lineno, lv_username, lv_string);
END LOOP;
CLOSE qta_cursor;
lv_string := ('PROFILE ' || lv_profile || ';');
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := ' ';
write_out (lv_lineno, lv_username, lv_string);
END LOOP;
CLOSE usr_cursor;
END;
/
SPOOL create_users.sql
SET heading off
SET recsep off
COL test format a80 word_wrap
SELECT text
FROM usr_temp
ORDER BY usr_name, lineno;
SPOOL off;
DROP TABLE usr_temp;
EXIT
/
----------------------------------------------------------------------------------------------
2。 User授权语句
undefine user_name
set pagesize 1000
select 'grant '||tt.granted_role||' to '||tt.grantee||';' as SQL_text
from dba_role_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'grant '||tt.privilege||' to '||tt.grantee||';'
from dba_sys_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'revoke UNLIMITED TABLESPACE from '||upper('&&user_name')||';' from dual
union all
select 'grant '||tt.privilege||' on '||owner||'.'||table_name||' to '||tt.grantee||';'
from dba_tab_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'grant '||case
when c='TRUETRUE' then 'SYSDBA, SYSOPER'
when c='TRUEFALSE' then 'SYSDBA'
when c='FALSETRUE' then 'SYSOPER'
end|| ' to '||upper('&&user_name')||';'
from
(select sysdba||sysoper c from v$pwfile_users
where username=upper('&&user_name'))
union all
select 'alter user '||tt.user_name||' quota '||
case
when maxblocks*blocksize<0 then 'unlimited'
else to_char(maxblocks*blocksize)
end||' on '||ts_name||';'
from KU$_TSQUOTA_VIEW tt where tt.user_name=(upper('&&user_name'));
或者
set serveroutput on size 1000000
set verify off
undefine user_name
declare
v_name varchar2(30) := upper('&user_name');
no_grant exception;
pragma exception_init( no_grant, -31608 );
begin
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
dbms_output.enable(1000000);
dbms_output.put_line(dbms_metadata.get_ddl('USER',v_name));
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('SYSTEM_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('-- No system privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('ROLE_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('-- No role privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('OBJECT_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('-- No object privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA',v_name));
exception
when no_grant then dbms_output.put_line('-- No tablespace quota specified');
end;
dbms_output.put_line(dbms_metadata.get_granted_ddl('DEFAULT_ROLE', v_name ));
exception
when others then
if SQLCODE = -31603 then dbms_output.put_line('-- User does not exists');
else raise;
end if;
end;
/
SET verify off;
SET termout off;
SET feedback off;
SET echo off;
SET pagesize 0;
SET timeing off;
SET termout on
SELECT 'Creating user build script...' FROM DUAL;
SET termout off;
CREATE TABLE usr_temp( lineno NUMBER,usr_name VARCHAR2(30),text VARCHAR2(80))
/
DECLARE
CURSOR usr_cursor
IS
SELECT username, PASSWORD, default_tablespace, temporary_tablespace, PROFILE
FROM SYS.dba_users
WHERE username != 'SYS' AND username != 'SYSTEM'
ORDER BY username;
CURSOR qta_cursor (c_usr VARCHAR2)
IS
SELECT tablespace_name, max_bytes
FROM SYS.dba_ts_quotas
WHERE username = c_usr;
lv_username SYS.dba_users.username%TYPE;
lv_password SYS.dba_users.PASSWORD%TYPE;
lv_default_tablespace SYS.dba_users.default_tablespace%TYPE;
lv_temporary_tablespace SYS.dba_users.default_tablespace%TYPE;
lv_profile SYS.dba_users.PROFILE%TYPE;
lv_tablespace_name SYS.dba_ts_quotas.tablespace_name%TYPE;
lv_max_bytes SYS.dba_ts_quotas.max_bytes%TYPE;
lv_string VARCHAR2 (80);
lv_lineno NUMBER := 0;
PROCEDURE write_out (p_line INTEGER, p_name VARCHAR2, p_string VARCHAR2)
IS
BEGIN
INSERT INTO usr_temp (lineno, usr_name, text)
VALUES (p_line, p_name, p_string);
END;
BEGIN
OPEN usr_cursor;
LOOP
FETCH usr_cursor
INTO lv_username, lv_password, lv_default_tablespace, lv_temporary_tablespace, lv_profile;
EXIT WHEN usr_cursor%NOTFOUND;
lv_lineno := 1;
lv_string := ('CREATE USER ' || LOWER (lv_username));
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
IF lv_password IS NULL
THEN
lv_string := 'IDENTIFIED EXTERNALLY';
ELSE
lv_string := ('IDENTIFIED BY VALUES ''' || lv_password || '''');
END IF;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := 'DEFAULT TABLESPACE ' || lv_default_tablespace;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := 'TEMPORARY TABLESPACE ' || lv_temporary_tablespace;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
OPEN qta_cursor (lv_username);
LOOP
FETCH qta_cursor
INTO lv_tablespace_name, lv_max_bytes;
EXIT WHEN qta_cursor%NOTFOUND;
lv_lineno := lv_lineno + 1;
IF lv_max_bytes IS NULL
THEN
lv_string := 'QUOTA UNLIMITED ON ' || lv_tablespace_name;
ELSE
lv_string :=
'QUOTA ' || lv_max_bytes || ' ON ' || lv_tablespace_name;
END IF;
write_out (lv_lineno, lv_username, lv_string);
END LOOP;
CLOSE qta_cursor;
lv_string := ('PROFILE ' || lv_profile || ';');
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := ' ';
write_out (lv_lineno, lv_username, lv_string);
END LOOP;
CLOSE usr_cursor;
END;
/
SPOOL create_users.sql
SET heading off
SET recsep off
COL test format a80 word_wrap
SELECT text
FROM usr_temp
ORDER BY usr_name, lineno;
SPOOL off;
DROP TABLE usr_temp;
EXIT
/
----------------------------------------------------------------------------------------------
2。 User授权语句
undefine user_name
set pagesize 1000
select 'grant '||tt.granted_role||' to '||tt.grantee||';' as SQL_text
from dba_role_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'grant '||tt.privilege||' to '||tt.grantee||';'
from dba_sys_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'revoke UNLIMITED TABLESPACE from '||upper('&&user_name')||';' from dual
union all
select 'grant '||tt.privilege||' on '||owner||'.'||table_name||' to '||tt.grantee||';'
from dba_tab_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'grant '||case
when c='TRUETRUE' then 'SYSDBA, SYSOPER'
when c='TRUEFALSE' then 'SYSDBA'
when c='FALSETRUE' then 'SYSOPER'
end|| ' to '||upper('&&user_name')||';'
from
(select sysdba||sysoper c from v$pwfile_users
where username=upper('&&user_name'))
union all
select 'alter user '||tt.user_name||' quota '||
case
when maxblocks*blocksize<0 then 'unlimited'
else to_char(maxblocks*blocksize)
end||' on '||ts_name||';'
from KU$_TSQUOTA_VIEW tt where tt.user_name=(upper('&&user_name'));
或者
set serveroutput on size 1000000
set verify off
undefine user_name
declare
v_name varchar2(30) := upper('&user_name');
no_grant exception;
pragma exception_init( no_grant, -31608 );
begin
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
dbms_output.enable(1000000);
dbms_output.put_line(dbms_metadata.get_ddl('USER',v_name));
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('SYSTEM_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('-- No system privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('ROLE_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('-- No role privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('OBJECT_GRANT',v_name));
exception
when no_grant then dbms_output.put_line('-- No object privs granted');
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA',v_name));
exception
when no_grant then dbms_output.put_line('-- No tablespace quota specified');
end;
dbms_output.put_line(dbms_metadata.get_granted_ddl('DEFAULT_ROLE', v_name ));
exception
when others then
if SQLCODE = -31603 then dbms_output.put_line('-- User does not exists');
else raise;
end if;
end;
/
[工具使用] sqlplus 设置
保存历史记录(rlwrap)
vim ~/.bashrc
------------------------------------------------------
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'
vim $oracle_home$\sqlplus\admin\glogin.sql
------------------------------------------------------
define _editor=vim
define gname=idle
set arraysize 1000
set auto off
set line 80
set linesize 120
set feedback on
set pagesize 9999
set newpage none
set long 5000
set trimspool on
-- set timing on
-- set time on
set auto off
set serveroutput on size 1000000 format wrapped
--alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
--alter session set nls_language=American;
column global_name new_value gname
set termout off
select lower(user)||'@'||substr(global_name,1,
decode(dot,0,length(global_name),dot-1)) global_name
from (select global_name,instr(global_name,'.') dot from global_name);
set sqlprompt '&gname> '
set termout on
column tablespace_name format a15 heading tablespace|name;
column ts_name format a15;
column table_name format a15;
column name format a40;
column owner format a10;
column file_name format a40;
column segment_name format a15;
column segment_type format a15;
column status format a15;
column username format a15;
column user_name format a15;
column program format a40;
column member format a40;
column type format a15;
column object_name format a30;
column grantee format a12;
column granted_role format a20;
column parameter format a35;
column value format a40;
column object_type format a20;
column tablespace_name format a15;
column ts_name format a15;
column table_name format a15;
column name format a40;
column owner format a10;
column file_name format a40;
column segment_name format a15;
column segment_type format a15;
column status format a15;
column username format a15;
column user_name format a15;
column program format a30;
column machine format a30
column member format a40;
column type format a15;
column object_name format a30;
column grantee format a12;
column granted_role format a20;
column parameter format a35;
column value format a40;
column object_type format a20;
column sql_text format a60;
column directory_path format a60;
column directory_name format a30;
column column_name format a30;
column cluster_name format a30;
column clu_column_name format a30;
column tab_column_name format a30;
column dest_name format a20;
column destination format a60;
column database_role format a20;
column switcover_status format a20;
column db_unique_name format a20;
column protection_level format a20;
column recovery_mode format a20;
column platform_name format a40;
column role format a20;
column privilege format a20;
vim ~/.bashrc
------------------------------------------------------
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'
vim $oracle_home$\sqlplus\admin\glogin.sql
------------------------------------------------------
define _editor=vim
define gname=idle
set arraysize 1000
set auto off
set line 80
set linesize 120
set feedback on
set pagesize 9999
set newpage none
set long 5000
set trimspool on
-- set timing on
-- set time on
set auto off
set serveroutput on size 1000000 format wrapped
--alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
--alter session set nls_language=American;
column global_name new_value gname
set termout off
select lower(user)||'@'||substr(global_name,1,
decode(dot,0,length(global_name),dot-1)) global_name
from (select global_name,instr(global_name,'.') dot from global_name);
set sqlprompt '&gname> '
set termout on
column tablespace_name format a15 heading tablespace|name;
column ts_name format a15;
column table_name format a15;
column name format a40;
column owner format a10;
column file_name format a40;
column segment_name format a15;
column segment_type format a15;
column status format a15;
column username format a15;
column user_name format a15;
column program format a40;
column member format a40;
column type format a15;
column object_name format a30;
column grantee format a12;
column granted_role format a20;
column parameter format a35;
column value format a40;
column object_type format a20;
column tablespace_name format a15;
column ts_name format a15;
column table_name format a15;
column name format a40;
column owner format a10;
column file_name format a40;
column segment_name format a15;
column segment_type format a15;
column status format a15;
column username format a15;
column user_name format a15;
column program format a30;
column machine format a30
column member format a40;
column type format a15;
column object_name format a30;
column grantee format a12;
column granted_role format a20;
column parameter format a35;
column value format a40;
column object_type format a20;
column sql_text format a60;
column directory_path format a60;
column directory_name format a30;
column column_name format a30;
column cluster_name format a30;
column clu_column_name format a30;
column tab_column_name format a30;
column dest_name format a20;
column destination format a60;
column database_role format a20;
column switcover_status format a20;
column db_unique_name format a20;
column protection_level format a20;
column recovery_mode format a20;
column platform_name format a40;
column role format a20;
column privilege format a20;
[管理脚本] Oracle中有关角色/系统/对象权限的视图
1. 特权用户
select * from v$pwfile_users;
2. 某用户拥有的角色, 系统/对象权限
select * from dba_role_privs where grantee = 'GO';
select * from dba_sys_privs where grantee = 'GO';
select * from dba_tab_privs where grantee = 'GO';
3. 当前用户所激活的角色/权限
select * from session_roles;
select * from session_privs;
4. 某角色拥有的角色, 系统/对象权限
select * from role_role_privs where role = 'DBA';
select * from role_sys_privs where role = 'DBA';
select * from role_tab_privs where role = 'DBA';
5. 某表拥有的访问权限
select * from table_privileges where owner = 'GO' and table_name = 'T' ;
6. 查看用户下所有的表
select * from user_tables; => tabs
select * from tab; (包含 Table, View, Cluster, Sysnonym)
7. 连接中动态设置角色
set role none;
set role all; # 有密码时会提示输入密码
8. 赋予普通用户查看数据字典视图的权限
grant select_catalog_role to go;
9. 改变当前用户默认访问的 shema 下的对象
# 默认访问与自己用户名同名的 schema
# 改变后默认创建的对象是从属于改变后的目标 schema
alter session set current_schema = testuser; # testuser 的 schema 名
select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA from dual;
登録:
投稿 (Atom)
