by kevin
25.
五月 2017 17:49
>
在Oracle 11g 中默认的profile启用了密码过期时间是180天。 Oracle中如何查看客户端的IP? 缺省从 v$session 中不能直接获得客户端 IP,可以在数据库中创建一个追踪客户端IP地址的触发器: create or replace trigger on_logon_trigger after logon on database
begin
dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));
end;
常用的显示客户端信息的sql:
select v.USERNAME, v.STATUS, v.SCHEMANAME, v.OSUSER, v.PORT, v.TERMINAL, v.PROGRAM, v.TYPE, v.MACHINE, v.CLIENT_INFO from v$session v
order by v.MACHINE,v.TERMINAL;
综合v$process和v$session查看连接情况
Oracle常用的包引用
https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/toc.htm
by kevin
21.
九月 2016 23:08
>
首先,看看netstat 都有什么选项
1: C:\Users\Administrator>netstat -help
2:
3: 显示协议统计和当前 TCP/IP 网络连接。
4:
5: NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]
6:
7: -a 显示所有连接和侦听端口。
8: -b 显示在创建每个连接或侦听端口时涉及的可执行程序。
9: 在某些情况下,已知可执行程序承载多个独立的
10: 组件,这些情况下,显示创建连接或侦听端口时涉
11: 及的组件序列。此情况下,可执行程序的名称
12: 位于底部[]中,它调用的组件位于顶部,直至达
13: 到 TCP/IP。注意,此选项可能很耗时,并且在您没有
14: 足够权限时可能失败。
15: -e 显示以太网统计。此选项可以与 -s 选项结合使用。
16: -f 显示外部地址的完全限定域名(FQDN)。
17: -n 以数字形式显示地址和端口号。
18: -o 显示拥有的与每个连接关联的进程 ID。
19: -p proto 显示 proto 指定的协议的连接;proto 可以是下列任
20: 何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选
21: 项一起用来显示每个协议的统计,proto 可以是下列任
22: 何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP
23: 或 UDPv6。
24: -r 显示路由表。
25: -s 显示每个协议的统计。默认情况下,显示
26: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6
27: 的统计;-p 选项可用于指定默认的子网。
28: -t 显示当前连接卸载状态。
29: interval 重新显示选定的统计,各个显示间暂停的间隔秒数。
30: 按 CTRL+C 停止重新显示统计。如果省略,则 netstat
31: 将打印当前的配置信息一次。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
查看一个端口被哪个进程占用
C:\Users\Administrator>netstat -ano|findstr 800
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 1392
TCP [::]:8080 [::]:0 LISTENING 1392
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
查看都有哪些程序使用了哪些端口
C:\Users\Administrator>netstat –abn
活动连接
协议 本地地址 外部地址 状态
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
无法获取所有权信息
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
RpcSs
[svchost.exe]
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
无法获取所有权信息
TCP 0.0.0.0:554 0.0.0.0:0 LISTENING
[wmpnetwk.exe]
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
by kevin
14.
八月 2016 14:52
>
之前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然后运行就可以导出数据脚本了。现在在SQL Server 2008的Management Studio中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本。导出过程: 在SSMS2008(SQL Server Management Studio 2008)中的对象资源管理器中,右击需要导出数据的数据库,在弹出式菜单中选择“任务”下的“生成脚本”选项。 在脚本向导的选择脚本选项中,有以下重要选项可以选择: “编写数据的脚本”:是否导出数据库中的表数据。 “包含 If Not Exists”:此选项可以删除数据库中已存在的同名的数据库对象。 “编写创建数据库的脚本”:是否产生 Create Database 的SQL 脚本 “为服务器版本编写脚本”:选择要执行脚本的数据库版本。 然后下一步选择导出的对象,选择导出的表,最后完成时即可以看到由系统导出的表定义和表数据了。 1)另外有两个地方要注意。 一、CREATE DATABASE [DBNAME] (如果选择了“编写创建数据库的脚本”选项) 和 USE [DATABASE] 。 二、改数据库架构,一般本地是用dbo,所以按Ctrl+F键,选择替换窗口,把 dbo 替换成 [YOUR_SCHEMA] 至此脚本改造完成。 2)但是在实际的操作中,如果从08导出到低版本的sql中可能会有很多兼容性的问题,因此向低级版本导出脚本的时候 在“选择数据库”中,可以不勾选“为所选数据库中的所有对象编写脚本”复选框 在“选择脚本选项”中,注意把“为服务器版本编写脚本”中选择导出的数据库版本(2000,2005,2008) 3)导出的脚本如何很大,无法直接在SQL Server Management Studio直接打开运行,使用 sqlcmd 运行 Transact-SQL 脚本文件 (sqlcmd工具)。 运行脚本文件 打开命令提示符窗口。 在命令提示符窗口中,键入 sqlcmd -S myServer\instanceName -i C:\myScript.sql 按 Enter 键。 将此输出保存到文本文件中 打开命令提示符窗口。 在命令提示符窗口中,键入 sqlcmd -S myServer\instanceName -i C:\myScript.sql -o C:\EmpAdds.txt 按 Enter 键。
by kevin
3.
八月 2016 14:17
>
最近的开发中有一个功能,点击一个链接之后,要判断当前的用户是否登录,没有登录的话,需要弹出一个登录对话框,用户登录之后,再在新的窗口(标签)中打开链接指向的Url。 不多说,直接贴出代码: $(document).delegate("a", "click", function () {
var actionUrl = $(this).attr("href");
var ssoAction = function () { window.open(actionUrl, '_blank'); };
if (isLogin()) {
ssoAction();
} else {
popup.show({login:function () {
$.ajax({
type: "post",
dataType: "json",
url: "/Account/Login",
data: $("frmLogin").serialize(),
//发送方式改为同步,避免弹出页面被浏览器拦截
async: false,
success: function (oData) {
ssoAction();
}
});
});
}
return false;
});
重点:需要使用同步提交,使用异步提交,callback里面打开新窗口(标签),会被浏览器认为是恶意行为。
by kevin
8.
十月 2015 14:19
>
.net 4.0的环境下使用SmtpClient发送邮件,带有附件。碰到这个恶心的Exception System.FormatException: An invalid character was found in the mail header: 查了两天,终于解决了,是.Net自身的bug,据说后续版本是有解决的(估计.net 4.5以后)。 这里贴出解决方案: public static Attachment CreateAttachment(Stream attachmentFile, string displayName, string contentType, string attachmentFilePath)
{
var currentCulture = Thread.CurrentThread.CurrentCulture;//.net4.0 bug,
var attachment = new Attachment(attachmentFile, displayName);
try
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
attachment.ContentType = new ContentType(contentType);
attachment.ContentDisposition.CreationDate = File.GetCreationTime(attachmentFilePath);
attachment.ContentDisposition.ModificationDate = File.GetLastWriteTime(attachmentFilePath);
attachment.ContentDisposition.ReadDate = File.GetLastAccessTime(attachmentFilePath);
attachment.TransferEncoding = TransferEncoding.Base64;
attachment.NameEncoding = Encoding.UTF8;
string encodedAttachmentName = Convert.ToBase64String(Encoding.UTF8.GetBytes(displayName));
encodedAttachmentName = SplitEncodedAttachmentName(encodedAttachmentName);
attachment.Name = encodedAttachmentName;
}
finally
{
Thread.CurrentThread.CurrentCulture = currentCulture;
}
return attachment;
}
private static string SplitEncodedAttachmentName(string encoded)
{
const string encodingtoken = "=?UTF-8?B?";
const string softbreak = "?=";
const int maxChunkLength = 30;
int splitLength = maxChunkLength - encodingtoken.Length - (softbreak.Length * 2);
IEnumerable<string> parts = SplitByLength(encoded, splitLength);
string encodedAttachmentName = encodingtoken;
foreach (var part in parts)
{
encodedAttachmentName += part + softbreak + encodingtoken;
}
encodedAttachmentName = encodedAttachmentName.Remove(encodedAttachmentName.Length - encodingtoken.Length, encodingtoken.Length);
return encodedAttachmentName;
}
private static IEnumerable<string> SplitByLength(string stringToSplit, int length)
{
while (stringToSplit.Length > length)
{
yield return stringToSplit.Substring(0, length);
stringToSplit = stringToSplit.Substring(length);
}
if (stringToSplit.Length > 0)
{
yield return stringToSplit;
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
参考:https://support.microsoft.com/zh-cn/kb/2402064
by kevin
11.
十一月 2014 21:10
>
chown命令: 可以用来改变linux文件的所有者,用到这个,是因为交替使用ftp和winscp上传文件,而且使用了不同的用户,导致经常出现上传失败。 css的 line-height: 很多浏览器默认line-height的值是font-size的120%,也有是100%的,所有应该考虑reset一下。 php的日期比较: 过程化方法:date_diff 对象化方法:DateTimeObject->diff 这个没有.net那么舒服,有个TimeSpan,要获取相差多少天,多少秒的,真心麻烦。 直接上代码: 1: public static function datediff($dt_menor, $dt_maior, $str_interval, $relative=false) {
2: if (is_string($dt_menor))
3: $dt_menor = date_create($dt_menor);
4: if (is_string($dt_maior))
5: $dt_maior = date_create($dt_maior);
6:
7: $diff = date_diff($dt_menor, $dt_maior, !$relative);
8:
9: switch ($str_interval) {
10: case "y":
11: $total = $diff->y + $diff->m / 12 + $diff->d / 365.25;
12: break;
13: case "m":
14: $total = $diff->y * 12 + $diff->m + $diff->d / 30 + $diff->h / 24;
15: break;
16: case "d":
17: $total = $diff->y * 365.25 + $diff->m * 30 + $diff->d + $diff->h / 24 + $diff->i / 60;
18: break;
19: case "h":
20: $total = ($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h + $diff->i / 60;
21: break;
22: case "i":
23: $total = (($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h) * 60 + $diff->i + $diff->s / 60;
24: break;
25: case "s":
26: $total = ((($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h) * 60 + $diff->i) * 60 + $diff->s;
27: break;
28: }
29: if ($diff->invert)
30: return -1 * $total;
31: else
32: return $total;
33: }
by kevin
2.
九月 2014 23:15
>
css的float会将display为inline或者block的元素,修改成display:inline-block razor.parse 每次都会重新编译模板文件,这样做很耗资源(内存和CPU) Html.RenderPartial其实也是比较耗资源的 javascript,多个空格合并成一个: 1: string = string.replace(/\s{2,}/g, ' ');
asp.net mvc,使用 razor模板引擎,让方法返回的字符串不会被进行Html编码:
1: public static IHtmlString BeginScript(this HtmlHelper htmlHelper)
2: {
3: return new HtmlString("<script type=\"text/javascript\">");
4: }
5:
6: public static IHtmlString EndScript(this HtmlHelper htmlHelper)
7: {
8: return new HtmlString("</script>");
9: }
导出Excel中出现乱码的终极解决方案:
1: <meta http-equiv="content-type" content="application/ms-excel; charset=UTF-8"/>
2: <table>
3: <tr>
4: <td>cbcye@live.com | http://www.cbcye.com </td> …
5: </tr>
6: <table>
by kevin
15.
六月 2014 17:32
>
最近是累了点,懒了点。 一个div元素,点击,页面外的元素,隐藏此div。 1: $(document).mouseup(function (e)
2: {
3: var container = $("YOUR CONTAINER SELECTOR");
4:
5: if (!container.is(e.target) // if the target of the click isn't the container...
6: && container.has(e.target).length === 0) // ... nor a descendant of the container
7: {
8: container.hide();
9: }
10: });
jquery.bxslider 是一个很不错的插件。
目前的版本是4+,使用过程中,碰到了几个bug.
如果刚好slider正在切换[gotoprev,gotonext]的时候,进行重绘[redraw],会造成slider停止工作。修复代码如下:
修改前:
1: el.redrawSlider = function () {
2: // resize all children in ratio to new screen size
3: slider.children.add(el.find('.bx-clone')).width(getSlideWidth());
4: // adjust the height
5: slider.viewport.css('height', getViewportHeight());
6: // update the slide position
7: if (!slider.settings.ticker) setSlidePosition();
8: // if active.last was true before the screen resize, we want
9: // to keep it last no matter what screen size we end on
10: if (slider.active.last) slider.active.index = getPagerQty() - 1;
11: // if the active index (page) no longer exists due to the resize, simply set the index as last
12: if (slider.active.index >= getPagerQty()) slider.active.last = true;
13: // if a pager is being displayed and a custom pager is not being used, update it
14: if (slider.settings.pager && !slider.settings.pagerCustom) {
15: populatePager();
16: updatePagerActive(slider.active.index);
17: }
18: }
修改后:
1: el.redrawSlider = function () {
2: if (slider.working) {
3: // Wait 'speed' amount of time before redrawing
4: setTimeout(function () { el.doRedrawSlider(); }, slider.settings.speed);
5: } else {
6: // Redraw immediately
7: el.doRedrawSlider();
8: }
9: };
10:
11: el.doRedrawSlider = function() {
12: // resize all children in ratio to new screen size
13: slider.children.add(el.find('.bx-clone')).width(getSlideWidth());
14: // adjust the height
15: slider.viewport.css('height', getViewportHeight());
16: // update the slide position
17: if (!slider.settings.ticker) setSlidePosition();
18: // if active.last was true before the screen resize, we want
19: // to keep it last no matter what screen size we end on
20: if (slider.active.last) slider.active.index = getPagerQty() - 1;
21: // if the active index (page) no longer exists due to the resize, simply set the index as last
22: if (slider.active.index >= getPagerQty()) slider.active.last = true;
23: // if a pager is being displayed and a custom pager is not being used, update it
24: if (slider.settings.pager && !slider.settings.pagerCustom) {
25: populatePager();
26: updatePagerActive(slider.active.index);
27: }
28: };
slider元素中,如果有img或者iframe无法正常加载,会引发slider无法正常工作。
修复前:
1: var loadElements = function (selector, callback) {
2: var total = selector.find('img, iframe').length;
3: if (total == 0) {
4: callback();
5: return;
6: }
7: var count = 0;
8: selector.find('img, iframe').each(function () {
9: $(this).one('load', function () {
10: if (++count == total) callback();
11: }).each(function () {
12: if (this.complete) $(this).load();
13: });
14: });
15: }
修复后:
1: var loadElements = function (selector, callback) {
2: var total = selector.find('img, iframe').length;
3: if (total == 0) {
4: callback();
5: return;
6: }
7: var count = 0;
8: selector.find('img, iframe').each(function () {
9: $(this).one('load', function () {
10: if (++count == total) callback();
11: }).one('error', function() {
12: if (++count == total) callback();
13: }).each(function () {
14: if (this.complete) $(this).load();
15: });
16: });
17: }
by kevin
17.
三月 2014 22:27
>
window.location.replace window.location.replace('url'),简单的防止后退到前一个页面。 fluentData的ParameterOut fluentData的ParameterOut方法有bug 如果output decimal的话,小数点的位置会被设置为0,所以改用 Currency ParameterOut("SubTotal", DataTypes.Currency)
by kevin
11.
三月 2014 14:52
>
关闭查询编辑器(SQL Query Editor)的查询结果窗口 快捷键是Ctrl+R 如果失效了,可以通过 Tools –> Options –> Environment –> Keyboard进行设置,如下图