现在的位置: 首页 > 综合 > 正文

问题杂集

2017年10月02日 ⁄ 综合 ⁄ 共 2773字 ⁄ 字号 评论关闭

如何解决error while loading shared libraries: /opt/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied

这类问题?

一般解决这种问题需要两步:

第一、

禁用SE,只需编辑/etc/sysconfig/selinux文件,将最后一行的SELINUXTYPE=targeted改成

SELINUXTYPE=disabled 并且SELINUX=disabled

第二、

 添加到信任列表,执行一个命令,在当前用户下:

$chcon -t texrel_shlib_t  <PATH>/*.so

要先su到root用户下!!


 

如果程序仍然后permission denied的情况,按照上述步骤再走一次

 

size_t是什么类型,是有符号的还是无符号的数?

size_t是C内部预定义的一个类型:
typedef unsigned int size_t
因此这句代码相当于:unsigned int size=sizeof(long long);
而sizeof()函数的功能就是求变量在内存中所占的字节数
因此,这句话的意思是将long long类型在内存中所占的字节数赋值给无符号整型变量size

 

size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。

例如:bitset的size操作返回bitset对象中二进制位中的个数,返回值类型是size_t。

例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。

请教sqlglm()函数请教sqlglm()函数sqlglm()函数

Getting the Full Text of Error Messages
The SQLCA can accommodate error messages up to 70 characters long. To get the
full text of longer (or nested) error messages, you need to use the sqlglm()
function. The syntax is
void sqlglm(char *message_buffer,
size_t *buffer_size,
size_t *message_length);
where:
Syntax Description
message_buffer Is the text buffer in which you want Oracle to store the error
message (Oracle blank-pads to the end of this buffer).
buffer_size Is a scalar variable that specifies the maximum size of the buffer
in bytes.
message_length Is a scalar variable in which Oracle stores the actual length of the
error message, if not truncated.

 

WHENEVER
在每条嵌入式SQL语句之后立即编写一条检查SQLCODE/SQLSTATE值的程序,是一件很繁琐的事情。为了简化错误处理,可以使用WHENEVER语句.

WHENEVER语句是SQL预编译程序的指示语句,而不是可执行语句。它通知预编译程序在每条可执行嵌入式SQL语句之后自动生成错误处理程序,并指定了错误处理操作。

如何处理三种异常处理:
lWHENEVER SQLERROR action:表示一旦sql语句执行时遇到错误信息,则执行action,action中包含了处理错误的代码(SQLCODE<0)。
lWHENEVER SQLWARNING action:表示一旦sql语句执行时遇到警告信息,则执行aciton,即action中包含了处理警报的代码(SQLCODE=1)。
lWHENEVER NOT FOUND action:表示一旦sql语句执行时没有找到相应的元组,则执行action,即action包含了处理没有查到内容的代码(SQLCODE=100)。
针对上述三种异常处理,用户可以指定预编译程序采取以下三种行为(action):
lWHENEVER …GOTO:通知预编译程序产生一条转移语句。
lWHENEVER…CONTINUE:通知预编译程序让程序的控制流转入到下一个主语言语句。
lWHENEVER…CALL:通知预编译程序调用函数。
其完整语法如下:
WHENEVER {SQLWARNING | SQLERROR | NOT FOUND} {CONTINUE | GOTO stmt_label | CALL function()}


例:WHENEVER的作用
EXEC SQL WHENEVER sqlerror GOTO errormessage1;
EXEC SQL DELETE FROM test  WHERE eid < 10000;
EXEC SQL DELETE FROM test  WHERE eid < 40000;
EXEC SQL WHENEVER sqlerror CONTINUE;
EXEC SQL UPDATE test  SET ename="999";
EXEC SQL WHENEVER sqlerror GOTO errormessage2;
.
.
.
errormessage1:
printf("SQL DELETE error: %ld\n, sqlcode);
exit();

errormessage2:
printf("SQL INSERT error: %ld\n, sqlcode);
exit();

由于第一个WHENEVER语句的作用,前面两个DELETE语句中任一语句内的一个错误会在errormessage1中形成一个转移指令。由于一个WHENEVER语句替代前面WHENEVER语句,所以,嵌入式UPDATE语句中的一个错误会直接转入下一个程序语句中。
从上面例子看出,WHENEVER/CONTINUE语句的主要作用是取消先前的WHENEVER语句的作用。WHENEVER语句使得对嵌入式SQL错误的处理更加简便。

如何更改用户所在的组

用usermod class1 st03

class1组名 st03为用户名

用户帐号信息保存在passwd文件中 /etc/passwd

用cat查看:cat /etc/passwd

第3个字段是500:意思就是,UID(用户的ID)是500.

第4个字段是500:意思就是.GID(用户的组ID)的500.

使用 usermod y1 st01 就可以把已有的用户st01加入y1组了.

抱歉!评论已关闭.