HOUSTON -- As something of a road warrior, Aaron Cook was the perfect remedy for the Colorado Rockies' struggles at Minute Maid Park.
Cook, who has the majors' best winning percentage on the road since 2004, pitched 6 1/3 strong innings to help the Rockies to a 2-1 win Saturday night that broke a seven-game losing streak in Houston.
Luis Gonzalez and Todd Helton hit RBI singles in the victory, which also snapped Colorado's season-high three-game losing streak.
Colorado beat Roy Oswalt for the first time, jumping on the Houston starter for four hits and two runs in the third inning. Oswalt had won all five previous starts against the Rockies.
He was outpitched by Cook, who allowed five hits and one run while striking out six. Brian Fuentes struck out two in a perfect ninth for his ninth save. He has converted 25 of his last 26 chances.
Since 2004, Cook (4-3) is 10-1 in 18 road starts.
"Cook gave us just a gutsy performance and we needed it," Rockies manager Clint Hurdle said. "He gave us everything he had."
The Rockies have lost 16 of 20 games at Minute Maid, including the series opener on Friday night, and have never won a series there. They'll try for their first series win in Houston since 1995 at the Astrodome with a win on Sunday.
"You can count on one hand our victories here," Hurdle said. "Maybe we can fill up that hand tomorrow."
Oswalt (5-3) allowed eight hits, struck out four and walked one in seven innings. He was coming off his worst start of the season, when he lasted just 4 1/3 innings and allowed 10 hits and seven runs in a 7-5 loss to San Francisco.
Cook said it is "fun" to play in Houston and that he likes the energy of the crowd. But he knew he was in for a battle Saturday pitching against back-to-back 20-game winner Oswalt.
"You pretty much know what to expect from Oswalt," Cook said. "He's going to be consistent and not give you much, so I knew what I had to do to keep us in the game."
Astros right fielder Jason Lane, who went 0-for-3, said Cook made it difficult for Houston to get anything going.
"(He) had great velocity with a ton of movement," Lane said. "That's just tough to do a whole lot against."
Gonzalez was inserted in the lineup at second base in place of Jamey Carroll after hitting a pinch-hit home run on Friday night.
"I've been working every day to try to improve and I feel a lot better now," Gonzalez said. "Every at-bat has been good lately. I'm just a little more comfortable and I'm seeing a lot of pitches."
Hurdle has been pleased with the recent play of Gonzalez.
"He got a big hit for us," Hurdle said. "It was good for him. He needed it and we needed it."
Oswalt got on track in the fourth and retired 12 of the last 15 batters before being relieved by Chad Qualls. Qualls allowed one hit and walked one in two inning. But the Astros couldn't muster much offense after scoring 12 runs and getting 15 hits on Friday night.
Oswalt said he was troubled by a stomach ailment before the game, but that he felt better late.
"I got kind of sick before the game," Oswalt said. "No excuses, that wasn't the problem. But I just threw some bad pitches here and there. I caught my wind around the fifth and I felt better from the fifth inning on."
Mike Lamb had three hits, including two doubles, and scored in the sixth inning on a sacrifice fly by Preston Wilson to make the score 2-1. He was playing in place of Lance Berkman, who sat out after experiencing tightness in his left hamstring on Friday.
Adam Everett's double that hit just in front of the left-field wall with one out in the seventh inning chased Cook. He was replaced by Ray King.
Colorado reliever Ramon Ramirez extended his streak of scoreless innings to 15 1/3 innings on Saturday. He struck out one and allowed no hits in 1 1/3 innings. ... Colorado LF Matt Holliday had a single in the eighth inning to extend his hitting streak to a season-high eight games. ... Astros 2B Craig Biggio had a double in the fifth inning and has hit safely in 11 of the last 13 games.