2012-04-26 14:42 PROFILE各种选项

2023-10-26

2012-04-26 14:42

PROFILE各种选项

1.用户创建语句选项“引发的血案”
如果大家细心的话,在创建用户的语法中有这么一个选项“PROFILE profile”。
下面是 11gR2官方文档中关于创建用户的语法描述(较之的文档可读性加强了,当然功能也同样有所增加):
CREATE user
IDENTIFIED { BY password
| EXTERNALLY [ AS 'certificate_DN' | AS 'kerberos_principal_name' ]
| GLOBALLY [ AS '[ directory_DN ]' ]
}
[ DEFAULT TABLESPACE tablespace
| TEMPORARY TABLESPACE
{ tablespace | tablespace_group_name }
| { QUOTA { size_clause | UNLIMITED } ON tablespace }...
| PROFILE profile
| PASSWORD EXPIRE
| ACCOUNT { LOCK | UNLOCK }
[ DEFAULT TABLESPACE tablespace
| TEMPORARY TABLESPACE
{ tablespace | tablespace_group_name }
| { QUOTA { size_clause | UNLIMITED } ON tablespace }...
| PROFILE profile
| PASSWORD EXPIRE
| ACCOUNT { LOCK | UNLOCK }
| ENABLE EDITIONS
]...
] ;

2.提问:PROFILE选项是做什么用的呢?
回答:简要的说,PROFILE在Oracle数据库对用户能够使用的资源做进一步的限制的一种手段,如对连接到某个用户的session或所能使用的CPU资源进行控制,又如控制Oracle用户的密码策略等等……

3.查看系统的默认PROFILE
1)通过dba_profiles视图查看一下系统中默认都有哪些PROFILE
数据库创建以后,系统中只会存在一个名为DEFAULT的默认PROFILE,在用户创建之后,如果不做特殊指定,每个用户的PROFILE都会默认的使用个默认的PROFILE。
sys@ora10g> select distinct profile from dba_profiles;

PROFILE
----------
DEFAULT

2)全面查看一下这个PROFILE都包含哪些限制定义
sys@ora10g> select * from dba_profiles;

PROFILE RESOURCE_NAME RESOURCE LIMIT
---------- -------------------------------- -------- -----------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED

16 rows selected.

3)结论
通过上面的查看,可以得到这个系统默认的PROFILE “DEFAULT”的配置信息只对密码的错误尝试次数做了限制(最多可以错误输错10次密码),如果我们启用了PROFILE(下面有介绍如何启用和停止PROFILE),默认的限制只有这些。如果想要改变限制条件,有两种方法:第一种方法是可以对这个默认的PROFILE做个性化的调整;第二种方法是再重新定制一个新的PROFILE满足新的需求。

4.对创建PROFILE的标准语法做一下“解剖麻雀”(更多细节可以参考Oracle的官方文档)
1)创建PROFILE的语法如下:
CREATE PROFILE profile
LIMIT { resource_parameters 对资源的限制
| password_parameters 对密码的限制
}...
;

2)对数据库资源做限制时,下面是全部可用的参数:
{ { SESSIONS_PER_USER 每个用户名所允许的并行会话数
| CPU_PER_SESSION 一个会话一共可以使用的CPU时间,单位是百分之一秒
| CPU_PER_CALL 一次SQL调用(解析、执行和获取)允许使用的CPU时间
| CONNECT_TIME 限制会话连接时间,单位是分钟
| IDLE_TIME 允许空闲会话的时间,单位是分钟
| LOGICAL_READS_PER_SESSION 限制会话对数据块的读取,单位是块
| LOGICAL_READS_PER_CALL 限制SQL调用对数据块的读取,单位是块
| COMPOSITE_LIMIT “组合打法”
}
{ integer | UNLIMITED | DEFAULT }
| PRIVATE_SGA 限制会话在SGA中Shared Pool中私有空间的分配
{ size_clause | UNLIMITED | DEFAULT }
}

3)对密码做限制时,下面是全部可用的参数:
{ { FAILED_LOGIN_ATTEMPTS 帐户被锁定之前可以错误尝试的次数
| PASSWORD_LIFE_TIME 密码可以被使用的天数,单位是天,默认值180天
| PASSWORD_REUSE_TIME 密码可重用的间隔时间(结合PASSWORD_REUSE_MAX)
| PASSWORD_REUSE_MAX 密码的最大改变次数(结合PASSWORD_REUSE_TIME)
| PASSWORD_LOCK_TIME 超过错误尝试次数后,用户被锁定的天数,默认1天
| PASSWORD_GRACE_TIME 当密码过期之后还有多少天可以使用原密码
}
{ expr | UNLIMITED | DEFAULT }
| PASSWORD_VERIFY_FUNCTION
{ function | NULL | DEFAULT }
}

5.OK,语法已经了然于胸,那么我们来实际创建一个PROFILE(这里的名字我们称其为:sec_profile),在感性认识的同时一同探索一下在这个过程中会遇到的一些有趣现象。
1)尝试创建一个混合型的PROFILE(包含和密码限制)
sys@ora10g> CREATE PROFILE sec_profile LIMIT
2 SESSIONS_PER_USER UNLIMITED
3 CPU_PER_SESSION UNLIMITED
4 CPU_PER_CALL 6000
5 CONNECT_TIME 60
6 LOGICAL_READS_PER_SESSION DEFAULT
7 LOGICAL_READS_PER_CALL 6000
8 COMPOSITE_LIMIT 6000000
9 PRIVATE_SGA 66K
10 FAILED_LOGIN_ATTEMPTS 6
11 PASSWORD_LIFE_TIME 60
12 PASSWORD_REUSE_TIME 60
13 PASSWORD_REUSE_MAX 5
14 PASSWORD_LOCK_TIME 1/24
15 PASSWORD_GRACE_TIME 10
16 PASSWORD_VERIFY_FUNCTION verify_function
17 /
CREATE PROFILE sec_profile LIMIT
*
ERROR at line 1:
ORA-07443: function VERIFY_FUNCTION not found

2)报错原因
为什么会报错?错误提示很清楚,VERIFY_FUNCTION这个函数不存在。既然知道不存在,那我们如何创建它呢?
回答:
VERIFY_FUNCTION函数是通过utlpwdmg.sql脚本创建的,该脚本所在的目录是$ORACLE_HOME/rdbms/admin/

3)创建密码复杂性检验函数VERIFY_FUNCTION
我们使用utlpwdmg.sql脚本创建以下这个VERIFY_FUNCTION密码复杂度校验函数
sys@ora10g> @?/rdbms/admin/utlpwdmg.sql

Function created.


Profile altered.

4)utlpwdmg.sql脚本中的小秘密
细心的您在执行utlpwdmg.sql脚本的过程中一定发现了有一个“Profile altered”的提示,难道这个脚本修改了某个PROFILE信息么?正如您所料,它修改了系统的默认PROFILE “DEFAULT”,再次查看一下现在的DEFAULT的定义信息:
sys@ora10g> select * from dba_profiles;

PROFILE RESOURCE_NAME RESOURCE LIMIT
---------- -------------------------------- -------- -----------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 3
DEFAULT PASSWORD_LIFE_TIME PASSWORD 60
DEFAULT PASSWORD_REUSE_TIME PASSWORD 1800
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION
DEFAULT PASSWORD_LOCK_TIME PASSWORD .0006
DEFAULT PASSWORD_GRACE_TIME PASSWORD 10

16 rows selected.

与系统创建时的DEFAULT PROFILE相比较,之前只有10次密码输入错误的限制,执行完成这个函数创建之后,我们发现系统默认的PROFILE已经对系统有了一个非常严格的约束。也就是说现在系统上的每一个用户在默认情况下都多了这些密码方面的限制。

5)验证一下新默认的PROFILE “DEFAULT”关于错误密码输入次数的限制
我们模拟一下错误输错密码三次后的效果,可以看到,在第四次输入后,sec用户被锁定了。
sys@ora10g> conn sec/a
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.
sys@ora10g> conn sec/a
ERROR:
ORA-01017: invalid username/password; logon denied


sys@ora10g> conn sec/a
ERROR:
ORA-01017: invalid username/password; logon denied


sys@ora10g> conn sec/a
ERROR:
ORA-28000: the account is locked

6)使用dba_users视图比较一下用户的前后状态
用户sec已经因错误密码输入次数超过3此导致用户被锁定了,进一步比较一下用户的状态。
sys@ora10g> col USERNAME for a10
sys@ora10g> col ACCOUNT_STATUS for a20
sys@ora10g> col PROFILE for a10
sys@ora10g> select USERNAME,ACCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE from dba_users where username = 'SEC';

USERNAME ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE
---------- -------------------- ------------------- -------------------
SEC OPEN

sys@ora10g> select USERNAME,ACCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE from dba_users where username = 'SEC';

USERNAME ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE
---------- -------------------- ------------------- -------------------
SEC LOCKED(TIMED) 2009-10-11 16:05:03 2009-12-09 08:46:36

7)既然默认的PROFILE发生了变化,那么就会面临一个实际问题,如何恢复成原始状态呢?这里给出一个比较简单的方法,就是使用ALTER PROFILE命令修改成原来的模样
sys@ora10g> ALTER PROFILE DEFAULT LIMIT
2 COMPOSITE_LIMIT UNLIMITED
3 SESSIONS_PER_USER UNLIMITED
4 CPU_PER_SESSION UNLIMITED
5 CPU_PER_CALL UNLIMITED
6 LOGICAL_READS_PER_SESSION UNLIMITED
7 LOGICAL_READS_PER_CALL UNLIMITED
8 IDLE_TIME UNLIMITED
9 CONNECT_TIME UNLIMITED
10 PRIVATE_SGA UNLIMITED
11 FAILED_LOGIN_ATTEMPTS 10
12 PASSWORD_LIFE_TIME UNLIMITED
13 PASSWORD_REUSE_TIME UNLIMITED
14 PASSWORD_REUSE_MAX UNLIMITED
15 PASSWORD_VERIFY_FUNCTION NULL
16 PASSWORD_LOCK_TIME UNLIMITED
17 PASSWORD_GRACE_TIME UNLIMITED
18 /

Profile altered.

8)最后我们重新创建一下这个实验PROFILE:sec_profile,可以预测,这次一定会成功滴~~~
sys@ora10g> CREATE PROFILE sec_profile LIMIT
2 SESSIONS_PER_USER UNLIMITED
3 CPU_PER_SESSION UNLIMITED
4 CPU_PER_CALL 6000
5 CONNECT_TIME 60
6 LOGICAL_READS_PER_SESSION DEFAULT
7 LOGICAL_READS_PER_CALL 6000
8 COMPOSITE_LIMIT 6000000
9 PRIVATE_SGA 66K
10 FAILED_LOGIN_ATTEMPTS 6
11 PASSWORD_LIFE_TIME 60
12 PASSWORD_REUSE_TIME 60
13 PASSWORD_REUSE_MAX 5
14 PASSWORD_LOCK_TIME 1/24
15 PASSWORD_GRACE_TIME 10
16 PASSWORD_VERIFY_FUNCTION verify_function
17 /

Profile created.

创建成功鸟~~
在这个中,我们使用了PROFILE几乎所有的参数,惟一没有包含的参数是IDLE_TIME,目的仅仅是为了说明一个细节:如果该PROFILE被授权给用户后,这个被省略的IDLE_TIME参数将继承默认PROFILE “DEFALT”中的定义。

对上面我们创建的PROFILE逐行做一下诠释,以便加深理解:
第 2行:对用户的并发连接会话数不做限制
第 3行:对于连接到用户的每一个session的CPU时间的使用不做限制
第 4行:一次调用消耗的CPU时间不能超过60秒(不超过一分钟)
第 5行:连接到用户的每次会话时间不能超过60分钟(不超过一个小时)
第 6行:一次会话使用的物理读与逻辑读数据块总量与DEFAULT profile中定义保持一致
第 7行:一次调用使用的物理读与逻辑读数据块总量不超过6000个数据块
第 8行:一次会话总的资源消耗不超过6000000个服务单元(service units)
第 9行:一次会话在SGA中不能分配超过66K的空间
第10行:帐户被锁定之前允许6次的错误尝试
第11行:超过此生命周期后密码作废
第12行:密码重用时间60天
第13行:密码重用之前密码需要完成5次改变
第14行:超过错误尝试次数后,用户将被锁定1小时
第15行:当密码过期之后原密码还可以使用10天
第16行:使用密码复杂度校验函数verify_function对密码做检查

再单独深入解释一下第12行和13行组合搭配之后的含义:也就是说只有完成了5次的密码修改后并且已经超过60天后,之前的密码才能够再一次被使用。

9)通过dba_profiles视图再一次查看一下此时系统中存在的PROFILE的信息
sys@ora10g> col PROFILE for a12
sys@ora10g> col RESOURCE_NAME for a25
sys@ora10g> col LIMIT for a15
sys@ora10g> select * from dba_profiles order by 1,2;

PROFILE RESOURCE_NAME RESOURCE LIMIT
------------ ------------------------- -------- ---------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 3
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD 60
DEFAULT PASSWORD_LOCK_TIME PASSWORD .0006
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD 1800
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
SEC_PROFILE COMPOSITE_LIMIT KERNEL 5000000
SEC_PROFILE CONNECT_TIME KERNEL 45
SEC_PROFILE CPU_PER_CALL KERNEL 3000
SEC_PROFILE CPU_PER_SESSION KERNEL UNLIMITED
SEC_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD 5
SEC_PROFILE IDLE_TIME KERNEL DEFAULT
SEC_PROFILE LOGICAL_READS_PER_CALL KERNEL 1000
SEC_PROFILE LOGICAL_READS_PER_SESSION KERNEL DEFAULT
SEC_PROFILE PASSWORD_GRACE_TIME PASSWORD 10
SEC_PROFILE PASSWORD_LIFE_TIME PASSWORD 60
SEC_PROFILE PASSWORD_LOCK_TIME PASSWORD .0416
SEC_PROFILE PASSWORD_REUSE_MAX PASSWORD 5
SEC_PROFILE PASSWORD_REUSE_TIME PASSWORD 60
SEC_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION
SEC_PROFILE PRIVATE_SGA KERNEL 15360
SEC_PROFILE SESSIONS_PER_USER KERNEL UNLIMITED

32 rows selected.

10)删除PROFILE
既然有创建,就一定对应着删除,删除方法很简单,语法如下:
DROP PROFILE profile [ CASCADE ] ;

如果创建的PROFILE已经授权给了具体的用户,则需要使用CASCADE选项级联的收回相应的限制信息,在收回这些限制信息之后将会以系统默认的PROFILE对该用户进行限制。
删除示例如下:
sys@ora10g> drop profile SEC_PROFILE cascade;

Profile dropped.

如果该PROFILE已经授权给具体的用户,使用不带有cascade选项的删除命令将得到如下的报错信息:
sys@ora10g> drop profile SEC_PROFILE;
drop profile SEC_PROFILE
*
ERROR at line 1:
ORA-02382: profile SEC_PROFILE has users assigned, cannot drop without CASCADE

6.关于PROFILE内容何时生效的一点注意事项
这里讨论需要谈到一个系统参数,它就是resource_limit。

如果要开启“资源限制”的话,这个参数必须是“TRUE”的状态
sys@ora10g> show parameter resource_limit

NAME TYPE VALUE
--------------- -------------------- ----------------------
resource_limit boolean FALSE

这里有一个小细节不得不提:
之所以称这个参数为resource_limit(资源限制)而没有称作“profile_limit”,是因为这个参数只对PROFILE中的资源限制部分起作用,如果是默认的FALSE状态,表示PROFILE定义中的资源限制条件不起作用,只有该参数为TRUE时,资源限制的定义才生效。
不过,关于PROFILE中密码限制的条件则与这个参数无关,无论这个参数设置为什么值,有关密码限制的条件都会默认生效,从这个细节上可以看出来Oracle对用户密码的重视程度。

因此关于PROFILE的生效情况结论是:
1)用户所有拥有的PROFILE中有关密码的限制永远生效,不受限制。
2)用户所有拥有的PROFILE中有关资源的限制与resource_limit参数的设置有关,当为TRUE时生效,当为FALSE时(默认值是FALSE)无效。

7.一切都OK了,最后我们来演示一下将新创建的PROFILE sec_profile指定给具体用户sec的操作
sys@ora10g> alter user sec profile sec_profile;

User altered.

sys@ora10g> select USERNAME,PROFILE from dba_users where USERNAME = 'SEC';

USERNAME PROFILE
---------- ------------
SEC SEC_PROFILE





ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/1440
PASSWORD_VERIFY_FUNCTION verify_function;

仔细阅读上面的脚本,您可以得到关于verify_function函数的密码复杂性校验规则如下:
1)密码最小长度为4个字符
2)密码不能和用户名相同
3)密码要包含至少一个字符、一个数字和一个特殊字符
4)密码需要至少有3个字符与之前的口令不相同

9.小结
通过PROFILE对用户的资源和登录密码的限制方法使用起来还是很贴心的,毕竟Oracle提供了这样一种便捷的管理手段,对付数据库方面的一般性审计还是游刃有余的,即使这些规则仍然不能满足需求,Oracle也提供了添加和修改的接口,以便按需定制,当然会有一定的开发周期和成本。

Oracle对数据库的方面提供了非常多的手段来保证,如审计和权限控制等优秀手段。对于一个商业数据库的安全性审计是非常重要的,如果后台的数据库存在安全隐患,可以说必定会带来一场浩劫,只是早晚的事情。如果您是一名维护DBA,一定要从数据库的安全性上多多动脑筋,不要等待问题出现了才恍然大悟:哇塞,原来Oracle同学早就有补救的措施啦!

BTW:关于权限控制的策略在使用前一定要做好充分的,确保对每一条限制规则理解透彻,不然会带来不必要的麻烦,另外一个经验就是:将每一步的限制规则记录到一个特定的数据库维护手册中,方便查询,同时也便于知识的传承,利己利人,“好事两桩”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2012-04-26 14:42 PROFILE各种选项 的相关文章

  • Oracle 函数中的加密/解密密码

    由于以前设计不佳的结构 我必须使用的当前数据库将用户密码存储为文本 现在 我正在构建一个必须使用这些密码的前端部分 我当然不想发送未加密的密码 我的想法是编写一个 Oracle 函数来加密和解密文本密码 并在存储过程中使用这些函数来返回加密
  • 每组最大 n 个 SQL 查询的高性能方法

    我正在尝试构建一个基础设施 以便根据需要快速运行回归 从包含我们网络服务器上所有历史活动的数据库中提取 apache 请求 为了通过确保我们仍然回归来自较小客户的请求来提高覆盖范围 我想通过为每个客户检索最多 n 个 为了这个问题 假设 1
  • postgresql 中的咨询锁超时

    我正在从 ORACLE 迁移 目前我正在尝试移植此呼叫 lkstat DBMS LOCK REQUEST lkhndl DBMS LOCK X MODE lktimeout true 这个功能 http docs oracle com cd
  • 无法使用symfony2连接数据库oracle

    我需要的 我需要将oracle数据库与symfony2连接 我已经通过 php m 检查过 oci8 pdo odbc odbc 这是我关注的链接https gist github com johnkary 6481664 https gi
  • 如何在oracle sql查询中提取括号之间的字符串

    我正在尝试从字符串中提取括号之间的值 我怎样才能做到这一点 例如 我有这个字符串 Gupta Abha 01792 我想得到括号之间的结果 即 01792 我正在尝试编写这样的查询 select substr Gupta Abha 0179
  • java.sql.SQLException: - ORA-01000: 超出最大打开游标数

    我收到 ORA 01000 SQL 异常 所以我有一些与之相关的疑问 最大打开游标是否与 JDBC 连接数完全相关 或者它们也与我们为单个连接创建的语句和结果集对象相关吗 我们正在使用连接池 有没有办法配置数据库中语句 结果集对象的数量 如
  • 如何使用 SQLPLUS 假脱机到 CSV 格式的文件?

    我想将一些查询提取为 CSV 输出格式 不幸的是 我无法使用任何奇特的 SQL 客户端或任何语言来做到这一点 我必须使用SQLPLUS 我该怎么做 您还可以使用以下内容 尽管它确实在字段之间引入了空格 set colsep separate
  • Oracle SQL 从零件创建日期

    我在数据库中有两个日期字段 名为 EFFECTIVE DATE 和 POINT DATE 如何创建新的日期字段 其中日期由 EFFECTIVE DATE 年份 POINT DATE 月份和 POINT DATE 日期组成 我通常会使用 Da
  • C# 中强制关闭 oracle 连接

    我有一个报告窗口 显示从可能长时间运行的 Oracle 存储过程返回的结果 我的问题是 当用户关闭窗口时 与 Oracle 的连接保持打开状态 并且可能长时间运行的报告不会被取消 关闭打开的连接的唯一方法是 DBA 手动终止它们或用户退出整
  • Oracle 11g XE - 突然出现 ORA-01034: ORACLE 不可用且 ORA-27101: 共享内存领域不存在

    Windows 7 32 位笔记本电脑 Oracle 11g XE 的本地实例 首先 在提出问题之前 我自己一直在研究这个问题 虽然有很多参考 建议 但我无法自己解决这个问题 突然 当我尝试登录本地 Oracle 11g XE 爱好者实例时
  • Oracle 触发器创建时出现编译错误,ORA-02289: 序列不存在

    当我使用 PowerDesigner 生成 SQL 并在 Oracle 中运行它时 它会抛出错误 警告 触发器创建时出现编译错误 create trigger tib material classify before insert on m
  • 插入期间违反唯一约束:为什么? (甲骨文)

    我正在尝试在表中创建一个新行 表上有两个约束 一个是关键字段 DB ID 另一个是将值限制为字段 ENV 中的几个之一 当我进行插入时 我没有将关键字段作为我尝试插入的字段之一 但我收到此错误 unique constraint N390
  • 如何从 Oracle 中获取格式化的 XML

    我对 Oracle 缺乏经验 并且在将数据导出为 XML 时遇到问题 我已经设法让这个查询正常工作 但 XML 的格式似乎是固定的 对我来说不起作用 这是查询 SELECT value em getClobVal AS output FRO
  • 如何找到 Oracle 视图的基础列和表名称?

    这听起来应该很简单 但事实并非如此 我找不到任何 Oracle 元数据 视图可以提供 Oracle 视图列的基础列和表名称 我发现这样做的唯一方法是解析视图源 SQL 这与精确的科学相去甚远 为了解释我想要什么 请考虑我在 SCOTT 模式
  • 在 Oracle 过程中实现多线程

    我正在研究 Oracle 10gR2 这是我的问题 我有一个程序 我们称之为 proc parent 在包内 应该调用另一个过程 让我们调用它 用户创建 我得打电话 用户创建 在一个循环中 它从表中读取一些列 并且这些列值作为参数传递给 用
  • Oracle SQL 触发器上的变异表

    我正在尝试执行触发器 但出现变异表错误 SQL 代码是这样的 CREATE OR REPLACE TRIGGER CHK Apartado D BEFORE INSERT OR UPDATE ON CONTRACTS FOR EACH RO
  • 如何记录更改列 DDL 操作

    我需要创建一个数据库触发器来记录每个更改 Add Column Modify Column Drop Column 使用Oracle的模式触发器在特定表中执行语句 如何获得 到目前为止我尝试了下面的代码 TRIGGER after ddl
  • 在 jdbc 程序中使用时,通过 SQL 客户端插入表中的记录未显示

    我使用 SQL 客户端和 JDBC 程序将几行插入到我的表 EMP 中 使用 SQL 客户端插入的记录不会显示在 Java 的输出控制台中 我正在使用 Java 8 和 oracle 11g 数据库来插入和读取数据库 除了通过 SQL 客户
  • 如何在TOAD的DataGrid中显示sys_refcursor数据

    请我需要帮助 我搜索了很多并且变得更加困惑 我使用 Toad 9 7 25 并且我做了这个程序 在一个包中 PROCEDURE ReportaCC pfcorte IN DATE lcursor IN OUT SYS REFCURSOR I
  • Oracle 9i:同义词表不存在?

    我创建了一个包 其中包含一个存储过程 我计划从单独的应用程序调用该存储过程 存储过程将返回架构中所有视图和表的排序列表 为此 它对 DBA TABLES 和 DBA VIEWS 同义词执行简单的选择 如下所示 CREATE OR REPLA

随机推荐

  • Zephyr-环境搭建

    目录 1 前言 2 安装主机依赖 3 获取源码 4 安装工具链 5 编译一个Demo 1 前言 Zephyr支持Ubuntu macOS Windows环境下开发 本文介绍基于Ubuntu的环境搭建 包括 Ubuntu开发环境搭建 主要是工
  • VBA设置默认/缺省运行路径的方法

    在设计VBA脚本时 有时我们需要在指定目录中运行或打开第三方程序 文件 那么最好的方法就是使用ChDir命令更改当前默认的运行路径 以便脚本能轻松地找到所需文件 更改缺省文件夹或驱动器 ChDir 语句和ChDrive语句 使用ChDir语
  • 改进的PSO-BP算法在工业机器人末端位姿误差补偿中的应用

    摘要 提出了一种全梯度标准粒子群优化反馈 FGSPSO BP 神经网络的工业机器人末端位姿补偿模型 首先 提出一种运动学逆变换算法 通过机器人末端位姿对机器人各关节角度值进行计算 并采用Matlab验证了运动学逆变换算法的准确性 然后 提出
  • VS2019打包WPF安装程序最新教程

    VS2019打包WPF安装程序最新教程 使用Visual Studio 2019开发的WPF程序如果想要打包为安装程序 除了在VS2019找到WPF项目类库直接右键发布之外 更常用的还是将其打包为exe或者msi的安装程序 打包成安装程序的
  • 2022电赛小车开源代码讲解开源

    2022电赛小车我认为有主要是几个主要的问题 我将分这几个部分来讲解 目录 一 循迹 二 蓝牙通信 双车数据传输 三 起始路口的识别 四 分叉路口的识别 五 源码 2022电赛 双车稳定行驶 哔哩哔哩 bilibili 一 循迹 循迹我们组
  • 自定义yaml文件调整pandoc和pandoc-crossref将markdown转word过程中公式行距

    markdown借助pandoc和pandoc crossref将写好的学术论文导出成word时 公式为OMML格式 这个格式可以通过word中的mathtype插件批量转换 但是公式的基准为正文 如果正文文本的段落格式为固定值20磅 比较
  • 使用Java生成全部数独(Sudoku)布局

    b 引言 b 数独相信很多人都玩过 趣味性很强 十分的耐玩 可有没有程序员想过玩实现一个数独布局的算法呢 算法是个很有意思 很神奇的东西 我第一次接触算法是刚学C的时候 写DOS下的挖雷程序 当时还是WIN32 C的编译器还是TC3 0 当
  • Python基础篇(十一):装饰器

    装饰器 前言 1 装饰器的定义 2 装饰器的应用 3 装饰器的语法 4 func args kwargs 前言 装饰器是Python中一种强大的函数或类修饰机制 用于在不修改原始函数或类代码的情况下 对其进行功能扩展或修改 装饰器基于函数式
  • python基础学完还要学什么_Python学完基础语法后,再往后应该学什么?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一阶段 Python语言及应用 课程内容 Python语言基础 面向对象设计 多线程编程 数据库交互技术 前端特效 Web框架 爬虫框架 网络编程 掌握技能 1 掌握Python语言语法及面向
  • 教程资源(持续更新中)

    https www liwenzhou com posts Go golang menu 下面这个也很牛逼 the way to go ZH CN directory md at master piexlmax the way to go
  • 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础 大型的IT企业面试时也会出数据结构和算法的题目 它可以说明你是否有良好的逻辑思维 如果你具备良好的逻辑思维 即使技术存在某些缺陷 面试公司也会认为你很有培养价值 至少在一段时间之后 技术可以很快得到提高
  • 散列表(hash表)的基本原理以及hash冲突(碰撞)

    散列表为什么诞生 它用于做什么 先说说数组 数组的优点是查找比较快 但是添加和删除效率比较低 再说说链表 链表的优点是添加和删除效率比较快 相对于数组 但是遍历需要一个指针从头节点往后找 两者都各有优点和缺点 那么有没有一种方法 既可以添加
  • MAC(m1)-VMWare Fusion CentOS8设置静态IP、SSH连接

    在使用虚拟机的时候 默认情况下使用的DHCP协议 根据网段自动分配ip 分配的动态IP地址 使得每次打开虚拟机后当前的IP地址都会发生变化 这样不方便管理 为了能够给当前虚拟机设置 一个静态IP地址 方便后期使用XShell连接工具进行连接
  • 打造属于自己的正则表达式

    概述 首先需要说明的一点 无论是Winform 还是Webform 都有很成熟的日历控件 无论从易用性还是可扩展性上看 日期的选择和校验还是用日历控件来实现比较好 前几天在CSDN多个版块看到需要日期正则的帖子 所以整理了这篇文章 和大家一
  • 【windows无法自动将IP协议堆栈绑定到网络适配器的一种解决办法】

    今天打开笔记本发现没网了 能够连上WiFi但无法连接到互联网 以太网能够检测到网线插入 但同样无法连接到互联网 使用windows自带的疑难解答进行检测结果为网络适配器的驱动程序可能出现问题 以管理员身份进行修复也失败 查看详情提示wind
  • linux命令之sh的用法

    shell简介 sh命令就是shell 而我们知道shell的作用是什么 shell就是用来解释linux命令的 我们输入命令 指示linux帮我们做什么 而linux本身是看不懂我们输入的命令的 它只认识01 而事实显然不是如此 那么在用
  • vcs import src < ros2.repos失败

    网上找到的ros安装教程 但是运行到下面几部的时候出现了问题 1 mkdir p ros2 ws src 2 cd ros2 ws 3 wget https raw githubusercontent com ros2 ros2 dashi
  • 大Sql文件使用cmd命令执行

    sqlcmd S 127 0 0 1 U sa P 123 d tcd test1217 i E fap sql 键入 sqlcmd S 127 0 0 1 U sa P 000000 d DataBaseName i sqlfileNam
  • 读书笔记 - Direct93D游戏程序设计入门

    这本书是directx入门很好的教材 门槛低 可以了解directx很多基本的东西 可以作为跳板 看完以后去学习更高级的东西 比如directx自带的sample 以前看过这本书 现在再看一遍 主要目的是熟悉dx基本绘制知识 书中主要包含到
  • 2012-04-26 14:42 PROFILE各种选项

    2012 04 26 14 42 PROFILE各种选项 1 用户创建语句选项 引发的血案 如果大家细心的话 在创建用户的语法中有这么一个选项 PROFILE profile 下面是 11gR2官方文档中关于创建用户的语法描述 较之的文档可