第一次北伐已失败告终,此时东边的吴国在精心准备一场伏击战。当年秋天魏国大司马曹休率领十万军队被东吴鄱阳(郡治在今江西波阳东)太守周舫以诈降的办法诱骗到石亭(今安徽桐城西南),遭吴国大都督陆逊三路伏击,魏军万余人被歼,吴军缴获的各种军用物资也堆积如山。曹休逃走回国后因此事羞愤难堪,得了背痈(背部化脓感染)而亡,关中的魏军东调防吴,这就又给了蜀汉北伐的良机。冬十二月,诸葛亮率数万军队出散关(今陕西宝鸡南),围攻魏重镇陈仓(今陕西宝鸡东,是汉中通往关中的要道)。
根据《曹真传》的记载,在祁山击退蜀军后曹真料到蜀军下次进攻必选陈仓,于是命将军郝昭、王生率领千余人提前做好准备,所以这一次魏军是早有提防。这场战斗也进行的相当激烈,《明帝纪》中详细记载了这场战斗的过程:诸葛亮使郝昭同乡勒详劝降不成后架起云梯冲车,郝昭以火箭射云梯烧死蜀军、以绳索连接石磨砸向冲车将其破坏;诸葛亮以百尺井阑(一种登高用的攻城车)向城内射击,填平护城河攀城,郝昭就在城中再筑重墙让蜀军无法攀爬;诸葛亮又派军士挖地道,郝昭则在城内将地道横截挖断,双方相持了二十余日直到转年正月。曹真派魏将军费曜前去救援,魏明帝曹睿也遣张郃率领三万人增援。曹睿亲自为张郃饯行,问及张郃是不是等魏军援兵赶到时陈仓已经失守,张郃答道:“不用等我赶到诸葛亮就已经退兵了,估计蜀汉军队的粮食供应不会超过十天。”果然如张郃所说,诸葛亮的第二次北伐在张郃赶来之前就因粮尽撤兵。不过这次北伐也并非没有收获,在撤退时魏将军王双率领骑兵前来追击,被蜀汉军队击杀。
公元229年春,诸葛亮进行了第三次北伐,这一次出兵没有再深入魏国境内,而是把目光放在了紧邻汉中的魏阴平(郡治今甘肃文县西北)、武都(郡治在甘肃成县西北)二郡,命将军陈式前去攻取。这两个魏国边郡紧邻汉中,当年刘备曾派偏将吴兰、雷铜攻取,但未能拿下。此时魏国大将雍州刺史(治所在长安,雍州为魏国从凉州分置)郭淮打算反击陈式,诸葛亮率主力赶到建威(今甘肃西和县北),郭淮撤退,两郡最终被陈式顺利攻下。后主刘禅鉴于诸葛亮在几个月内就率蜀汉军队斩将拔地,而街亭之失罪在马谡,下诏恢复了诸葛亮丞相官职。当年拿下两郡后,诸葛丞相没有再对魏国用兵,而是在汉中进行休整,并建造了汉城(今陕西勉县西南)和乐城(今陕西城固东,三条谷道之一的骆谷即在城固西北)用以巩固防务。这一年,老将军赵云病故。
一年多的时间里,蜀军三寇魏境,还在汉中造城,对魏国的威胁已经越来越大。大将军曹真认为蜀军不断犯边,应当立即出兵征讨,只要分兵数路同时进军,就可以取得大胜。曹真将伐蜀建议上奏魏明帝曹睿,曹睿批准。《曹真传》记载:公元230年八月,曹真由长安出发,走魏延建议奇袭的那条子午道,司马懿逆汉水西进,计划于汉中南郑(汉中郡治,今陕西汉中市)会师,其余的魏军有的出斜谷,有的出武威(郡治今甘肃武威,同时也是凉州州治),多路同时进攻。蜀汉方面,诸葛丞相听闻魏军大举来犯,一方面在汉中集结军队,一方面让李严率二万士兵从江州(今重庆市)增援汉中,因为李严同为托孤大臣,作为补偿诸葛丞相向刘禅举荐了李严的儿子李丰担任江州都督督军,主持李严走后的政务。
当年刘备夺取汉中时杀了夏侯渊,夏侯渊之子夏侯霸一直打算为父报仇。此次他担任曹真先锋,率先攻到汉中兴势(今陕西洋县北)。夏侯霸的军营驻扎在山谷中,蜀地百姓看到了,得知领兵的是夏侯霸,于是引导蜀军进攻。夏侯霸身先士卒亲自在鹿角间搏杀,幸好魏军来援,蜀军撤退。不过,除了少量的先锋部队外,魏军主力没有一路到达。《曹真传》中记载:恰逢一连下了三十多天大雨,有的栈道被水冲断,魏明帝曹睿下诏令曹真等退军。此时蜀汉军队开始发动反击,诸葛丞相遣魏延、吴懿两人率军进入魏南安郡,深入了羌人的聚集地,在阳溪(今甘肃渭源北)将郭淮、费曜打得大败(《魏延传》载:延大破淮等)。